From 0d9c6486410f90fb29459f61abb8478b7771663a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 6 Apr 2015 19:21:14 +0200 Subject: [PATCH] Issue #835 Static initializer item in traitlist click fixed (when 1 character in length) Reordered traits in class - static first, variables/const first --- .../flash/abc/types/traits/TraitClass.java | 23 ++++++++++++++----- .../flash/abc/types/traits/Traits.java | 18 ++++++++++++--- .../flash/gui/abc/DecompiledEditorPane.java | 14 ++++++----- 3 files changed, 40 insertions(+), 15 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java index 2e2014557..a01f3db57 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java @@ -449,6 +449,11 @@ public class TraitClass extends Trait implements TraitWithSlot { abc.instance_info.get(class_info).getClassHeaderStr(writer, abc, fullyQualifiedNames, false); writer.startBlock(); + //static variables & constants + abc.class_info.get(class_info).static_traits.toString(new Class[]{TraitSlotConst.class},this, path +/*packageName +*/ "/" + abc.instance_info.get(class_info).getName(abc.constants).getName(abc.constants, fullyQualifiedNames, false), abc, true, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel); + + + //static initializer int bodyIndex = abc.findBodyIndex(abc.class_info.get(class_info).cinit_index); if (bodyIndex != -1) { if (!classInitializerIsEmpty) { @@ -465,7 +470,11 @@ public class TraitClass extends Trait implements TraitWithSlot { //"/*classInitializer*/"; } - //constructor + //instance variables + abc.instance_info.get(class_info).instance_traits.toString(new Class[]{TraitSlotConst.class},this, path +/*packageName +*/ "/" + abc.instance_info.get(class_info).getName(abc.constants).getName(abc.constants, fullyQualifiedNames, false), abc, false, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel); + + + //instance initializer - constructor if (!abc.instance_info.get(class_info).isInterface()) { String modifier = ""; Multiname m = abc.constants.getMultiname(abc.instance_info.get(class_info).name_index); @@ -503,12 +512,14 @@ public class TraitClass extends Trait implements TraitWithSlot { writer.endMethod(); writer.endTrait(); } + + //static methods + abc.class_info.get(class_info).static_traits.toString(new Class[]{TraitClass.class,TraitFunction.class,TraitMethodGetterSetter.class},this, path +/*packageName +*/ "/" + abc.instance_info.get(class_info).getName(abc.constants).getName(abc.constants, fullyQualifiedNames, false), abc, true, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel); + + //instance methods + abc.instance_info.get(class_info).instance_traits.toString(new Class[]{TraitClass.class,TraitFunction.class,TraitMethodGetterSetter.class},this, path +/*packageName +*/ "/" + abc.instance_info.get(class_info).getName(abc.constants).getName(abc.constants, fullyQualifiedNames, false), abc, false, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel); - //static variables,constants & methods - abc.class_info.get(class_info).static_traits.toString(this, path +/*packageName +*/ "/" + abc.instance_info.get(class_info).getName(abc.constants).getName(abc.constants, fullyQualifiedNames, false), abc, true, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel); - - abc.instance_info.get(class_info).instance_traits.toString(this, path +/*packageName +*/ "/" + abc.instance_info.get(class_info).getName(abc.constants).getName(abc.constants, fullyQualifiedNames, false), abc, false, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel); - + writer.endBlock(); // class writer.endClass(); writer.newLine(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java index e3034968c..635cd9899 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java @@ -141,10 +141,22 @@ public class Traits implements Serializable { } } - public GraphTextWriter toString(Trait parent, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, boolean makePackages, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel) throws InterruptedException { - for (int t = 0; t < traits.size(); t++) { - writer.newLine(); + public GraphTextWriter toString(Class[] traitTypes,Trait parent, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, boolean makePackages, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel) throws InterruptedException { + for (int t = 0; t < traits.size(); t++) { Trait trait = traits.get(t); + if(traitTypes!=null){ + boolean found = false; + for(Class c:traitTypes){ + if(c.isInstance(trait)){ + found = true; + break; + } + } + if(!found){ + continue; + } + } + writer.newLine(); int h = t; if (classIndex != -1) { if (!isStatic) { diff --git a/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java b/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java index 74b51f18a..9790969f5 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java @@ -212,7 +212,7 @@ public class DecompiledEditorPane extends LineMarkedEditorPane implements CaretL abcPanel.detailPanel.showCard(DetailPanel.METHOD_TRAIT_CARD, trait); MethodCodePanel methodCodePanel = abcPanel.detailPanel.methodTraitPanel.methodCodePanel; if (reset || (methodCodePanel.getBodyIndex() != bi)) { - methodCodePanel.setBodyIndex(bi, abc, name, trait,script.scriptIndex); + methodCodePanel.setBodyIndex(bi, abc, name, trait, script.scriptIndex); abcPanel.detailPanel.setEditMode(false); this.isStatic = isStatic; } @@ -608,12 +608,14 @@ public class DecompiledEditorPane extends LineMarkedEditorPane implements CaretL Highlighting th = Highlighting.searchIndex(traitHighlights, traitId, tc.startPos, tc.startPos + tc.len); int pos; if (th != null) { - ignoreCarret = true; - int startPos = th.startPos + th.len - 1; - if (startPos <= getDocument().getLength()) { - setCaretPosition(startPos); + if (th.len > 1) { + ignoreCarret = true; + int startPos = th.startPos + th.len - 1; + if (startPos <= getDocument().getLength()) { + setCaretPosition(startPos); + } + ignoreCarret = false; } - ignoreCarret = false; pos = th.startPos; } else { pos = tc.startPos;