AS3 pcode search improvements

This commit is contained in:
2016-12-27 19:52:49 +01:00
parent 1f84a87b84
commit 93082c1eb3
51 changed files with 276 additions and 154 deletions
@@ -1249,10 +1249,20 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<ABC
setAbc(pack.abc);
decompiledTextArea.setScript(pack, false);
hilightScript(pack);
boolean pcode = item.isPcode();
if (pcode) {
decompiledTextArea.gotoTrait(item.getTraitId());
}
decompiledTextArea.setCaretPosition(0);
View.execInEventDispatchLater(() -> {
searchPanel.showQuickFindDialog(decompiledTextArea);
if (pcode) {
searchPanel.showQuickFindDialog(detailPanel.methodTraitPanel.methodCodePanel.getSourceTextArea());
} else {
searchPanel.showQuickFindDialog(decompiledTextArea);
}
});
}
@@ -608,7 +608,7 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL
Highlighting tc = Highlighting.searchIndex(highlightedText.getClassHighlights(), classIndex);
if (tc != null || isScriptInit) {
Highlighting th = Highlighting.searchIndex(highlightedText.getTraitHighlights(), traitId, isScriptInit || tc == null ? 0 : tc.startPos, isScriptInit || tc == null ? -1 : tc.startPos + tc.len);
Highlighting th = Highlighting.searchIndex(highlightedText.getTraitHighlights(), traitId, isScriptInit ? 0 : tc.startPos, isScriptInit ? -1 : tc.startPos + tc.len);
int pos = 0;
if (th != null) {
if (th.len > 1) {
@@ -16,6 +16,7 @@
*/
package com.jpexs.decompiler.flash.gui.abc;
import com.jpexs.decompiler.flash.abc.types.traits.TraitType;
import com.jpexs.decompiler.flash.gui.View;
import java.awt.Component;
import java.net.URL;
@@ -62,22 +63,26 @@ public class IconListRenderer extends DefaultListCellRenderer {
// Get icon to use for the list item value
TraitsListItem tli = (TraitsListItem) value;
if (tli.getType() == TraitsListItem.Type.CONST) {
if (tli.getType() == TraitType.CONST) {
label.setIcon(constIcon);
}
if (tli.getType() == TraitsListItem.Type.VAR) {
if (tli.getType() == TraitType.VAR) {
label.setIcon(variableIcon);
}
if (tli.getType() == TraitsListItem.Type.METHOD) {
label.setIcon(functionIcon);
}
if (tli.getType() == TraitsListItem.Type.INITIALIZER) {
if (tli.getType() == TraitType.METHOD) {
label.setIcon(functionIcon);
}
if (tli.getType() == TraitsListItem.Type.SCRIPT_INITIALIZER) {
if (tli.getType() == TraitType.INITIALIZER) {
label.setIcon(functionIcon);
}
if (tli.getType() == TraitType.SCRIPT_INITIALIZER) {
label.setIcon(functionIcon);
}
return label;
}
}
@@ -17,6 +17,7 @@
package com.jpexs.decompiler.flash.gui.abc;
import com.jpexs.decompiler.flash.abc.ABC;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics;
@@ -88,7 +89,7 @@ public class TraitsList extends JList<Object> implements ListSelectionListener {
}
lastSelected = getSelectedIndex();
TraitsListItem sel = (TraitsListItem) getSelectedValue();
abcPanel.decompiledTextArea.gotoTrait(sel == null ? -1 : sel.getGlobalTraitId());
abcPanel.decompiledTextArea.gotoTrait(sel == null ? GraphTextWriter.TRAIT_UNKNOWN : sel.getGlobalTraitId());
}
@Override
@@ -19,14 +19,12 @@ package com.jpexs.decompiler.flash.gui.abc;
import com.jpexs.decompiler.flash.abc.ABC;
import com.jpexs.decompiler.flash.abc.types.ConvertData;
import com.jpexs.decompiler.flash.abc.types.traits.Trait;
import com.jpexs.decompiler.flash.abc.types.traits.TraitMethodGetterSetter;
import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst;
import com.jpexs.decompiler.flash.abc.types.traits.TraitType;
import com.jpexs.decompiler.flash.configuration.Configuration;
import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode;
import com.jpexs.decompiler.flash.gui.AppStrings;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter;
import com.jpexs.decompiler.flash.helpers.NulWriter;
import com.jpexs.decompiler.flash.search.ABCSearchResult;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -37,7 +35,7 @@ import java.util.logging.Logger;
*/
public class TraitsListItem {
private final Type type;
private final TraitType type;
private final boolean isStatic;
@@ -49,13 +47,13 @@ public class TraitsListItem {
private final int scriptIndex;
public String STR_INSTANCE_INITIALIZER = AppStrings.translate("abc.traitslist.instanceinitializer");
public static String STR_INSTANCE_INITIALIZER = ABCSearchResult.STR_INSTANCE_INITIALIZER;
public String STR_CLASS_INITIALIZER = AppStrings.translate("abc.traitslist.classinitializer");
public static String STR_CLASS_INITIALIZER = ABCSearchResult.STR_CLASS_INITIALIZER;
public String STR_SCRIPT_INITIALIZER = AppStrings.translate("abc.traitslist.scriptinitializer");
public static String STR_SCRIPT_INITIALIZER = ABCSearchResult.STR_SCRIPT_INITIALIZER;
public TraitsListItem(Type type, int index, boolean isStatic, ABC abc, int classIndex, int scriptIndex) {
public TraitsListItem(TraitType type, int index, boolean isStatic, ABC abc, int classIndex, int scriptIndex) {
this.type = type;
this.index = index;
this.isStatic = isStatic;
@@ -65,33 +63,19 @@ public class TraitsListItem {
}
public int getGlobalTraitId() {
if (type == Type.INITIALIZER) {
if (!isStatic) {
return GraphTextWriter.TRAIT_INSTANCE_INITIALIZER;
} else {
return GraphTextWriter.TRAIT_CLASS_INITIALIZER;
}
}
if (type == Type.SCRIPT_INITIALIZER) {
return GraphTextWriter.TRAIT_SCRIPT_INITIALIZER;
}
if (isStatic) {
return index;
} else {
return abc.class_info.get(classIndex).static_traits.traits.size() + index;
}
return abc.getGlobalTraitId(type, isStatic, classIndex, index);
}
public String toStringName() {
if (type == Type.INITIALIZER) {
if (type == TraitType.INITIALIZER) {
if (!isStatic) {
return "__" + STR_INSTANCE_INITIALIZER;
} else {
return "__" + STR_CLASS_INITIALIZER;
}
}
if (type == Type.SCRIPT_INITIALIZER) {
if (type == TraitType.SCRIPT_INITIALIZER) {
return "__" + STR_SCRIPT_INITIALIZER;
}
if (isStatic) {
@@ -105,9 +89,9 @@ public class TraitsListItem {
public String toString() {
String s = "";
try {
if (type == Type.SCRIPT_INITIALIZER) {
if (type == TraitType.SCRIPT_INITIALIZER) {
s = STR_SCRIPT_INITIALIZER;
} else if (type == Type.INITIALIZER) {
} else if (type == TraitType.INITIALIZER) {
if (!isStatic) {
s = STR_INSTANCE_INITIALIZER;
} else {
@@ -135,7 +119,7 @@ public class TraitsListItem {
return s;
}
public Type getType() {
public TraitType getType() {
return type;
}
@@ -143,25 +127,11 @@ public class TraitsListItem {
return isStatic;
}
public enum Type {
METHOD,
VAR,
CONST,
INITIALIZER,
SCRIPT_INITIALIZER;
public int getClassIndex() {
return classIndex;
}
public static Type getTypeForTrait(Trait t) {
if (t instanceof TraitMethodGetterSetter) {
return METHOD;
}
if (t instanceof TraitSlotConst) {
if (((TraitSlotConst) t).isConst()) {
return CONST;
} else {
return VAR;
}
}
return null;
}
public int getIndex() {
return index;
}
}
@@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.gui.abc;
import com.jpexs.decompiler.flash.abc.ABC;
import com.jpexs.decompiler.flash.abc.types.traits.Trait;
import com.jpexs.decompiler.flash.abc.types.traits.TraitType;
import com.jpexs.decompiler.flash.configuration.Configuration;
import java.util.ArrayList;
import java.util.Collections;
@@ -58,24 +59,26 @@ public final class TraitsListModel implements ListModel<Object> {
if (classIndex > -1) {
List<Trait> traits = abc.class_info.get(classIndex).static_traits.traits;
for (int t = 0; t < traits.size(); t++) {
if (traits.get(t).isVisible(true, abc)) {
items.add(new TraitsListItem(TraitsListItem.Type.getTypeForTrait(traits.get(t)), t, true, abc, classIndex, scriptIndex));
Trait trait = traits.get(t);
if (trait.isVisible(true, abc)) {
items.add(new TraitsListItem(TraitType.getTypeForTrait(trait), t, true, abc, classIndex, scriptIndex));
}
}
traits = abc.instance_info.get(classIndex).instance_traits.traits;
for (int t = 0; t < traits.size(); t++) {
if (traits.get(t).isVisible(false, abc)) {
items.add(new TraitsListItem(TraitsListItem.Type.getTypeForTrait(traits.get(t)), t, false, abc, classIndex, scriptIndex));
Trait trait = traits.get(t);
if (trait.isVisible(false, abc)) {
items.add(new TraitsListItem(TraitType.getTypeForTrait(trait), t, false, abc, classIndex, scriptIndex));
}
}
items.add(new TraitsListItem(TraitsListItem.Type.INITIALIZER, 0, false, abc, classIndex, scriptIndex));
items.add(new TraitsListItem(TraitsListItem.Type.INITIALIZER, 0, true, abc, classIndex, scriptIndex));
items.add(new TraitsListItem(TraitType.INITIALIZER, 0, false, abc, classIndex, scriptIndex));
items.add(new TraitsListItem(TraitType.INITIALIZER, 0, true, abc, classIndex, scriptIndex));
}
if (Configuration.enableScriptInitializerDisplay.get()) {
items.add(new TraitsListItem(TraitsListItem.Type.SCRIPT_INITIALIZER, 0, true, abc, classIndex, scriptIndex));
items.add(new TraitsListItem(TraitType.SCRIPT_INITIALIZER, 0, true, abc, classIndex, scriptIndex));
}
}
@@ -200,9 +200,6 @@ info.selecttrait = Select class and click a trait in Actionscript source to edit
button.viewgraph = View Graph
button.viewhex = View Hex
abc.traitslist.instanceinitializer = instance initializer
abc.traitslist.classinitializer = class initializer
action.edit.experimental = (Experimental)
message.action.saved = Code successfully saved
@@ -631,7 +628,6 @@ error.image.alpha.invalid = Invalid alpha channel data.
#after version 6.0.2
contextmenu.saveUncompressedToFile = Save to Uncompressed File
abc.traitslist.scriptinitializer = script initializer
menu.settings.autoOpenLoadedSWFs = Open loaded SWFs while playing
#after version 6.1.1
@@ -200,9 +200,6 @@ info.selecttrait = Selecciona una classe i fes clic sobre un tret al codi font d
button.viewgraph = Visualitza Gr\u00e0fica
button.viewhex = Visualitza Hex
abc.traitslist.instanceinitializer = inicialitzador d'inst\u00e0ncia
abc.traitslist.classinitializer = inicialitzador de classe
action.edit.experimental = (Experimental)
message.action.saved = El codi s'ha desat correctament
@@ -631,7 +628,6 @@ error.image.alpha.invalid = Dades inv\u00e0lides del canal alfa.
#after version 6.0.2
contextmenu.saveUncompressedToFile = Desa a un Fitxer No Comprimit
abc.traitslist.scriptinitializer = iniciador del script
menu.settings.autoOpenLoadedSWFs = Obre els SWFs carregats mentre es reprodueixen
#after version 6.1.1
@@ -198,9 +198,6 @@ info.selecttrait = Vyberte t\u0159\u00eddu a klikn\u011bte na vlastnost v zdrojo
button.viewgraph = Zobrazit Graf
button.viewhex = Zobrazit Hex
abc.traitslist.instanceinitializer = inicializ\u00e1tor instance
abc.traitslist.classinitializer = inicializ\u00e1tor t\u0159\u00eddy
action.edit.experimental = (Experiment\u00e1ln\u00ed)
message.action.saved = K\u00f3d \u00fasp\u011b\u0161n\u011b ulo\u017een
@@ -626,7 +623,6 @@ error.image.alpha.invalid = Neplatn\u00e1 data alpha kan\u00e1lu.
#after version 6.0.2
contextmenu.saveUncompressedToFile = Ulo\u017eit nekomprimovan\u011b
abc.traitslist.scriptinitializer = inicializ\u00e1tor skriptu
menu.settings.autoOpenLoadedSWFs = Otev\u00edrat na\u010d\u00edtan\u00e1 SWF b\u011bhem p\u0159ehr\u00e1v\u00e1n\u00ed
#after version 6.1.1
@@ -198,9 +198,6 @@ info.selecttrait = W\u00e4hlen Sie eine Klasse aus und klicken Sie einen Trait i
button.viewgraph = Flowchart Graph
button.viewhex = Hexdata dump
abc.traitslist.instanceinitializer = Instanzen-Initialisierer
abc.traitslist.classinitializer = Klassen-Initialisierer
action.edit.experimental = (Experimentell)
message.action.saved = Code erfolgreich gespeichert
@@ -198,9 +198,6 @@ info.selecttrait = Seleccione la clase y clickee un atributo en el c\u00f3digo A
button.viewgraph = Ver grafo
button.viewhex = Ver en hexa
abc.traitslist.instanceinitializer = inicializador de instancia
abc.traitslist.classinitializer = inicializador de clase
action.edit.experimental = (Experimental)
message.action.saved = C\u00f3digo guardado exitosamente
@@ -629,7 +626,6 @@ error.image.alpha.invalid = Datos de canal alpha no v\u00e1lidos
#after version 6.0.2
contextmenu.saveUncompressedToFile = Guardar en archivo no comprimido
abc.traitslist.scriptinitializer = inicializador de script
menu.settings.autoOpenLoadedSWFs = Abrir los SWFs cargados mientras se reproducen
#after version 6.1.1
@@ -198,9 +198,6 @@ info.selecttrait = S\u00e9lectionnez la classe et cliquez sur une caract\u00e9ri
button.viewgraph = Afficher le Graphique
button.viewhex = Afficher le code Hexad\u00e9cimal
abc.traitslist.instanceinitializer = instance d'initialisation
abc.traitslist.classinitializer = classe d'initialisation
action.edit.experimental = (Exp\u00e9rimental)
message.action.saved = Le code a \u00e9t\u00e9 enregistr\u00e9 avec succ\u00e8s
@@ -629,7 +626,6 @@ error.image.alpha.invalid = Les donn\u00e9es du canal alpha est invalide.
#after version 6.0.2
contextmenu.saveUncompressedToFile = Enregistrer dans un fichier d\u00e9compress\u00e9
abc.traitslist.scriptinitializer = Initialisateur de script
menu.settings.autoOpenLoadedSWFs = Ouvrir les SWF charg\u00e9s lors de la lecture
#after version 6.1.1
@@ -198,9 +198,6 @@ info.selecttrait = V\u00e1lasszon ki egy oszt\u00e1lyt \u00e9s kattintson egy je
button.viewgraph = Gr\u00e1f mutat\u00e1sa
button.viewhex = Hexa mutat\u00e1sa
abc.traitslist.instanceinitializer = p\u00e9ld\u00e1ny inicializ\u00e1l\u00f3
abc.traitslist.classinitializer = oszt\u00e1ly inicializ\u00e1l\u00f3
action.edit.experimental = (K\u00eds\u00e9rleti)
message.action.saved = K\u00f3d sikeresen lementve
@@ -628,7 +625,6 @@ error.image.alpha.invalid = \u00c9rv\u00e9nytelen alfa csatorna adat.
#after version 6.0.2
contextmenu.saveUncompressedToFile = Ment\u00e9s t\u00f6m\u00f6r\u00edtett f\u00e1jlba
abc.traitslist.scriptinitializer = szkript inicializ\u00e1l\u00f3
menu.settings.autoOpenLoadedSWFs = SWF-ek megnyit\u00e1sa lej\u00e1tsz\u00e1s k\u00f6zben
#after version 6.1.1
@@ -199,9 +199,6 @@ info.selecttrait = Selezionare una classe e fare clic su un trait nel sorgente A
button.viewgraph = Visualizza grafo
button.viewhex = Visualizza listato
abc.traitslist.instanceinitializer = instance initializer
abc.traitslist.classinitializer = class initializer
action.edit.experimental = (Sperimentale)
message.action.saved = Codice salvato con successo
@@ -629,7 +626,6 @@ error.image.alpha.invalid = Valori canale alfa non validi.
#after version 6.0.2
contextmenu.saveUncompressedToFile = Salva su file senza compressione
abc.traitslist.scriptinitializer = Inizializzatore script
menu.settings.autoOpenLoadedSWFs = Apri SWF caricati durante la riproduzione
#after version 6.1.1
@@ -198,9 +198,6 @@ info.selecttrait = Selecteer de klas en klik op een karaktertrek in Actionscript
button.viewgraph = Graaf bekijken
button.viewhex = Hex bekijken
abc.traitslist.instanceinitializer = instantie initialiseerder
abc.traitslist.classinitializer = klasse initialiseerder
action.edit.experimental = (Experimenteel)
message.action.saved = Code is succesvol opgeslagen
@@ -198,9 +198,6 @@ info.selecttrait = Wybierz klas\u0119 i kliknij cech\u0119 w \u017ar\u00f3dle ko
button.viewgraph = Poka\u017c Wykres
button.viewhex = Poka\u017c Hex
abc.traitslist.instanceinitializer = inicjator instancji
abc.traitslist.classinitializer = inicjator klasy
action.edit.experimental = (Eksperymentalne)
message.action.saved = Kod pomy\u015blnie zapisano
@@ -198,9 +198,6 @@ info.selecttrait = Selecione uma classe e click em um atributo no ActionScript p
button.viewgraph = Ver Grafico
button.viewhex = Ver Hex
abc.traitslist.instanceinitializer = inicializador de instancias
abc.traitslist.classinitializer = inicializador de classes
action.edit.experimental = (Experimental)
message.action.saved = C\u00f3digo salvo com sucesso
@@ -198,9 +198,6 @@ info.selecttrait = Selecione uma classe e click em um atributo no ActionScript p
button.viewgraph = Ver Grafico
button.viewhex = Ver Hex
abc.traitslist.instanceinitializer = inicializador de instancias
abc.traitslist.classinitializer = inicializador de classes
action.edit.experimental = (Experimental)
message.action.saved = C\u00f3digo salvo com sucesso
@@ -198,9 +198,6 @@ info.selecttrait = \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043b
button.viewgraph = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0413\u0440\u0430\u0444\u0430
button.viewhex = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 Hex
abc.traitslist.instanceinitializer = \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430
abc.traitslist.classinitializer = \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u0430
action.edit.experimental = (\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e)
message.action.saved = \u041a\u043e\u0434 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d
@@ -198,9 +198,6 @@ info.selecttrait = V\u00e4lj klass och klicka p\u00e5 en egenskap i Actionskript
button.viewgraph = Visa Diagram
button.viewhex = Visa Hex
abc.traitslist.instanceinitializer = instans initierare
abc.traitslist.classinitializer = klass initierare
action.edit.experimental = (experimentellt)
message.action.saved = Koden har sparats
@@ -198,9 +198,6 @@ info.selecttrait = \u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u043a\u043b
button.viewgraph = \u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434 \u0413\u0440\u0430\u0444\u0430
button.viewhex = \u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434 Hex
abc.traitslist.instanceinitializer = \u0456\u043d\u0456\u0446\u0456\u0430\u043b\u0456\u0437\u0430\u0442\u043e\u0440 \u043e\u0431'\u0454\u043a\u0442\u0430
abc.traitslist.classinitializer = \u0456\u043d\u0456\u0446\u0456\u0430\u043b\u0456\u0437\u0430\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0443
action.edit.experimental = (\u0415\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e)
message.action.saved = \u041a\u043e\u0434 \u0443\u0441\u043f\u0456\u0448\u043d\u043e \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0439
@@ -198,9 +198,6 @@ info.selecttrait = \u8bf7\u9009\u62e9\u7c7b\uff0c\u7136\u540e\u70b9\u51fb\u8fdb\
button.viewgraph = \u6d4f\u89c8\u56fe\u5f62
button.viewhex = \u6d4f\u89c8\u5341\u516d\u8fdb\u5236
abc.traitslist.instanceinitializer = \u521d\u59cb\u5316\u5b9e\u4f8b
abc.traitslist.classinitializer = \u521d\u59cb\u5316\u7c7b
action.edit.experimental = (\u5b9e\u9a8c\u7684)
message.action.saved = \u4fdd\u5b58\u4ee3\u7801\u6210\u529f
@@ -629,7 +626,6 @@ error.image.alpha.invalid = \u65e0\u6548\u7684 Alpha \u901a\u9053\u6570\u636e\u3
#after version 6.0.2
contextmenu.saveUncompressedToFile = \u4fdd\u5b58\u5230\u672a\u538b\u7f29\u6587\u4ef6
abc.traitslist.scriptinitializer = \u521d\u59cb\u5316\u811a\u672c
menu.settings.autoOpenLoadedSWFs = \u6253\u5f00\u5df2\u8f7d\u5165 SWF \u6587\u4ef6\u65f6\u64ad\u653e
#after version 6.1.1