mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-05-31 08:06:39 +00:00
AS3: Clickable usage detection for multinames
This commit is contained in:
@@ -808,20 +808,22 @@ public class ABC {
|
||||
return isValid;
|
||||
}
|
||||
|
||||
private void checkMultinameUsedInMethod(int multinameIndex, int methodInfo, List<MultinameUsage> ret, int classIndex, int traitIndex, boolean isStatic, boolean isInitializer) {
|
||||
private void checkMultinameUsedInMethod(int multinameIndex, int methodInfo, List<MultinameUsage> ret, int classIndex, int traitIndex, boolean isStatic, boolean isInitializer,Traits traits,int parentTraitIndex) {
|
||||
for (int p = 0; p < method_info[methodInfo].param_types.length; p++) {
|
||||
if (method_info[methodInfo].param_types[p] == multinameIndex) {
|
||||
ret.add(new MethodParamsMultinameUsage(multinameIndex, classIndex, traitIndex, isStatic, isInitializer));
|
||||
ret.add(new MethodParamsMultinameUsage(multinameIndex, classIndex, traitIndex, isStatic, isInitializer,traits,parentTraitIndex));
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (method_info[methodInfo].ret_type == multinameIndex) {
|
||||
ret.add(new MethodReturnTypeMultinameUsage(multinameIndex, classIndex, traitIndex, isStatic, isInitializer));
|
||||
ret.add(new MethodReturnTypeMultinameUsage(multinameIndex, classIndex, traitIndex, isStatic, isInitializer,traits,parentTraitIndex));
|
||||
}
|
||||
MethodBody body = findBody(methodInfo);
|
||||
if (body != null) {
|
||||
findMultinameUsageInTraits(body.traits,multinameIndex,isStatic,classIndex,ret,traitIndex);
|
||||
for(ABCException e:body.exceptions){
|
||||
if((e.name_index==multinameIndex)||(e.type_index==multinameIndex)){
|
||||
ret.add(new MethodBodyMultinameUsage(multinameIndex, classIndex, traitIndex, isStatic, isInitializer));
|
||||
ret.add(new MethodBodyMultinameUsage(multinameIndex, classIndex, traitIndex, isStatic, isInitializer,traits,parentTraitIndex));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -829,7 +831,7 @@ public class ABC {
|
||||
for (int o = 0; o < ins.definition.operands.length; o++) {
|
||||
if (ins.definition.operands[o] == AVM2Code.DAT_MULTINAME_INDEX) {
|
||||
if (ins.operands[o] == multinameIndex) {
|
||||
ret.add(new MethodBodyMultinameUsage(multinameIndex, classIndex, traitIndex, isStatic, isInitializer));
|
||||
ret.add(new MethodBodyMultinameUsage(multinameIndex, classIndex, traitIndex, isStatic, isInitializer,traits,parentTraitIndex));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -838,23 +840,23 @@ public class ABC {
|
||||
}
|
||||
}
|
||||
|
||||
private void findMultinameUsageInTraits(Traits traits, int multinameIndex, boolean isStatic, int classIndex, List<MultinameUsage> ret) {
|
||||
private void findMultinameUsageInTraits(Traits traits, int multinameIndex, boolean isStatic, int classIndex, List<MultinameUsage> ret,int parentTraitIndex) {
|
||||
for (int t = 0; t < traits.traits.length; t++) {
|
||||
if (traits.traits[t] instanceof TraitSlotConst) {
|
||||
TraitSlotConst tsc = (TraitSlotConst) traits.traits[t];
|
||||
if (tsc.name_index == multinameIndex) {
|
||||
ret.add(new ConstVarNameMultinameUsage(multinameIndex, classIndex, t, isStatic));
|
||||
ret.add(new ConstVarNameMultinameUsage(multinameIndex, classIndex, t, isStatic,traits,parentTraitIndex));
|
||||
}
|
||||
if (tsc.type_index == multinameIndex) {
|
||||
ret.add(new ConstVarTypeMultinameUsage(multinameIndex, classIndex, t, isStatic));
|
||||
ret.add(new ConstVarTypeMultinameUsage(multinameIndex, classIndex, t, isStatic,traits,parentTraitIndex));
|
||||
}
|
||||
}
|
||||
if (traits.traits[t] instanceof TraitMethodGetterSetter) {
|
||||
TraitMethodGetterSetter tmgs = (TraitMethodGetterSetter) traits.traits[t];
|
||||
if (tmgs.name_index == multinameIndex) {
|
||||
ret.add(new MethodNameMultinameUsage(multinameIndex, classIndex, t, isStatic, false));
|
||||
ret.add(new MethodNameMultinameUsage(multinameIndex, classIndex, t, isStatic, false,traits,parentTraitIndex));
|
||||
}
|
||||
checkMultinameUsedInMethod(multinameIndex, tmgs.method_info, ret, classIndex, t, isStatic, false);
|
||||
checkMultinameUsedInMethod(multinameIndex, tmgs.method_info, ret, classIndex, t, isStatic, false,traits,parentTraitIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -876,10 +878,10 @@ public class ABC {
|
||||
ret.add(new ImplementsMultinameUsage(multinameIndex, c));
|
||||
}
|
||||
}
|
||||
checkMultinameUsedInMethod(multinameIndex, instance_info[c].iinit_index, ret, c, 0, false, true);
|
||||
checkMultinameUsedInMethod(multinameIndex, class_info[c].cinit_index, ret, c, 0, true, true);
|
||||
findMultinameUsageInTraits(instance_info[c].instance_traits, multinameIndex, false, c, ret);
|
||||
findMultinameUsageInTraits(class_info[c].static_traits, multinameIndex, true, c, ret);
|
||||
checkMultinameUsedInMethod(multinameIndex, instance_info[c].iinit_index, ret, c, 0, false, true,null,-1);
|
||||
checkMultinameUsedInMethod(multinameIndex, class_info[c].cinit_index, ret, c, 0, true, true,null,-1);
|
||||
findMultinameUsageInTraits(instance_info[c].instance_traits, multinameIndex, false, c, ret,-1);
|
||||
findMultinameUsageInTraits(class_info[c].static_traits, multinameIndex, true, c, ret,-1);
|
||||
}
|
||||
loopm:
|
||||
for (int m = 1; m < constants.constant_multiname.length; m++) {
|
||||
|
||||
@@ -15,56 +15,86 @@
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
package com.jpexs.asdec.abc.gui;
|
||||
|
||||
import com.jpexs.asdec.Main;
|
||||
import com.jpexs.asdec.abc.ABC;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.TreeSelectionEvent;
|
||||
import javax.swing.event.TreeSelectionListener;
|
||||
import javax.swing.tree.DefaultTreeCellRenderer;
|
||||
|
||||
import javax.swing.tree.TreePath;
|
||||
|
||||
public class ClassesListTree extends JTree implements TreeSelectionListener {
|
||||
public ABC abc;
|
||||
|
||||
public ClassesListTree(ABC abc) {
|
||||
this.abc = abc;
|
||||
setModel(new ClassesListTreeModel(abc));
|
||||
addTreeSelectionListener(this);
|
||||
DefaultTreeCellRenderer treeRenderer = new DefaultTreeCellRenderer();
|
||||
ClassLoader cldr = this.getClass().getClassLoader();
|
||||
java.net.URL imageURL = cldr.getResource("com/jpexs/asdec/abc/gui/graphics/class.png");
|
||||
ImageIcon leafIcon = new ImageIcon(imageURL);
|
||||
treeRenderer.setLeafIcon(leafIcon);
|
||||
setCellRenderer(treeRenderer);
|
||||
}
|
||||
public ABC abc;
|
||||
|
||||
public void setABC(ABC abc) {
|
||||
setModel(new ClassesListTreeModel(abc));
|
||||
this.abc = abc;
|
||||
}
|
||||
public void selectClass(int classIndex) {
|
||||
List<TreePart> pathList = new ArrayList<TreePart>();
|
||||
String packageName = abc.instance_info[classIndex].getName(abc.constants).getNamespace(abc.constants).getName(abc.constants);
|
||||
String className = abc.instance_info[classIndex].getName(abc.constants).getName(abc.constants);
|
||||
String full = packageName + "." + className;
|
||||
String parts[] = full.split("\\.");
|
||||
String s = "";
|
||||
pathList.add(new TreePart("", "", -1));
|
||||
for (int j = 0; j < parts.length; j++) {
|
||||
if (!s.endsWith(".")) {
|
||||
s += ".";
|
||||
}
|
||||
s += parts[j];
|
||||
TreePart tp = new TreePart(s, parts[j], j < parts.length - 1 ? -1 : classIndex);
|
||||
if (!pathList.contains(tp)) {
|
||||
pathList.add(tp);
|
||||
}
|
||||
}
|
||||
|
||||
public void valueChanged(TreeSelectionEvent e) {
|
||||
if (Main.isWorking()) return;
|
||||
final TreePart tp = (TreePart) getLastSelectedPathComponent();
|
||||
if (tp == null) return;
|
||||
if (tp.classIndex != -1) {
|
||||
if (!Main.isWorking()) {
|
||||
Main.startWork("Decompiling class...");
|
||||
(new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
Main.abcMainFrame.navigator.setClassIndex(tp.classIndex);
|
||||
Main.abcMainFrame.decompiledTextArea.setClassIndex(tp.classIndex, abc);
|
||||
Main.abcMainFrame.detailPanel.methodTraitPanel.methodCodePanel.sourceTextArea.setText("");
|
||||
Main.stopWork();
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
}
|
||||
}
|
||||
TreePath tp = new TreePath(pathList.toArray());
|
||||
setSelectionPath(tp);
|
||||
scrollPathToVisible(tp);
|
||||
}
|
||||
|
||||
public ClassesListTree(ABC abc) {
|
||||
this.abc = abc;
|
||||
setModel(new ClassesListTreeModel(abc));
|
||||
addTreeSelectionListener(this);
|
||||
DefaultTreeCellRenderer treeRenderer = new DefaultTreeCellRenderer();
|
||||
ClassLoader cldr = this.getClass().getClassLoader();
|
||||
java.net.URL imageURL = cldr.getResource("com/jpexs/asdec/abc/gui/graphics/class.png");
|
||||
ImageIcon leafIcon = new ImageIcon(imageURL);
|
||||
treeRenderer.setLeafIcon(leafIcon);
|
||||
setCellRenderer(treeRenderer);
|
||||
}
|
||||
|
||||
public void setABC(ABC abc) {
|
||||
setModel(new ClassesListTreeModel(abc));
|
||||
this.abc = abc;
|
||||
}
|
||||
|
||||
public void valueChanged(TreeSelectionEvent e) {
|
||||
if (Main.isWorking()) {
|
||||
return;
|
||||
}
|
||||
final TreePart tp = (TreePart) getLastSelectedPathComponent();
|
||||
if (tp == null) {
|
||||
return;
|
||||
}
|
||||
if (tp.classIndex != -1) {
|
||||
if (!Main.isWorking()) {
|
||||
Main.startWork("Decompiling class...");
|
||||
(new Thread() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
Main.abcMainFrame.navigator.setClassIndex(tp.classIndex);
|
||||
Main.abcMainFrame.decompiledTextArea.setClassIndex(tp.classIndex, abc);
|
||||
Main.abcMainFrame.detailPanel.methodTraitPanel.methodCodePanel.sourceTextArea.setText("");
|
||||
Main.stopWork();
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,67 +15,134 @@
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
package com.jpexs.asdec.abc.gui;
|
||||
|
||||
import com.jpexs.asdec.Main;
|
||||
import com.jpexs.asdec.abc.ABC;
|
||||
import com.jpexs.asdec.abc.usages.InsideClassMultinameUsage;
|
||||
import com.jpexs.asdec.abc.usages.MethodMultinameUsage;
|
||||
import com.jpexs.asdec.abc.usages.MultinameUsage;
|
||||
import com.jpexs.asdec.abc.usages.TraitMultinameUsage;
|
||||
import com.jpexs.asdec.gui.View;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Container;
|
||||
import java.awt.FlowLayout;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.swing.DefaultListModel;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JList;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.tree.TreePath;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author JPEXS
|
||||
*/
|
||||
public class UsageFrame extends JFrame implements ActionListener {
|
||||
private JButton gotoButton=new JButton("Go to");
|
||||
private JButton cancelButton=new JButton("Cancel");
|
||||
private JList usageList;
|
||||
private UsageListModel usageListModel;
|
||||
public UsageFrame(ABC abc,int multinameIndex){
|
||||
List<MultinameUsage> usages=abc.findMultinameUsage(multinameIndex);
|
||||
usageListModel=new UsageListModel(abc);
|
||||
for(MultinameUsage u:usages){
|
||||
usageListModel.addElement(u);
|
||||
public class UsageFrame extends JFrame implements ActionListener, MouseListener {
|
||||
|
||||
private JButton gotoButton = new JButton("Go to");
|
||||
private JButton cancelButton = new JButton("Cancel");
|
||||
private JList usageList;
|
||||
private UsageListModel usageListModel;
|
||||
private ABC abc;
|
||||
|
||||
public UsageFrame(ABC abc, int multinameIndex) {
|
||||
List<MultinameUsage> usages = abc.findMultinameUsage(multinameIndex);
|
||||
this.abc = abc;
|
||||
usageListModel = new UsageListModel(abc);
|
||||
for (MultinameUsage u : usages) {
|
||||
usageListModel.addElement(u);
|
||||
}
|
||||
usageList=new JList(usageListModel);
|
||||
usageList = new JList(usageListModel);
|
||||
gotoButton.setActionCommand("GOTO");
|
||||
gotoButton.addActionListener(this);
|
||||
cancelButton.setActionCommand("CANCEL");
|
||||
cancelButton.addActionListener(this);
|
||||
JPanel buttonsPanel=new JPanel();
|
||||
JPanel buttonsPanel = new JPanel();
|
||||
buttonsPanel.setLayout(new FlowLayout());
|
||||
//buttonsPanel.add(gotoButton);
|
||||
buttonsPanel.add(gotoButton);
|
||||
buttonsPanel.add(cancelButton);
|
||||
|
||||
Container cont=getContentPane();
|
||||
usageList.addMouseListener(this);
|
||||
Container cont = getContentPane();
|
||||
cont.setLayout(new BorderLayout());
|
||||
cont.add(new JScrollPane(usageList),BorderLayout.CENTER);
|
||||
cont.add(new JScrollPane(usageList), BorderLayout.CENTER);
|
||||
cont.add(buttonsPanel, BorderLayout.SOUTH);
|
||||
setSize(400,300);
|
||||
setTitle("Usages:"+abc.constants.constant_multiname[multinameIndex].getNameWithNamespace(abc.constants));
|
||||
setSize(400, 300);
|
||||
setTitle("Usages:" + abc.constants.constant_multiname[multinameIndex].getNameWithNamespace(abc.constants));
|
||||
View.centerScreen(this);
|
||||
View.setWindowIcon(this);
|
||||
}
|
||||
}
|
||||
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if(e.getActionCommand().equals("GOTO")){
|
||||
private void gotoUsage() {
|
||||
if (usageList.getSelectedIndex() != -1) {
|
||||
MultinameUsage usage = usageListModel.getUsage(usageList.getSelectedIndex());
|
||||
if (usage instanceof InsideClassMultinameUsage) {
|
||||
InsideClassMultinameUsage icu = (InsideClassMultinameUsage) usage;
|
||||
Main.abcMainFrame.classTree.selectClass(icu.classIndex);
|
||||
try {
|
||||
Thread.sleep(100);
|
||||
} catch (InterruptedException ex) {
|
||||
|
||||
}
|
||||
if (usage instanceof TraitMultinameUsage) {
|
||||
TraitMultinameUsage tmu=(TraitMultinameUsage)usage;
|
||||
int traitIndex=0;
|
||||
if(tmu.parentTraitIndex>-1){
|
||||
traitIndex=tmu.parentTraitIndex;
|
||||
}else{
|
||||
traitIndex=tmu.traitIndex;
|
||||
}
|
||||
if(!tmu.isStatic){
|
||||
traitIndex+=abc.class_info[tmu.classIndex].static_traits.traits.length;
|
||||
}
|
||||
if(tmu instanceof MethodMultinameUsage){
|
||||
MethodMultinameUsage mmu=(MethodMultinameUsage)usage;
|
||||
if(mmu.isInitializer==true){
|
||||
traitIndex=abc.class_info[mmu.classIndex].static_traits.traits.length+abc.instance_info[mmu.classIndex].instance_traits.traits.length+(mmu.isStatic?1:0);
|
||||
}
|
||||
}
|
||||
Main.abcMainFrame.decompiledTextArea.gotoTrait(traitIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if(e.getActionCommand().equals("CANCEL")){
|
||||
setVisible(false);
|
||||
}
|
||||
}
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if (e.getActionCommand().equals("GOTO")) {
|
||||
gotoUsage();
|
||||
setVisible(false);
|
||||
}
|
||||
if (e.getActionCommand().equals("CANCEL")) {
|
||||
setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
if (e.getClickCount() == 2) {
|
||||
gotoUsage();
|
||||
}
|
||||
}
|
||||
|
||||
public void mousePressed(MouseEvent e) {
|
||||
}
|
||||
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
}
|
||||
|
||||
public void mouseEntered(MouseEvent e) {
|
||||
}
|
||||
|
||||
public void mouseExited(MouseEvent e) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,6 +42,10 @@ public class UsageListModel extends DefaultListModel{
|
||||
return ((MultinameUsage)super.getElementAt(index)).toString(abc);
|
||||
}
|
||||
|
||||
public MultinameUsage getUsage(int index){
|
||||
return ((MultinameUsage)super.getElementAt(index));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -21,29 +21,31 @@ package com.jpexs.asdec.abc.usages;
|
||||
import com.jpexs.asdec.abc.ABC;
|
||||
import com.jpexs.asdec.abc.types.traits.TraitMethodGetterSetter;
|
||||
import com.jpexs.asdec.abc.types.traits.TraitSlotConst;
|
||||
import com.jpexs.asdec.abc.types.traits.Traits;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author JPEXS
|
||||
*/
|
||||
public abstract class ConstVarMultinameUsage extends InsideClassMultinameUsage {
|
||||
public abstract class ConstVarMultinameUsage extends TraitMultinameUsage {
|
||||
|
||||
public int traitIndex ;
|
||||
public boolean isStatic;
|
||||
public ConstVarMultinameUsage(int multinameIndex,int classIndex,int traitIndex,boolean isStatic)
|
||||
public ConstVarMultinameUsage(int multinameIndex,int classIndex,int traitIndex,boolean isStatic,Traits traits,int parentTraitIndex)
|
||||
{
|
||||
super(multinameIndex,classIndex);
|
||||
this.traitIndex=traitIndex;
|
||||
this.isStatic=isStatic;
|
||||
super(multinameIndex,classIndex,traitIndex,isStatic,traits,parentTraitIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(ABC abc) {
|
||||
return super.toString(abc)+" "+(isStatic?
|
||||
((TraitSlotConst)abc.class_info[classIndex].static_traits.traits[traitIndex]).convert(abc.constants, abc.method_info, abc,true)
|
||||
:
|
||||
((TraitSlotConst)abc.instance_info[classIndex].instance_traits.traits[traitIndex]).convert(abc.constants, abc.method_info, abc,false)
|
||||
);
|
||||
return super.toString(abc)+" "+
|
||||
(parentTraitIndex>-1?
|
||||
(isStatic?
|
||||
(((TraitMethodGetterSetter)abc.class_info[classIndex].static_traits.traits[parentTraitIndex]).convert(abc.constants, abc.method_info, abc,isStatic)):
|
||||
(((TraitMethodGetterSetter)abc.instance_info[classIndex].instance_traits.traits[parentTraitIndex]).convert(abc.constants, abc.method_info, abc,isStatic))
|
||||
)
|
||||
:
|
||||
"")+
|
||||
((TraitSlotConst)traits.traits[traitIndex]).convert(abc.constants, abc.method_info, abc,isStatic)
|
||||
;
|
||||
}
|
||||
|
||||
public int getTraitIndex() {
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
package com.jpexs.asdec.abc.usages;
|
||||
|
||||
import com.jpexs.asdec.abc.ABC;
|
||||
import com.jpexs.asdec.abc.types.traits.Traits;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -26,9 +27,9 @@ import com.jpexs.asdec.abc.ABC;
|
||||
*/
|
||||
public class ConstVarNameMultinameUsage extends ConstVarMultinameUsage{
|
||||
|
||||
public ConstVarNameMultinameUsage(int multinameIndex,int classIndex,int traitIndex,boolean isStatic)
|
||||
public ConstVarNameMultinameUsage(int multinameIndex,int classIndex,int traitIndex,boolean isStatic,Traits traits,int parentTraitIndex)
|
||||
{
|
||||
super(multinameIndex,classIndex,traitIndex,isStatic);
|
||||
super(multinameIndex,classIndex,traitIndex,isStatic,traits,parentTraitIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
package com.jpexs.asdec.abc.usages;
|
||||
|
||||
import com.jpexs.asdec.abc.ABC;
|
||||
import com.jpexs.asdec.abc.types.traits.Traits;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -26,9 +27,9 @@ import com.jpexs.asdec.abc.ABC;
|
||||
*/
|
||||
public class ConstVarTypeMultinameUsage extends ConstVarMultinameUsage{
|
||||
|
||||
public ConstVarTypeMultinameUsage(int multinameIndex,int classIndex,int traitIndex,boolean isStatic)
|
||||
public ConstVarTypeMultinameUsage(int multinameIndex,int classIndex,int traitIndex,boolean isStatic,Traits traits,int parentTraitIndex)
|
||||
{
|
||||
super(multinameIndex,classIndex,traitIndex,isStatic);
|
||||
super(multinameIndex,classIndex,traitIndex,isStatic,traits,parentTraitIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
package com.jpexs.asdec.abc.usages;
|
||||
|
||||
import com.jpexs.asdec.abc.ABC;
|
||||
import com.jpexs.asdec.abc.types.traits.Traits;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -26,9 +27,9 @@ import com.jpexs.asdec.abc.ABC;
|
||||
*/
|
||||
public class MethodBodyMultinameUsage extends MethodMultinameUsage {
|
||||
|
||||
public MethodBodyMultinameUsage(int multinameIndex,int classIndex,int traitIndex,boolean isStatic,boolean isInitializer)
|
||||
public MethodBodyMultinameUsage(int multinameIndex,int classIndex,int traitIndex,boolean isStatic,boolean isInitializer,Traits traits,int parentTraitIndex)
|
||||
{
|
||||
super(multinameIndex,classIndex,traitIndex,isStatic,isInitializer);
|
||||
super(multinameIndex,classIndex,traitIndex,isStatic,isInitializer,traits,parentTraitIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -20,21 +20,19 @@ package com.jpexs.asdec.abc.usages;
|
||||
|
||||
import com.jpexs.asdec.abc.ABC;
|
||||
import com.jpexs.asdec.abc.types.traits.TraitMethodGetterSetter;
|
||||
import com.jpexs.asdec.abc.types.traits.Traits;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author JPEXS
|
||||
*/
|
||||
public abstract class MethodMultinameUsage extends InsideClassMultinameUsage {
|
||||
public abstract class MethodMultinameUsage extends TraitMultinameUsage {
|
||||
|
||||
public int traitIndex ;
|
||||
public boolean isStatic;
|
||||
public boolean isInitializer;
|
||||
public MethodMultinameUsage(int multinameIndex,int classIndex,int traitIndex,boolean isStatic,boolean isInitializer)
|
||||
|
||||
public MethodMultinameUsage(int multinameIndex,int classIndex,int traitIndex,boolean isStatic,boolean isInitializer,Traits traits,int parentTraitIndex)
|
||||
{
|
||||
super(multinameIndex,classIndex);
|
||||
this.traitIndex=traitIndex;
|
||||
this.isStatic=isStatic;
|
||||
super(multinameIndex,classIndex,traitIndex,isStatic,traits,parentTraitIndex);
|
||||
this.isInitializer=isInitializer;
|
||||
}
|
||||
|
||||
@@ -51,12 +49,17 @@ public abstract class MethodMultinameUsage extends InsideClassMultinameUsage {
|
||||
(isStatic?
|
||||
"class initializer":
|
||||
"instance initializer")
|
||||
:
|
||||
:(
|
||||
(parentTraitIndex>-1?
|
||||
(isStatic?
|
||||
((TraitMethodGetterSetter)abc.class_info[classIndex].static_traits.traits[traitIndex]).convert(abc.constants, abc.method_info, abc,true)
|
||||
:
|
||||
((TraitMethodGetterSetter)abc.instance_info[classIndex].instance_traits.traits[traitIndex]).convert(abc.constants, abc.method_info, abc,false)
|
||||
));
|
||||
(((TraitMethodGetterSetter)abc.class_info[classIndex].static_traits.traits[parentTraitIndex]).convert(abc.constants, abc.method_info, abc,isStatic)):
|
||||
(((TraitMethodGetterSetter)abc.instance_info[classIndex].instance_traits.traits[parentTraitIndex]).convert(abc.constants, abc.method_info, abc,isStatic))
|
||||
)+" "
|
||||
:
|
||||
"")
|
||||
+
|
||||
(((TraitMethodGetterSetter)traits.traits[traitIndex]).convert(abc.constants, abc.method_info, abc,isStatic)))
|
||||
);
|
||||
}
|
||||
|
||||
public int getTraitIndex() {
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
package com.jpexs.asdec.abc.usages;
|
||||
|
||||
import com.jpexs.asdec.abc.ABC;
|
||||
import com.jpexs.asdec.abc.types.traits.Traits;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -26,9 +27,9 @@ import com.jpexs.asdec.abc.ABC;
|
||||
*/
|
||||
public class MethodNameMultinameUsage extends MethodMultinameUsage {
|
||||
|
||||
public MethodNameMultinameUsage(int multinameIndex,int classIndex,int traitIndex,boolean isStatic,boolean isInitializer)
|
||||
public MethodNameMultinameUsage(int multinameIndex,int classIndex,int traitIndex,boolean isStatic,boolean isInitializer,Traits traits,int parentTraitIndex)
|
||||
{
|
||||
super(multinameIndex,classIndex,traitIndex,isStatic,isInitializer);
|
||||
super(multinameIndex,classIndex,traitIndex,isStatic,isInitializer,traits,parentTraitIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
package com.jpexs.asdec.abc.usages;
|
||||
|
||||
import com.jpexs.asdec.abc.ABC;
|
||||
import com.jpexs.asdec.abc.types.traits.Traits;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -26,13 +27,13 @@ import com.jpexs.asdec.abc.ABC;
|
||||
*/
|
||||
public class MethodParamsMultinameUsage extends MethodMultinameUsage {
|
||||
|
||||
public MethodParamsMultinameUsage(int multinameIndex,int classIndex,int traitIndex,boolean isStatic,boolean isInitializer)
|
||||
public MethodParamsMultinameUsage(int multinameIndex,int classIndex,int traitIndex,boolean isStatic,boolean isInitializer,Traits traits,int parentTraitIndex)
|
||||
{
|
||||
super(multinameIndex,classIndex,traitIndex,isStatic,isInitializer);
|
||||
super(multinameIndex,classIndex,traitIndex,isStatic,isInitializer,traits,parentTraitIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(ABC abc) {
|
||||
return super.toString(abc)+" return type";
|
||||
return super.toString(abc)+" params";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
package com.jpexs.asdec.abc.usages;
|
||||
|
||||
import com.jpexs.asdec.abc.ABC;
|
||||
import com.jpexs.asdec.abc.types.traits.Traits;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -26,13 +27,13 @@ import com.jpexs.asdec.abc.ABC;
|
||||
*/
|
||||
public class MethodReturnTypeMultinameUsage extends MethodMultinameUsage {
|
||||
|
||||
public MethodReturnTypeMultinameUsage(int multinameIndex,int classIndex,int traitIndex,boolean isStatic,boolean isInitializer)
|
||||
public MethodReturnTypeMultinameUsage(int multinameIndex,int classIndex,int traitIndex,boolean isStatic,boolean isInitializer,Traits traits,int parentTraitIndex)
|
||||
{
|
||||
super(multinameIndex,classIndex,traitIndex,isStatic,isInitializer);
|
||||
super(multinameIndex,classIndex,traitIndex,isStatic,isInitializer,traits,parentTraitIndex);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(ABC abc) {
|
||||
return super.toString(abc)+" params";
|
||||
return super.toString(abc)+" return type";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (C) 2011 JPEXS
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
package com.jpexs.asdec.abc.usages;
|
||||
|
||||
import com.jpexs.asdec.abc.types.traits.Traits;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author JPEXS
|
||||
*/
|
||||
public abstract class TraitMultinameUsage extends InsideClassMultinameUsage {
|
||||
public int traitIndex ;
|
||||
public boolean isStatic;
|
||||
public Traits traits;
|
||||
public int parentTraitIndex;
|
||||
public TraitMultinameUsage(int multinameIndex,int classIndex,int traitIndex,boolean isStatic,Traits traits,int parentTraitIndex)
|
||||
{
|
||||
super(multinameIndex,classIndex);
|
||||
this.traitIndex=traitIndex;
|
||||
this.isStatic=isStatic;
|
||||
this.traits=traits;
|
||||
this.parentTraitIndex=parentTraitIndex;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user