mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-09-24 21:51:32 +00:00
AS highligter - support for obfuscated names
This commit is contained in:
@@ -20,6 +20,7 @@ import com.jpexs.debugger.flash.Variable;
|
||||
import com.jpexs.debugger.flash.VariableFlags;
|
||||
import com.jpexs.debugger.flash.VariableType;
|
||||
import com.jpexs.debugger.flash.messages.in.InGetVariable;
|
||||
import com.jpexs.decompiler.flash.IdentifiersDeobfuscation;
|
||||
import com.jpexs.decompiler.flash.SWF;
|
||||
import com.jpexs.decompiler.flash.abc.ABC;
|
||||
import com.jpexs.decompiler.flash.abc.ClassPath;
|
||||
@@ -82,6 +83,7 @@ import com.jpexs.decompiler.flash.search.ScriptSearchListener;
|
||||
import com.jpexs.decompiler.flash.search.ScriptSearchResult;
|
||||
import com.jpexs.decompiler.flash.simpleparser.LinkHandler;
|
||||
import com.jpexs.decompiler.flash.simpleparser.LinkType;
|
||||
import com.jpexs.decompiler.flash.simpleparser.Path;
|
||||
import com.jpexs.decompiler.flash.tags.ABCContainerTag;
|
||||
import com.jpexs.decompiler.flash.tags.Tag;
|
||||
import com.jpexs.decompiler.flash.timeline.AS3Package;
|
||||
@@ -117,6 +119,7 @@ import java.awt.event.MouseMotionListener;
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -953,11 +956,11 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<Scr
|
||||
|
||||
decompiledTextArea.setLinkHandler(new LinkHandler() {
|
||||
@Override
|
||||
public LinkType getClassLinkType(String className) {
|
||||
AbcIndexing.ClassIndex ci = abc.getSwf().getAbcIndex().findClass(new TypeItem(className), abc, decompiledTextArea.getScriptIndex());
|
||||
public LinkType getClassLinkType(Path className) {
|
||||
AbcIndexing.ClassIndex ci = abc.getSwf().getAbcIndex().findClass(new TypeItem(className.toString()), abc, decompiledTextArea.getScriptIndex());
|
||||
if (ci == null) {
|
||||
|
||||
AbcIndexing.TraitIndex ti = abc.getSwf().getAbcIndex().findScriptProperty(DottedChain.parseNoSuffix(className));
|
||||
AbcIndexing.TraitIndex ti = abc.getSwf().getAbcIndex().findScriptProperty(DottedChain.parseNoSuffix(className.toString()));
|
||||
if (ti == null) {
|
||||
return LinkType.NO_LINK;
|
||||
}
|
||||
@@ -983,9 +986,9 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<Scr
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean traitExists(String className, String traitName) {
|
||||
public boolean traitExists(Path className, String traitName) {
|
||||
Reference<Boolean> foundStatic = new Reference<>(null);
|
||||
AbcIndexing.TraitIndex ti = abc.getSwf().getAbcIndex().findProperty(new AbcIndexing.PropertyDef(traitName, new TypeItem(className), abc, -1),
|
||||
AbcIndexing.TraitIndex ti = abc.getSwf().getAbcIndex().findProperty(new AbcIndexing.PropertyDef(traitName, new TypeItem(className.toString()), abc, -1),
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
@@ -994,11 +997,11 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<Scr
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClassLink(String scriptName) {
|
||||
public void handleClassLink(Path scriptName) {
|
||||
Reference<SWF> swfRef = new Reference<>(null);
|
||||
AbcIndexing.ClassIndex ci = abc.getSwf().getAbcIndex().findClass(new TypeItem(scriptName), abc, decompiledTextArea.getScriptIndex());
|
||||
AbcIndexing.ClassIndex ci = abc.getSwf().getAbcIndex().findClass(new TypeItem(scriptName.toString()), abc, decompiledTextArea.getScriptIndex());
|
||||
if (ci == null) {
|
||||
AbcIndexing.TraitIndex ti = abc.getSwf().getAbcIndex().findScriptProperty(DottedChain.parseNoSuffix(scriptName));
|
||||
AbcIndexing.TraitIndex ti = abc.getSwf().getAbcIndex().findScriptProperty(DottedChain.parseNoSuffix(scriptName.toString()));
|
||||
if (ti == null) {
|
||||
return;
|
||||
}
|
||||
@@ -1008,18 +1011,20 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<Scr
|
||||
swfRef.setVal(ci.abc.getSwf());
|
||||
}
|
||||
|
||||
if (swfRef.getVal() == abc.getSwf()) {
|
||||
hilightScript(getOpenable(), scriptName);
|
||||
String scriptNamePrintable = DottedChain.parseWithSuffix(scriptName.toString()).toPrintableString(true);
|
||||
|
||||
if (swfRef.getVal() == abc.getSwf()) {
|
||||
hilightScript(getOpenable(), scriptNamePrintable);
|
||||
return;
|
||||
}
|
||||
|
||||
hilightScript(swfRef.getVal(), scriptName);
|
||||
hilightScript(swfRef.getVal(), scriptNamePrintable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleTraitLink(String className, String traitName) {
|
||||
public void handleTraitLink(Path className, String traitName) {
|
||||
Reference<Boolean> foundStatic = new Reference<>(null);
|
||||
AbcIndexing.TraitIndex ti = abc.getSwf().getAbcIndex().findProperty(new AbcIndexing.PropertyDef(traitName, new TypeItem(className), abc, -1),
|
||||
AbcIndexing.TraitIndex ti = abc.getSwf().getAbcIndex().findProperty(new AbcIndexing.PropertyDef(traitName, new TypeItem(className.toString()), abc, -1),
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
@@ -1051,9 +1056,9 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<Scr
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTraitType(String className, String traitName) {
|
||||
public Path getTraitType(Path className, String traitName) {
|
||||
Reference<Boolean> foundStatic = new Reference<>(null);
|
||||
AbcIndexing.TraitIndex ti = abc.getSwf().getAbcIndex().findProperty(new AbcIndexing.PropertyDef(traitName, new TypeItem(className), abc, -1),
|
||||
AbcIndexing.TraitIndex ti = abc.getSwf().getAbcIndex().findProperty(new AbcIndexing.PropertyDef(traitName, new TypeItem(className.toString()), abc, -1),
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
@@ -1063,15 +1068,19 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<Scr
|
||||
}
|
||||
if (ti.returnType instanceof ApplyTypeAVM2Item) {
|
||||
ApplyTypeAVM2Item at = (ApplyTypeAVM2Item) ti.returnType;
|
||||
return at.object.toString();
|
||||
return typeToPath(at.object);
|
||||
}
|
||||
return ti.returnType.toString();
|
||||
return typeToPath(ti.returnType);
|
||||
}
|
||||
|
||||
private Path typeToPath(GraphTargetItem type) {
|
||||
return new Path(Arrays.asList(type.toString().split("\\.")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTraitSubType(String className, String traitName, int level) {
|
||||
public Path getTraitSubType(Path className, String traitName, int level) {
|
||||
Reference<Boolean> foundStatic = new Reference<>(null);
|
||||
AbcIndexing.TraitIndex ti = abc.getSwf().getAbcIndex().findProperty(new AbcIndexing.PropertyDef(traitName, new TypeItem(className), abc, -1),
|
||||
AbcIndexing.TraitIndex ti = abc.getSwf().getAbcIndex().findProperty(new AbcIndexing.PropertyDef(traitName, new TypeItem(className.toString()), abc, -1),
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
@@ -1087,13 +1096,13 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<Scr
|
||||
it = ((ApplyTypeAVM2Item) it).params.get(0);
|
||||
}
|
||||
|
||||
return it.toString();
|
||||
return typeToPath(it);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTraitCallType(String className, String traitName) {
|
||||
public Path getTraitCallType(Path className, String traitName) {
|
||||
Reference<Boolean> foundStatic = new Reference<>(null);
|
||||
AbcIndexing.TraitIndex ti = abc.getSwf().getAbcIndex().findProperty(new AbcIndexing.PropertyDef(traitName, new TypeItem(className), abc, -1),
|
||||
AbcIndexing.TraitIndex ti = abc.getSwf().getAbcIndex().findProperty(new AbcIndexing.PropertyDef(traitName, new TypeItem(className.toString()), abc, -1),
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
@@ -1103,15 +1112,15 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<Scr
|
||||
}
|
||||
if (ti.callReturnType instanceof ApplyTypeAVM2Item) {
|
||||
ApplyTypeAVM2Item at = (ApplyTypeAVM2Item) ti.callReturnType;
|
||||
return at.object.toString();
|
||||
return typeToPath(at.object);
|
||||
}
|
||||
return ti.callReturnType.toString();
|
||||
return typeToPath(ti.callReturnType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTraitCallSubType(String className, String traitName, int level) {
|
||||
public Path getTraitCallSubType(Path className, String traitName, int level) {
|
||||
Reference<Boolean> foundStatic = new Reference<>(null);
|
||||
AbcIndexing.TraitIndex ti = abc.getSwf().getAbcIndex().findProperty(new AbcIndexing.PropertyDef(traitName, new TypeItem(className), abc, -1),
|
||||
AbcIndexing.TraitIndex ti = abc.getSwf().getAbcIndex().findProperty(new AbcIndexing.PropertyDef(traitName, new TypeItem(className.toString()), abc, -1),
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
@@ -1127,7 +1136,7 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<Scr
|
||||
it = ((ApplyTypeAVM2Item) it).params.get(0);
|
||||
}
|
||||
|
||||
return it.toString();
|
||||
return typeToPath(it);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.configuration.Configuration;
|
||||
import com.jpexs.decompiler.flash.gui.AppStrings;
|
||||
import com.jpexs.decompiler.flash.simpleparser.LinkHandler;
|
||||
import com.jpexs.decompiler.flash.simpleparser.LinkType;
|
||||
import com.jpexs.decompiler.flash.simpleparser.Path;
|
||||
import com.jpexs.decompiler.flash.simpleparser.SimpleParser;
|
||||
import com.jpexs.helpers.Reference;
|
||||
import java.awt.Color;
|
||||
@@ -73,40 +74,40 @@ public class LineMarkedEditorPane extends UndoFixedEditorPane implements LinkHan
|
||||
private SimpleParser parser;
|
||||
|
||||
@Override
|
||||
public LinkType getClassLinkType(String className) {
|
||||
public LinkType getClassLinkType(Path className) {
|
||||
return LinkType.NO_LINK;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean traitExists(String className, String traitName) {
|
||||
public boolean traitExists(Path className, String traitName) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClassLink(String className) {
|
||||
public void handleClassLink(Path className) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleTraitLink(String className, String traitName) {
|
||||
public void handleTraitLink(Path className, String traitName) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTraitType(String className, String traitName) {
|
||||
return "*";
|
||||
public Path getTraitType(Path className, String traitName) {
|
||||
return new Path("*");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTraitSubType(String className, String traitName, int level) {
|
||||
public Path getTraitSubType(Path className, String traitName, int level) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTraitCallType(String className, String traitName) {
|
||||
public Path getTraitCallType(Path className, String traitName) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTraitCallSubType(String className, String traitName, int level) {
|
||||
public Path getTraitCallSubType(Path className, String traitName, int level) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.gui.Main;
|
||||
import com.jpexs.decompiler.flash.gui.View;
|
||||
import com.jpexs.decompiler.flash.gui.ViewMessages;
|
||||
import com.jpexs.decompiler.flash.simpleparser.LinkType;
|
||||
import com.jpexs.decompiler.flash.simpleparser.Path;
|
||||
import com.jpexs.decompiler.flash.simpleparser.SimpleParseException;
|
||||
import com.jpexs.decompiler.flash.simpleparser.SimpleParser;
|
||||
import java.awt.BorderLayout;
|
||||
@@ -106,12 +107,12 @@ public class VariableMarker implements SyntaxComponent, CaretListener, PropertyC
|
||||
|
||||
private Map<Integer, List<Integer>> definitionPosToReferences = new LinkedHashMap<>();
|
||||
private Map<Integer, Integer> referenceToDefinition = new LinkedHashMap<>();
|
||||
private List<String> externalTypes = new ArrayList<>();
|
||||
private List<Path> externalTypes = new ArrayList<>();
|
||||
private Map<Integer, Integer> referenceToExternalTypeIndex = new LinkedHashMap<>();
|
||||
private Map<Integer, List<Integer>> externalTypeIndexToReference = new LinkedHashMap<>();
|
||||
private Map<String, String> simpleExternalClassNameToFullClassName = new LinkedHashMap<>();
|
||||
private Map<Integer, String> referenceToExternalTraitKey = new LinkedHashMap<>();
|
||||
private Map<String, List<Integer>> externalTraitKeyToReference = new LinkedHashMap<>();
|
||||
private Map<Path, Path> simpleExternalClassNameToFullClassName = new LinkedHashMap<>();
|
||||
private Map<Integer, Path> referenceToExternalTraitKey = new LinkedHashMap<>();
|
||||
private Map<Path, List<Integer>> externalTraitKeyToReference = new LinkedHashMap<>();
|
||||
|
||||
private MouseMotionAdapter mouseMotionAdapter;
|
||||
|
||||
@@ -289,7 +290,7 @@ public class VariableMarker implements SyntaxComponent, CaretListener, PropertyC
|
||||
return;
|
||||
} else {
|
||||
if (referenceToExternalTraitKey.containsKey(tok.start)) {
|
||||
String traitKey = referenceToExternalTraitKey.get(tok.start);
|
||||
Path traitKey = referenceToExternalTraitKey.get(tok.start);
|
||||
for (int i : externalTraitKeyToReference.get(traitKey)) {
|
||||
Token referenceToken = getIdentifierTokenAt(sDoc, i);
|
||||
if (referenceToken != null) {
|
||||
@@ -669,11 +670,11 @@ public class VariableMarker implements SyntaxComponent, CaretListener, PropertyC
|
||||
Map<Integer, List<Integer>> newDefinitionPosToReferences = new LinkedHashMap<>();
|
||||
Map<Integer, Integer> newReferenceToDefinition = new LinkedHashMap<>();
|
||||
List<SimpleParseException> newErrors = new ArrayList<>();
|
||||
List<String> newExternalTypes = new ArrayList<>();
|
||||
List<Path> newExternalTypes = new ArrayList<>();
|
||||
Map<Integer, Integer> newReferenceToExternalTypeIndex = new LinkedHashMap<>();
|
||||
Map<Integer, List<Integer>> newExternalTypeIndexToReference = new LinkedHashMap<>();
|
||||
Map<Integer, String> newReferenceToExternalTraitKey = new LinkedHashMap<>();
|
||||
Map<String, List<Integer>> newExternalTraitKeyToReference = new LinkedHashMap<>();
|
||||
Map<Integer, Path> newReferenceToExternalTraitKey = new LinkedHashMap<>();
|
||||
Map<Path, List<Integer>> newExternalTraitKeyToReference = new LinkedHashMap<>();
|
||||
parser.parse(
|
||||
fullText,
|
||||
newDefinitionPosToReferences,
|
||||
@@ -686,11 +687,10 @@ public class VariableMarker implements SyntaxComponent, CaretListener, PropertyC
|
||||
newReferenceToExternalTraitKey, newExternalTraitKeyToReference
|
||||
);
|
||||
|
||||
Map<String, String> newSimpleExternalClassNameToFullClassName = new LinkedHashMap<>();
|
||||
Map<Path, Path> newSimpleExternalClassNameToFullClassName = new LinkedHashMap<>();
|
||||
for (int i = 0; i < newExternalTypes.size(); i++) {
|
||||
String type = newExternalTypes.get(i);
|
||||
String simpleName = type.contains(".") ? type.substring(type.lastIndexOf(".") + 1) : type;
|
||||
newSimpleExternalClassNameToFullClassName.put(simpleName, type);
|
||||
Path type = newExternalTypes.get(i);
|
||||
newSimpleExternalClassNameToFullClassName.put(type.getLast(), type);
|
||||
}
|
||||
definitionPosToReferences = newDefinitionPosToReferences;
|
||||
referenceToDefinition = newReferenceToDefinition;
|
||||
@@ -757,13 +757,13 @@ public class VariableMarker implements SyntaxComponent, CaretListener, PropertyC
|
||||
return LinkType.NO_LINK;
|
||||
}
|
||||
if (referenceToExternalTypeIndex.containsKey(token.start)) {
|
||||
String externalType = externalTypes.get(referenceToExternalTypeIndex.get(token.start));
|
||||
Path externalType = externalTypes.get(referenceToExternalTypeIndex.get(token.start));
|
||||
return ((LineMarkedEditorPane) pane).getLinkHandler().getClassLinkType(externalType);
|
||||
}
|
||||
if (referenceToExternalTraitKey.containsKey(token.start)) {
|
||||
String traitKey = referenceToExternalTraitKey.get(token.start);
|
||||
Path traitKey = referenceToExternalTraitKey.get(token.start);
|
||||
//String traitName = traitKey.substring(traitKey.lastIndexOf("/") + 1);
|
||||
String className = traitKey.substring(0, traitKey.lastIndexOf("/"));
|
||||
Path className = traitKey.getParent();
|
||||
if (simpleExternalClassNameToFullClassName.containsKey(className)) {
|
||||
className = simpleExternalClassNameToFullClassName.get(className);
|
||||
}
|
||||
@@ -808,7 +808,7 @@ public class VariableMarker implements SyntaxComponent, CaretListener, PropertyC
|
||||
if (referenceToExternalTypeIndex.containsKey(token.start)
|
||||
&& com.jpexs.decompiler.flash.configuration.Configuration.warningLinkTypes.get()) {
|
||||
|
||||
String externalType = externalTypes.get(referenceToExternalTypeIndex.get(token.start));
|
||||
Path externalType = externalTypes.get(referenceToExternalTypeIndex.get(token.start));
|
||||
|
||||
LinkType lt = ((LineMarkedEditorPane) pane).getLinkHandler().getClassLinkType(externalType);
|
||||
|
||||
@@ -888,14 +888,14 @@ public class VariableMarker implements SyntaxComponent, CaretListener, PropertyC
|
||||
if (referenceToExternalTypeIndex.containsKey(token.start)) {
|
||||
goingOut = true;
|
||||
pane.setCursor(Cursor.getDefaultCursor());
|
||||
String externalType = externalTypes.get(referenceToExternalTypeIndex.get(token.start));
|
||||
Path externalType = externalTypes.get(referenceToExternalTypeIndex.get(token.start));
|
||||
((LineMarkedEditorPane) pane).getLinkHandler().handleClassLink(externalType);
|
||||
return;
|
||||
}
|
||||
if (referenceToExternalTraitKey.containsKey(token.start)) {
|
||||
String traitKey = referenceToExternalTraitKey.get(token.start);
|
||||
String traitName = traitKey.substring(traitKey.lastIndexOf("/") + 1);
|
||||
String className = traitKey.substring(0, traitKey.lastIndexOf("/"));
|
||||
Path traitKey = referenceToExternalTraitKey.get(token.start);
|
||||
String traitName = traitKey.getLast().toString();
|
||||
Path className = traitKey.getParent();
|
||||
|
||||
if (simpleExternalClassNameToFullClassName.containsKey(className)) {
|
||||
className = simpleExternalClassNameToFullClassName.get(className);
|
||||
|
||||
Reference in New Issue
Block a user