Package jadx.gui.treemodel

Source Code of jadx.gui.treemodel.JClass

package jadx.gui.treemodel;

import jadx.api.JavaClass;
import jadx.api.JavaField;
import jadx.api.JavaMethod;
import jadx.core.dex.info.AccessInfo;
import jadx.gui.utils.NLS;
import jadx.gui.utils.Utils;

import javax.swing.Icon;
import javax.swing.ImageIcon;

public class JClass extends JNode {
  private static final long serialVersionUID = -1239986875244097177L;

  private static final ImageIcon ICON_CLASS = Utils.openIcon("class_obj");
  private static final ImageIcon ICON_CLASS_DEFAULT = Utils.openIcon("class_default_obj");
  private static final ImageIcon ICON_CLASS_PRIVATE = Utils.openIcon("innerclass_private_obj");
  private static final ImageIcon ICON_CLASS_PROTECTED = Utils.openIcon("innerclass_protected_obj");
  private static final ImageIcon ICON_INTERFACE = Utils.openIcon("int_obj");
  private static final ImageIcon ICON_ENUM = Utils.openIcon("enum_obj");
  private static final ImageIcon ICON_ANNOTATION = Utils.openIcon("annotation_obj");

  private final JavaClass cls;
  private final JClass jParent;
  private boolean loaded;

  public JClass(JavaClass cls) {
    this.cls = cls;
    this.jParent = null;
    this.loaded = false;
  }

  public JClass(JavaClass cls, JClass parent) {
    this.cls = cls;
    this.jParent = parent;
    this.loaded = true;
  }

  public JavaClass getCls() {
    return cls;
  }

  public synchronized void load() {
    if (!loaded) {
      cls.decompile();
      loaded = true;
    }
    update();
  }

  public synchronized void update() {
    removeAllChildren();
    if (!loaded) {
      add(new TextNode(NLS.str("tree.loading")));
    } else {
      for (JavaClass javaClass : cls.getInnerClasses()) {
        JClass innerCls = new JClass(javaClass, this);
        add(innerCls);
        innerCls.update();
      }
      for (JavaField f : cls.getFields()) {
        add(new JField(f, this));
      }
      for (JavaMethod m : cls.getMethods()) {
        add(new JMethod(m, this));
      }
    }
  }

  public String getCode() {
    return cls.getCode();
  }

  @Override
  public Icon getIcon() {
    AccessInfo accessInfo = cls.getAccessInfo();
    if (accessInfo.isEnum()) {
      return ICON_ENUM;
    }
    if (accessInfo.isAnnotation()) {
      return ICON_ANNOTATION;
    }
    if (accessInfo.isInterface()) {
      return ICON_INTERFACE;
    }
    if (accessInfo.isProtected()) {
      return ICON_CLASS_PROTECTED;
    }
    if (accessInfo.isPrivate()) {
      return ICON_CLASS_PRIVATE;
    }
    if (accessInfo.isPublic()) {
      return ICON_CLASS;
    }
    return ICON_CLASS_DEFAULT;
  }

  @Override
  public JClass getJParent() {
    return jParent;
  }

  @Override
  public JClass getRootClass() {
    if (jParent == null) {
      return this;
    }
    return jParent.getRootClass();
  }

  public String getFullName() {
    return cls.getFullName();
  }

  @Override
  public int getLine() {
    return cls.getDecompiledLine();
  }

  @Override
  public int hashCode() {
    return cls.hashCode();
  }

  @Override
  public boolean equals(Object obj) {
    return this == obj || obj instanceof JClass && cls.equals(((JClass) obj).cls);
  }

  @Override
  public String makeString() {
    return cls.getName();
  }

  @Override
  public String makeLongString() {
    return cls.getFullName();
  }
}
TOP

Related Classes of jadx.gui.treemodel.JClass

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.