mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-06-04 11:25:11 +00:00
Fixed: #2316 AS3 direct editation - private classes
Refactored imports.
This commit is contained in:
@@ -320,6 +320,8 @@ public class ScriptPack extends AS3ClassTreeItem {
|
||||
writer.newLine();
|
||||
}
|
||||
|
||||
DottedChain pkg = getPathPackage();
|
||||
|
||||
for (int t : traitIndices) {
|
||||
|
||||
Trait trait = traits.get(t);
|
||||
@@ -337,7 +339,7 @@ public class ScriptPack extends AS3ClassTreeItem {
|
||||
if ((nskind == Namespace.KIND_PACKAGE) || (nskind == Namespace.KIND_PACKAGE_INTERNAL)) {
|
||||
trait.toStringPackaged(abcIndex, null, convertData, "", abc, false, exportMode, scriptIndex, -1, writer, new ArrayList<>(), parallel, false);
|
||||
} else {
|
||||
trait.toString(abcIndex, null, convertData, "", abc, false, exportMode, scriptIndex, -1, writer, new ArrayList<>(), parallel, false);
|
||||
trait.toString(abcIndex, pkg, null, convertData, "", abc, false, exportMode, scriptIndex, -1, writer, new ArrayList<>(), parallel, false);
|
||||
}
|
||||
if (!(trait instanceof TraitClass)) {
|
||||
writer.endTrait();
|
||||
@@ -387,7 +389,7 @@ public class ScriptPack extends AS3ClassTreeItem {
|
||||
if ((nskind == Namespace.KIND_PACKAGE) || (nskind == Namespace.KIND_PACKAGE_INTERNAL)) {
|
||||
trait.toStringPackaged(abcIndex, null, convertData, "", abc, false, exportMode, scriptIndex, -1, writer, new ArrayList<>(), parallel, false);
|
||||
} else {
|
||||
trait.toString(abcIndex, null, convertData, "", abc, false, exportMode, scriptIndex, -1, writer, new ArrayList<>(), parallel, false);
|
||||
trait.toString(abcIndex, pkg, null, convertData, "", abc, false, exportMode, scriptIndex, -1, writer, new ArrayList<>(), parallel, false);
|
||||
}
|
||||
if (!(trait instanceof TraitClass)) {
|
||||
writer.endTrait();
|
||||
|
||||
@@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.abc.types.ConvertData;
|
||||
import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst;
|
||||
import com.jpexs.decompiler.flash.abc.types.traits.TraitType;
|
||||
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
|
||||
import com.jpexs.decompiler.graph.DottedChain;
|
||||
import com.jpexs.decompiler.graph.GraphSourceItem;
|
||||
import com.jpexs.decompiler.graph.GraphTargetItem;
|
||||
import com.jpexs.decompiler.graph.model.LocalData;
|
||||
@@ -93,7 +94,7 @@ public class TraitSlotConstAVM2Item extends AVM2Item {
|
||||
boolean insideInterface = classIndex > -1 ? localData.abc.instance_info.get(classIndex).isInterface() : false;
|
||||
trait.toString(
|
||||
localData.abcIndex,
|
||||
|
||||
DottedChain.EMPTY /*??*/,
|
||||
null,
|
||||
cd,
|
||||
"trait " + trait.getName(localData.abc),
|
||||
|
||||
@@ -218,9 +218,10 @@ public class AVM2SourceGenerator implements SourceGenerator {
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
ABC abc = abcIndex.getSelectedAbc();
|
||||
AVM2ConstantPool constants = abc.constants;
|
||||
AbcIndexing.ClassIndex ci = abcIndex.findClass(new TypeItem(dname), null, null/*FIXME?*/);
|
||||
AbcIndexing.ClassIndex ci = abcIndex.findClass(new TypeItem(dname), abc, localData != null ? localData.scriptIndex : null);
|
||||
if (ci != null) {
|
||||
Multiname m = ci.abc.instance_info.get(ci.index).getName(ci.abc.constants);
|
||||
if (m != null) {
|
||||
@@ -234,16 +235,16 @@ public class AVM2SourceGenerator implements SourceGenerator {
|
||||
}
|
||||
}
|
||||
|
||||
String pkgRaw = pkg.toRawString();
|
||||
/*String pkgRaw = pkg.toRawString();
|
||||
for (int i = 1; i < constants.getMultinameCount(); i++) {
|
||||
Multiname mname = constants.getMultiname(i);
|
||||
if (mname != null && name.equals(mname.getName(constants, null, true, true /*FIXME!!*/))) {
|
||||
if (mname != null && name.equals(mname.getName(constants, null, true, true FIXME!!))) {
|
||||
if (mname.getNamespace(constants) != null && Objects.equals(pkgRaw, mname.getNamespace(constants).getRawName(constants))) {
|
||||
name_index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
if (name_index == 0) {
|
||||
if (pkg.isEmpty() && localData.currentScript != null /*FIXME!*/) {
|
||||
for (Trait t : localData.currentScript.traits.traits) {
|
||||
@@ -688,7 +689,7 @@ public class AVM2SourceGenerator implements SourceGenerator {
|
||||
parent = ((UnresolvedAVM2Item) parent).resolved;
|
||||
}
|
||||
if (parent instanceof TypeItem) {
|
||||
ClassIndex ci = abcIndex.findClass(parent, null, null/*FIXME?*/);
|
||||
ClassIndex ci = abcIndex.findClass(parent, abcIndex.getSelectedAbc(), localData != null ? localData.scriptIndex : null);
|
||||
if (ci != null) {
|
||||
int mi = ci.abc.class_info.get(ci.index).cinit_index;
|
||||
MethodBody pcinit = ci.abc.findBody(mi);
|
||||
@@ -1464,7 +1465,7 @@ public class AVM2SourceGenerator implements SourceGenerator {
|
||||
*/
|
||||
int parentConstMinAC = 0;
|
||||
|
||||
AbcIndexing.ClassIndex ci = abcIndex.findClass(new TypeItem(superType), null, null/*FIXME?*/);
|
||||
AbcIndexing.ClassIndex ci = abcIndex.findClass(new TypeItem(superType), abcIndex.getSelectedAbc(), localData.scriptIndex);
|
||||
|
||||
if (ci != null) {
|
||||
MethodInfo pmi = ci.abc.method_info.get(ci.abc.instance_info.get(ci.index).iinit_index);
|
||||
@@ -2217,7 +2218,7 @@ public class AVM2SourceGenerator implements SourceGenerator {
|
||||
sinitcode.add(ins(AVM2Instructions.PushNull));
|
||||
} else {
|
||||
|
||||
AbcIndexing.ClassIndex ci = abcIndex.findClass(AbcIndexing.multinameToType(abc.instance_info.get(tc.class_info).name_index, constants), null, null/*FIXME?*/);
|
||||
AbcIndexing.ClassIndex ci = abcIndex.findClass(AbcIndexing.multinameToType(abc.instance_info.get(tc.class_info).name_index, constants), abc, scriptIndex);
|
||||
while (ci != null && ci.parent != null) {
|
||||
ci = ci.parent;
|
||||
Multiname origM = ci.abc.constants.getMultiname(ci.abc.instance_info.get(ci.index).name_index);
|
||||
@@ -2274,11 +2275,11 @@ public class AVM2SourceGenerator implements SourceGenerator {
|
||||
* @param names Names
|
||||
* @param namespaces Namespaces
|
||||
*/
|
||||
public static void parentNamesAddNames(AbcIndexing abc, int name_index, List<Integer> indices, List<String> names, List<String> namespaces) {
|
||||
public static void parentNamesAddNames(AbcIndexing abc, int scriptIndex, int name_index, List<Integer> indices, List<String> names, List<String> namespaces) {
|
||||
List<Integer> cindices = new ArrayList<>();
|
||||
|
||||
List<ABC> outABCs = new ArrayList<>();
|
||||
parentNames(abc, name_index, cindices, names, namespaces, outABCs);
|
||||
parentNames(abc, scriptIndex, name_index, cindices, names, namespaces, outABCs);
|
||||
for (int i = 0; i < cindices.size(); i++) {
|
||||
ABC a = outABCs.get(i);
|
||||
int m = cindices.get(i);
|
||||
@@ -2411,8 +2412,8 @@ public class AVM2SourceGenerator implements SourceGenerator {
|
||||
* @param namespaces Namespaces
|
||||
* @param outABCs Out ABCs
|
||||
*/
|
||||
public static void parentNames(AbcIndexing abc, int name_index, List<Integer> indices, List<String> names, List<String> namespaces, List<ABC> outABCs) {
|
||||
AbcIndexing.ClassIndex ci = abc.findClass(new TypeItem(abc.getSelectedAbc().constants.getMultiname(name_index).getNameWithNamespace(abc.getSelectedAbc().constants, true /*FIXME!!*/)), null, null/*FIXME?*/);
|
||||
public static void parentNames(AbcIndexing abc, int scriptIndex, int name_index, List<Integer> indices, List<String> names, List<String> namespaces, List<ABC> outABCs) {
|
||||
AbcIndexing.ClassIndex ci = abc.findClass(new TypeItem(abc.getSelectedAbc().constants.getMultiname(name_index).getNameWithNamespace(abc.getSelectedAbc().constants, true /*FIXME!!*/)), abc.getSelectedAbc(), scriptIndex);
|
||||
while (ci != null) {
|
||||
int ni = ci.abc.instance_info.get(ci.index).name_index;
|
||||
indices.add(ni);
|
||||
|
||||
@@ -1186,7 +1186,7 @@ public class ActionScript3Parser {
|
||||
List<String> names = new ArrayList<>();
|
||||
List<String> namespaces = new ArrayList<>();
|
||||
//FIXME for Private classes in script (?)
|
||||
AVM2SourceGenerator.parentNamesAddNames(abcIndex, AVM2SourceGenerator.resolveType(new SourceGeneratorLocalData(new HashMap<>(), 0, false, 0), ((TypeItem) ((UnresolvedAVM2Item) extendsTypeStr)
|
||||
AVM2SourceGenerator.parentNamesAddNames(abcIndex, scriptIndex, AVM2SourceGenerator.resolveType(new SourceGeneratorLocalData(new HashMap<>(), 0, false, 0), ((TypeItem) ((UnresolvedAVM2Item) extendsTypeStr)
|
||||
.resolve(null, pkgName.addWithSuffix(subNameStr).toRawString(), null, new ArrayList<>(), new ArrayList<>(), abcIndex, new ArrayList<>(), new ArrayList<>())), abcIndex), indices, names, namespaces);
|
||||
for (int i = 0; i < names.size(); i++) {
|
||||
if (namespaces.get(i) == null || namespaces.get(i).isEmpty()) {
|
||||
|
||||
@@ -715,7 +715,20 @@ public class Multiname {
|
||||
return isAttribute() ? "@*" : "*";
|
||||
} else {
|
||||
String name = constants.getString(name_index);
|
||||
if (fullyQualifiedNames != null && !fullyQualifiedNames.isEmpty() && fullyQualifiedNames.contains(DottedChain.parseWithSuffix(name))) {
|
||||
Namespace ns = getNamespace(constants);
|
||||
boolean isPublic = false;
|
||||
if (ns == null) {
|
||||
NamespaceSet nss = getNamespaceSet(constants);
|
||||
if (nss != null) {
|
||||
if (nss.namespaces.length > 0) {
|
||||
ns = constants.getNamespace(nss.namespaces[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ns != null && (ns.kind == Namespace.KIND_PACKAGE || ns.kind == Namespace.KIND_PACKAGE_INTERNAL)) {
|
||||
isPublic = true;
|
||||
}
|
||||
if (isPublic && fullyQualifiedNames != null && !fullyQualifiedNames.isEmpty() && fullyQualifiedNames.contains(DottedChain.parseWithSuffix(name))) {
|
||||
DottedChain dc = getNameWithNamespace(constants, withSuffix);
|
||||
return dontDeobfuscate ? dc.toRawString() : dc.toPrintableString(true);
|
||||
}
|
||||
|
||||
@@ -52,6 +52,7 @@ import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
@@ -390,7 +391,10 @@ public abstract class Trait implements Cloneable, Serializable {
|
||||
traitNamesInThisScript.add(st.getName(abc).getName(abc.constants, new ArrayList<>(), true, true));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Set<String> traitNamesInThisScriptSet = new LinkedHashSet<>(traitNamesInThisScript);
|
||||
traitNamesInThisScript = new ArrayList<>(traitNamesInThisScriptSet);
|
||||
|
||||
//imports
|
||||
List<Dependency> dependencies = new ArrayList<>();
|
||||
String customNs = null;
|
||||
@@ -416,24 +420,21 @@ public abstract class Trait implements Cloneable, Serializable {
|
||||
}
|
||||
}
|
||||
|
||||
List<String> importnames = new ArrayList<>();
|
||||
importnames.addAll(namesInThisPackage);
|
||||
importnames.addAll(traitNamesInThisScript);
|
||||
importnames.addAll(Arrays.asList(builtInClasses));
|
||||
|
||||
|
||||
List<String> importedNames = new ArrayList<>();
|
||||
|
||||
importedNames.addAll(Arrays.asList(builtInClasses));
|
||||
importedNames.addAll(namesInThisPackage);
|
||||
importedNames.addAll(traitNamesInThisScript);
|
||||
|
||||
|
||||
|
||||
for (DottedChain imp : imports) {
|
||||
if (imp.getLast().equals("*")) {
|
||||
if (imp.getWithoutLast().equals(ignorePackage)) {
|
||||
continue;
|
||||
}
|
||||
Set<String> objectsInPkg = abcIndex.getPackageObjects(imp.getWithoutLast());
|
||||
for (String objectName : objectsInPkg) {
|
||||
if (importnames.contains(objectName)) {
|
||||
fullyQualifiedNames.add(DottedChain.parseWithSuffix(objectName));
|
||||
} else {
|
||||
importnames.add(objectName);
|
||||
}
|
||||
}
|
||||
importedNames.addAll(abcIndex.getPackageObjects(imp.getWithoutLast()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -450,24 +451,30 @@ public abstract class Trait implements Cloneable, Serializable {
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < imports.size(); i++) {
|
||||
DottedChain ipath = imports.get(i);
|
||||
DottedChain pkg = ipath.getWithoutLast();
|
||||
|
||||
if (pkg.equals(ignorePackage)) {
|
||||
imports.remove(i);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < imports.size(); i++) {
|
||||
DottedChain ipath = imports.get(i);
|
||||
String name = ipath.getLast();
|
||||
if (ipath.getWithoutLast().equals(ignorePackage)) { //do not check classes from same package, they are imported automatically
|
||||
if (traitNamesInThisScript.contains(name)) {
|
||||
fullyQualifiedNames.add(DottedChain.parseWithSuffix(name));
|
||||
}
|
||||
|
||||
imports.remove(i);
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (importnames.contains(name)) {
|
||||
importedNames.add(name);
|
||||
}
|
||||
|
||||
List<String> uniqueImportedNames = new ArrayList<>();
|
||||
for (int i = 0; i < importedNames.size(); i++) {
|
||||
String name = importedNames.get(i);
|
||||
if (uniqueImportedNames.contains(name)) {
|
||||
fullyQualifiedNames.add(DottedChain.parseWithSuffix(name));
|
||||
} else {
|
||||
importnames.add(name);
|
||||
uniqueImportedNames.add(name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -707,6 +714,7 @@ public abstract class Trait implements Cloneable, Serializable {
|
||||
* To string.
|
||||
*
|
||||
* @param abcIndex ABC indexing
|
||||
* @param packageName Package name
|
||||
* @param parent Parent trait
|
||||
* @param convertData Convert data
|
||||
* @param path Path
|
||||
@@ -722,7 +730,7 @@ public abstract class Trait implements Cloneable, Serializable {
|
||||
* @return Writer
|
||||
* @throws InterruptedException On interrupt
|
||||
*/
|
||||
public GraphTextWriter toString(AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException {
|
||||
public GraphTextWriter toString(AbcIndexing abcIndex, DottedChain packageName, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException {
|
||||
writer.appendNoHilight(abc.constants.getMultiname(name_index).toString(abc.constants, fullyQualifiedNames) + " kind=" + kindType + " metadata=" + Helper.intArrToString(metadata));
|
||||
return writer;
|
||||
}
|
||||
@@ -868,7 +876,7 @@ public abstract class Trait implements Cloneable, Serializable {
|
||||
writer.appendNoHilight(" " + nsname); //assume not null name
|
||||
}
|
||||
writer.startBlock();
|
||||
toString(abcIndex, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface);
|
||||
toString(abcIndex, name.getNameWithNamespace(abc.constants, true).getWithoutLast(), parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface);
|
||||
writer.endBlock();
|
||||
writer.newLine();
|
||||
}
|
||||
@@ -906,6 +914,7 @@ public abstract class Trait implements Cloneable, Serializable {
|
||||
* ToString of header.
|
||||
*
|
||||
* @param parent Parent trait
|
||||
* @param packageName Package name
|
||||
* @param convertData Convert data
|
||||
* @param path Path
|
||||
* @param abc ABC
|
||||
@@ -920,8 +929,8 @@ public abstract class Trait implements Cloneable, Serializable {
|
||||
* @return Writer
|
||||
* @throws InterruptedException On interrupt
|
||||
*/
|
||||
public GraphTextWriter toStringHeader(Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException {
|
||||
toString(null, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface);
|
||||
public GraphTextWriter toStringHeader(Trait parent, DottedChain packageName, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException {
|
||||
toString(null, packageName, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface);
|
||||
return writer;
|
||||
}
|
||||
|
||||
|
||||
@@ -145,26 +145,9 @@ public class TraitClass extends Trait implements TraitWithSlot {
|
||||
//instance initializer
|
||||
DependencyParser.parseDependenciesFromMethodInfo(abcIndex, null, scriptIndex, class_info, false, customNamespace, abc, instanceInfo.iinit_index, dependencies, packageName, fullyQualifiedNames, new ArrayList<>(), uses, numberContextRef);
|
||||
}
|
||||
|
||||
/**
|
||||
* ToString of header.
|
||||
*
|
||||
* @param parent Parent trait
|
||||
* @param convertData Convert data
|
||||
* @param path Path
|
||||
* @param abc ABC
|
||||
* @param isStatic Is static
|
||||
* @param exportMode Export mode
|
||||
* @param scriptIndex Script index
|
||||
* @param classIndex Class index
|
||||
* @param writer Writer
|
||||
* @param fullyQualifiedNames Fully qualified names
|
||||
* @param parallel Parallel
|
||||
* @param insideInterface Inside interface
|
||||
* @return Writer
|
||||
*/
|
||||
|
||||
@Override
|
||||
public GraphTextWriter toStringHeader(Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, boolean insideInterface) {
|
||||
public GraphTextWriter toStringHeader(Trait parent, DottedChain packageName, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, boolean insideInterface) {
|
||||
abc.instance_info.get(class_info).getClassHeaderStr(convertData.assetsDir, writer, abc, fullyQualifiedNames, false, false /*??*/);
|
||||
return writer;
|
||||
}
|
||||
@@ -220,19 +203,19 @@ public class TraitClass extends Trait implements TraitWithSlot {
|
||||
* @throws InterruptedException On interrupt
|
||||
*/
|
||||
@Override
|
||||
public GraphTextWriter toString(AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException {
|
||||
public GraphTextWriter toString(AbcIndexing abcIndex, DottedChain packageName, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException {
|
||||
|
||||
InstanceInfo instanceInfo = abc.instance_info.get(class_info);
|
||||
|
||||
boolean isInterface = instanceInfo.isInterface();
|
||||
|
||||
Multiname instanceInfoMultiname = instanceInfo.getName(abc.constants);
|
||||
DottedChain packageName = instanceInfoMultiname.getNamespace(abc.constants).getName(abc.constants); //assume not null name
|
||||
//DottedChain packageName = instanceInfoMultiname.getNamespace(abc.constants).getName(abc.constants); //assume not null name
|
||||
|
||||
fullyQualifiedNames = new ArrayList<>();
|
||||
|
||||
Reference<Boolean> first = new Reference<>(true);
|
||||
|
||||
|
||||
if (getName(abc).getNamespace(abc.constants).kind != Namespace.KIND_PACKAGE_INTERNAL) {
|
||||
List<Trait> traits = new ArrayList<>();
|
||||
traits.add(this);
|
||||
@@ -284,7 +267,7 @@ public class TraitClass extends Trait implements TraitWithSlot {
|
||||
|
||||
//static variables & constants
|
||||
ClassInfo classInfo = abc.class_info.get(class_info);
|
||||
classInfo.static_traits.toString(first, abcIndex, new Class[]{TraitSlotConst.class}, this, convertData, path + "/" + instanceInfoName, abc, true, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, new ArrayList<>(), isInterface);
|
||||
classInfo.static_traits.toString(packageName, first, abcIndex, new Class[]{TraitSlotConst.class}, this, convertData, path + "/" + instanceInfoName, abc, true, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, new ArrayList<>(), isInterface);
|
||||
|
||||
//static initializer
|
||||
int bodyIndex = abc.findBodyIndex(classInfo.cinit_index);
|
||||
@@ -319,7 +302,7 @@ public class TraitClass extends Trait implements TraitWithSlot {
|
||||
}
|
||||
|
||||
//instance variables
|
||||
instanceInfo.instance_traits.toString(first, abcIndex, new Class[]{TraitSlotConst.class}, this, convertData, path + "/" + instanceInfoName, abc, false, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, new ArrayList<>(), isInterface);
|
||||
instanceInfo.instance_traits.toString(packageName, first, abcIndex, new Class[]{TraitSlotConst.class}, this, convertData, path + "/" + instanceInfoName, abc, false, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, new ArrayList<>(), isInterface);
|
||||
|
||||
//instance initializer - constructor
|
||||
if (!instanceInfo.isInterface()) {
|
||||
@@ -354,10 +337,10 @@ public class TraitClass extends Trait implements TraitWithSlot {
|
||||
}
|
||||
|
||||
//static methods
|
||||
classInfo.static_traits.toString(first, abcIndex, new Class[]{TraitClass.class, TraitFunction.class, TraitMethodGetterSetter.class}, this, convertData, path + "/" + instanceInfoName, abc, true, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, new ArrayList<>(), isInterface);
|
||||
classInfo.static_traits.toString(packageName, first, abcIndex, new Class[]{TraitClass.class, TraitFunction.class, TraitMethodGetterSetter.class}, this, convertData, path + "/" + instanceInfoName, abc, true, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, new ArrayList<>(), isInterface);
|
||||
|
||||
//instance methods
|
||||
instanceInfo.instance_traits.toString(first, abcIndex, new Class[]{TraitClass.class, TraitFunction.class, TraitMethodGetterSetter.class}, this, convertData, path + "/" + instanceInfoName, abc, false, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, convertData.ignoreFrameScripts ? frameTraitNames : new ArrayList<>(), isInterface);
|
||||
instanceInfo.instance_traits.toString(packageName, first, abcIndex, new Class[]{TraitClass.class, TraitFunction.class, TraitMethodGetterSetter.class}, this, convertData, path + "/" + instanceInfoName, abc, false, exportMode, false, scriptIndex, class_info, writer, fullyQualifiedNames, parallel, convertData.ignoreFrameScripts ? frameTraitNames : new ArrayList<>(), isInterface);
|
||||
|
||||
if (first.getVal()) {
|
||||
writer.newLine();
|
||||
|
||||
@@ -75,26 +75,9 @@ public class TraitFunction extends Trait implements TraitWithSlot {
|
||||
public int getSlotIndex() {
|
||||
return slot_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* ToString of header.
|
||||
*
|
||||
* @param parent Parent trait
|
||||
* @param convertData Convert data
|
||||
* @param path Path
|
||||
* @param abc ABC
|
||||
* @param isStatic Is static
|
||||
* @param exportMode Export mode
|
||||
* @param scriptIndex Script index
|
||||
* @param classIndex Class index
|
||||
* @param writer Writer
|
||||
* @param fullyQualifiedNames Fully qualified names
|
||||
* @param parallel Parallel
|
||||
* @param insideInterface Inside interface
|
||||
* @return Writer
|
||||
*/
|
||||
|
||||
@Override
|
||||
public GraphTextWriter toStringHeader(Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, boolean insideInterface) {
|
||||
public GraphTextWriter toStringHeader(Trait parent, DottedChain packageName, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, boolean insideInterface) {
|
||||
MethodBody body = abc.findBody(method_info);
|
||||
if (body == null) {
|
||||
writer.appendNoHilight("native ");
|
||||
@@ -139,34 +122,15 @@ public class TraitFunction extends Trait implements TraitWithSlot {
|
||||
public String toString(ABC abc, List<DottedChain> fullyQualifiedNames) {
|
||||
return "Function " + abc.constants.getMultiname(name_index).toString(abc.constants, fullyQualifiedNames) + " slot=" + slot_id + " method_info=" + method_info + " metadata=" + Helper.intArrToString(metadata);
|
||||
}
|
||||
|
||||
/**
|
||||
* To string.
|
||||
*
|
||||
* @param abcIndex ABC indexing
|
||||
* @param parent Parent trait
|
||||
* @param convertData Convert data
|
||||
* @param path Path
|
||||
* @param abc ABC
|
||||
* @param isStatic Is static
|
||||
* @param exportMode Export mode
|
||||
* @param scriptIndex Script index
|
||||
* @param classIndex Class index
|
||||
* @param writer Writer
|
||||
* @param fullyQualifiedNames Fully qualified names
|
||||
* @param parallel Parallel
|
||||
* @param insideInterface Inside interface
|
||||
* @return Writer
|
||||
* @throws InterruptedException On interrupt
|
||||
*/
|
||||
|
||||
@Override
|
||||
public GraphTextWriter toString(AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException {
|
||||
public GraphTextWriter toString(AbcIndexing abcIndex, DottedChain packageName, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException {
|
||||
List<Trait> traits = new ArrayList<>();
|
||||
traits.add(this);
|
||||
writeImports(traits, -1, abcIndex, scriptIndex, classIndex, false, abc, writer, getPackage(abc), fullyQualifiedNames);
|
||||
getMetaData(this, convertData, abc, writer);
|
||||
writer.startMethod(method_info, getName(abc).getName(abc.constants, new ArrayList<>(), true, false));
|
||||
toStringHeader(parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface);
|
||||
toStringHeader(parent, packageName, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface);
|
||||
|
||||
writer.startBlock();
|
||||
int bodyIndex = abc.findBodyIndex(method_info);
|
||||
|
||||
@@ -120,26 +120,9 @@ public class TraitMethodGetterSetter extends Trait {
|
||||
}
|
||||
DependencyParser.parseDependenciesFromMethodInfo(abcIndex, this, scriptIndex, classIndex, isStatic, customNamespace, abc, method_info, dependencies, ignorePackage, fullyQualifiedNames, new ArrayList<>(), uses, numberContextRef);
|
||||
}
|
||||
|
||||
/**
|
||||
* ToString of header.
|
||||
*
|
||||
* @param parent Parent trait
|
||||
* @param convertData Convert data
|
||||
* @param path Path
|
||||
* @param abc ABC
|
||||
* @param isStatic Is static
|
||||
* @param exportMode Export mode
|
||||
* @param scriptIndex Script index
|
||||
* @param classIndex Class index
|
||||
* @param writer Writer
|
||||
* @param fullyQualifiedNames Fully qualified names
|
||||
* @param parallel Parallel
|
||||
* @param insideInterface Inside interface
|
||||
* @return Writer
|
||||
*/
|
||||
|
||||
@Override
|
||||
public GraphTextWriter toStringHeader(Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, boolean insideInterface) {
|
||||
public GraphTextWriter toStringHeader(Trait parent, DottedChain packageName, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, boolean insideInterface) {
|
||||
String addKind = "";
|
||||
if (kindType == TRAIT_GETTER) {
|
||||
addKind = "get ";
|
||||
@@ -217,27 +200,8 @@ public class TraitMethodGetterSetter extends Trait {
|
||||
return "0x" + Helper.formatAddress(fileOffset) + " " + Helper.byteArrToString(bytes) + " MethodGetterSetter " + abc.constants.getMultiname(name_index).toString(abc.constants, fullyQualifiedNames) + " disp_id=" + disp_id + " method_info=" + method_info + " metadata=" + Helper.intArrToString(metadata);
|
||||
}
|
||||
|
||||
/**
|
||||
* To string.
|
||||
*
|
||||
* @param abcIndex ABC indexing
|
||||
* @param parent Parent trait
|
||||
* @param convertData Convert data
|
||||
* @param path Path
|
||||
* @param abc ABC
|
||||
* @param isStatic Is static
|
||||
* @param exportMode Export mode
|
||||
* @param scriptIndex Script index
|
||||
* @param classIndex Class index
|
||||
* @param writer Writer
|
||||
* @param fullyQualifiedNames Fully qualified names
|
||||
* @param parallel Parallel
|
||||
* @param insideInterface Inside interface
|
||||
* @return Writer
|
||||
* @throws InterruptedException On interrupt
|
||||
*/
|
||||
@Override
|
||||
public GraphTextWriter toString(AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException {
|
||||
public GraphTextWriter toString(AbcIndexing abcIndex, DottedChain packageName, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException {
|
||||
|
||||
if (classIndex < 0) {
|
||||
//writeImports(this, -1, abcIndex, scriptIndex, classIndex, isStatic, abc, writer, getPackage(abc), fullyQualifiedNames);
|
||||
@@ -245,7 +209,7 @@ public class TraitMethodGetterSetter extends Trait {
|
||||
getMetaData(this, convertData, abc, writer);
|
||||
writer.startMethod(method_info, getName(abc).getName(abc.constants, new ArrayList<>(), true, false));
|
||||
path = path + "." + getName(abc).getName(abc.constants, fullyQualifiedNames, false, true);
|
||||
toStringHeader(parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface);
|
||||
toStringHeader(parent, packageName, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface);
|
||||
int bodyIndex = abc.findBodyIndex(method_info);
|
||||
if (classIndex != -1 && abc.instance_info.get(classIndex).isInterface() || bodyIndex == -1) {
|
||||
writer.appendNoHilight(";");
|
||||
|
||||
@@ -230,27 +230,8 @@ public class TraitSlotConst extends Trait implements TraitWithSlot {
|
||||
return "0x" + Helper.formatAddress(fileOffset) + " " + Helper.byteArrToString(bytes) + " SlotConst " + abc.constants.getMultiname(name_index).toString(abc.constants, fullyQualifiedNames) + " slot=" + slot_id + " type=" + typeStr + " value=" + (new ValueKind(value_index, value_kind)).toString(abc) + " metadata=" + Helper.intArrToString(metadata);
|
||||
}
|
||||
|
||||
/**
|
||||
* To string.
|
||||
*
|
||||
* @param abcIndex ABC indexing
|
||||
* @param parent Parent trait
|
||||
* @param convertData Convert data
|
||||
* @param path Path
|
||||
* @param abc ABC
|
||||
* @param isStatic Is static
|
||||
* @param exportMode Export mode
|
||||
* @param scriptIndex Script index
|
||||
* @param classIndex Class index
|
||||
* @param writer Writer
|
||||
* @param fullyQualifiedNames Fully qualified names
|
||||
* @param parallel Parallel
|
||||
* @param insideInterface Inside interface
|
||||
* @return Writer
|
||||
* @throws InterruptedException On interrupt
|
||||
*/
|
||||
@Override
|
||||
public GraphTextWriter toString(AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException {
|
||||
public GraphTextWriter toString(AbcIndexing abcIndex, DottedChain packageName, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException {
|
||||
getMetaData(this, convertData, abc, writer);
|
||||
Multiname n = getName(abc);
|
||||
boolean showModifier = true;
|
||||
|
||||
@@ -295,6 +295,7 @@ public class Traits implements Cloneable, Serializable {
|
||||
/**
|
||||
* To string.
|
||||
*
|
||||
* @param packageName Package name
|
||||
* @param first Whether to add newline
|
||||
* @param abcIndex ABC indexing
|
||||
* @param traitTypes Trait types
|
||||
@@ -315,49 +316,7 @@ public class Traits implements Cloneable, Serializable {
|
||||
* @return Writer
|
||||
* @throws InterruptedException On interrupt
|
||||
*/
|
||||
public GraphTextWriter toString(Reference<Boolean> first, AbcIndexing abcIndex, Class[] traitTypes, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, boolean makePackages, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, List<String> ignoredTraitNames, boolean insideInterface) throws InterruptedException {
|
||||
|
||||
/*List<Trait> ordered = new ArrayList<>(traits);
|
||||
loopi:
|
||||
for (int i = 0; i < ordered.size(); i++) {
|
||||
for (int j = i + 1; j < ordered.size(); j++) {
|
||||
if (i == j) {
|
||||
continue;
|
||||
}
|
||||
Trait o1 = ordered.get(i);
|
||||
Trait o2 = ordered.get(j);
|
||||
Multiname m2 = abc.constants.getMultiname(o2.name_index);
|
||||
if (!convertData.assignedValues.containsKey(o1)) {
|
||||
continue;
|
||||
}
|
||||
GraphTargetItem v1 = convertData.assignedValues.get(o1).value;
|
||||
|
||||
Set<GraphTargetItem> subitems1 = v1.getAllSubItemsRecursively();
|
||||
subitems1.add(v1);
|
||||
for (GraphTargetItem si : subitems1) {
|
||||
if (si instanceof GetPropertyAVM2Item) {
|
||||
GetPropertyAVM2Item getProp = (GetPropertyAVM2Item) si;
|
||||
Multiname sm1 = abc.constants.getMultiname(((FullMultinameAVM2Item) getProp.propertyName).multinameIndex);
|
||||
if (getProp.object instanceof FindPropertyAVM2Item && sm1.equals(m2)) {
|
||||
ordered.add(j + 1, o1);
|
||||
ordered.remove(i);
|
||||
i--;
|
||||
continue loopi;
|
||||
}
|
||||
}
|
||||
if (si instanceof GetLexAVM2Item) {
|
||||
GetLexAVM2Item lex = (GetLexAVM2Item) si;
|
||||
if (lex.propertyName.equals(m2)) {
|
||||
ordered.add(j + 1, o1);
|
||||
ordered.remove(i);
|
||||
i--;
|
||||
continue loopi;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
public GraphTextWriter toString(DottedChain packageName, Reference<Boolean> first, AbcIndexing abcIndex, Class[] traitTypes, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, boolean makePackages, int scriptIndex, int classIndex, GraphTextWriter writer, List<DottedChain> fullyQualifiedNames, boolean parallel, List<String> ignoredTraitNames, boolean insideInterface) throws InterruptedException {
|
||||
List<Trait> ordered = traits;
|
||||
|
||||
for (Trait trait : ordered) {
|
||||
@@ -394,7 +353,7 @@ public class Traits implements Cloneable, Serializable {
|
||||
if (makePackages) {
|
||||
trait.toStringPackaged(abcIndex, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface);
|
||||
} else {
|
||||
trait.toString(abcIndex, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface);
|
||||
trait.toString(abcIndex, packageName, parent, convertData, path, abc, isStatic, exportMode, scriptIndex, classIndex, writer, fullyQualifiedNames, parallel, insideInterface);
|
||||
}
|
||||
writer.endTrait();
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import com.jpexs.decompiler.flash.configuration.Configuration;
|
||||
import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode;
|
||||
import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter;
|
||||
import com.jpexs.decompiler.flash.helpers.NulWriter;
|
||||
import com.jpexs.decompiler.graph.DottedChain;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
@@ -75,13 +76,13 @@ public abstract class ConstVarMultinameUsage extends TraitMultinameUsage {
|
||||
|
||||
if (parentTraitIndex > -1) {
|
||||
if (traitsType == TRAITS_TYPE_CLASS) {
|
||||
((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).toStringHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface);
|
||||
((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).toStringHeader(null, DottedChain.EMPTY /*??*/, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface);
|
||||
} else if (traitsType == TRAITS_TYPE_INSTANCE) {
|
||||
((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).toStringHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface);
|
||||
((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).toStringHeader(null, DottedChain.EMPTY /*??*/, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface);
|
||||
}
|
||||
}
|
||||
try {
|
||||
((TraitSlotConst) traits.traits.get(traitIndex)).toStringHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface);
|
||||
((TraitSlotConst) traits.traits.get(traitIndex)).toStringHeader(null, DottedChain.EMPTY /*??*/, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface);
|
||||
} catch (InterruptedException ex) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.jpexs.decompiler.flash.configuration.Configuration;
|
||||
import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode;
|
||||
import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter;
|
||||
import com.jpexs.decompiler.flash.helpers.NulWriter;
|
||||
import com.jpexs.decompiler.graph.DottedChain;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
@@ -99,13 +100,13 @@ public abstract class MethodMultinameUsage extends TraitMultinameUsage {
|
||||
}
|
||||
if (parentTraitIndex > -1) {
|
||||
if (traitsType == TRAITS_TYPE_CLASS) {
|
||||
((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).toStringHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface);
|
||||
((TraitMethodGetterSetter) abc.class_info.get(classIndex).static_traits.traits.get(parentTraitIndex)).toStringHeader(null, DottedChain.EMPTY /*??*/, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface);
|
||||
} else {
|
||||
((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).toStringHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface);
|
||||
((TraitMethodGetterSetter) abc.instance_info.get(classIndex).instance_traits.traits.get(parentTraitIndex)).toStringHeader(null, DottedChain.EMPTY /*??*/,convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface);
|
||||
}
|
||||
writer.appendNoHilight(" ");
|
||||
}
|
||||
((TraitMethodGetterSetter) traits.traits.get(traitIndex)).toStringHeader(null, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface);
|
||||
((TraitMethodGetterSetter) traits.traits.get(traitIndex)).toStringHeader(null, DottedChain.EMPTY /*??*/, convertData, "", abc, traitsType == TRAITS_TYPE_CLASS, ScriptExportMode.AS, -1/*FIXME*/, classIndex, writer, new ArrayList<>(), false, insideInterface);
|
||||
}
|
||||
writer.finishHilights();
|
||||
return writer.toString().trim();
|
||||
|
||||
@@ -78,6 +78,7 @@ public class FFDecAs3ScriptReplacer implements As3ScriptReplacerInterface {
|
||||
abc.script_info.get(oldIndex).delete(abc, true);
|
||||
AbcIndexing abcIndex = swf.getAbcIndex();
|
||||
abcIndex.selectAbc(abc);
|
||||
abcIndex.refreshAbc(abc);
|
||||
|
||||
ActionScript3Parser.compile(text, abc, abcIndex, scriptName, newClassIndex, oldIndex, air, swf.getDocumentClass());
|
||||
if (pack.isSimple) {
|
||||
|
||||
Reference in New Issue
Block a user