mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-07-16 17:10:22 +00:00
AS3: class trait imports refactor
This commit is contained in:
@@ -48,7 +48,7 @@ public class TraitClass extends Trait {
|
||||
return "Class " + abc.constants.constant_multiname[name_index].toString(abc.constants) + " slot=" + slot_id + " class_info=" + class_info + " metadata=" + Helper.intArrToString(metadata);
|
||||
}
|
||||
|
||||
private void parseImportFromNS(List<DoABCTag> abcTags, ABC abc, List imports, List<String> uses, int namespace_index, String ignorePackage, String name) {
|
||||
private void parseImportsUsagesFromNS(List<DoABCTag> abcTags, ABC abc, List imports, List<String> uses, int namespace_index, String ignorePackage, String name) {
|
||||
Namespace ns = abc.constants.constant_namespace[namespace_index];
|
||||
if (name.equals("")) {
|
||||
name = "*";
|
||||
@@ -107,65 +107,65 @@ public class TraitClass extends Trait {
|
||||
}
|
||||
}
|
||||
|
||||
private void parseImportFromMultiname(List<DoABCTag> abcTags, ABC abc, List<String> imports, List<String> uses, Multiname m, String ignorePackage) {
|
||||
private void parseImportsUsagesFromMultiname(List<DoABCTag> abcTags, ABC abc, List<String> imports, List<String> uses, Multiname m, String ignorePackage) {
|
||||
if (m != null) {
|
||||
Namespace ns = m.getNamespace(abc.constants);
|
||||
String name = m.getName(abc.constants);
|
||||
NamespaceSet nss = m.getNamespaceSet(abc.constants);
|
||||
if (ns != null) {
|
||||
parseImportFromNS(abcTags, abc, imports,uses, m.namespace_index, ignorePackage, name);
|
||||
parseImportsUsagesFromNS(abcTags, abc, imports,uses, m.namespace_index, ignorePackage, name);
|
||||
}
|
||||
if (nss != null) {
|
||||
for (int ni : nss.namespaces) {
|
||||
parseImportFromNS(abcTags, abc, imports,uses, ni, ignorePackage, name);
|
||||
parseImportsUsagesFromNS(abcTags, abc, imports,uses, ni, ignorePackage, name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void parseImportsFromMethodInfo(List<DoABCTag> abcTags, ABC abc, int method_index, List<String> imports, List<String> uses, String ignorePackage) {
|
||||
private void parseImportsUsagesFromMethodInfo(List<DoABCTag> abcTags, ABC abc, int method_index, List<String> imports, List<String> uses, String ignorePackage) {
|
||||
if (abc.method_info[method_index].ret_type != 0) {
|
||||
parseImportFromMultiname(abcTags, abc, imports,uses, abc.constants.constant_multiname[abc.method_info[method_index].ret_type], ignorePackage);
|
||||
parseImportsUsagesFromMultiname(abcTags, abc, imports,uses, abc.constants.constant_multiname[abc.method_info[method_index].ret_type], ignorePackage);
|
||||
}
|
||||
for (int t : abc.method_info[method_index].param_types) {
|
||||
if (t != 0) {
|
||||
parseImportFromMultiname(abcTags, abc, imports,uses, abc.constants.constant_multiname[t], ignorePackage);
|
||||
parseImportsUsagesFromMultiname(abcTags, abc, imports,uses, abc.constants.constant_multiname[t], ignorePackage);
|
||||
}
|
||||
}
|
||||
MethodBody body = abc.findBody(method_index);
|
||||
if (body != null) {
|
||||
for (ABCException ex : body.exceptions) {
|
||||
parseImportFromMultiname(abcTags, abc, imports,uses, abc.constants.constant_multiname[ex.type_index], ignorePackage);
|
||||
parseImportsUsagesFromMultiname(abcTags, abc, imports,uses, abc.constants.constant_multiname[ex.type_index], ignorePackage);
|
||||
}
|
||||
for (AVM2Instruction ins : body.code.code) {
|
||||
if (ins.definition instanceof NewFunctionIns) {
|
||||
parseImportsFromMethodInfo(abcTags, abc, ins.operands[0], imports,uses, ignorePackage);
|
||||
parseImportsUsagesFromMethodInfo(abcTags, abc, ins.operands[0], imports,uses, ignorePackage);
|
||||
}
|
||||
for (int k = 0; k < ins.definition.operands.length; k++) {
|
||||
if (ins.definition.operands[k] == AVM2Code.DAT_MULTINAME_INDEX) {
|
||||
int multinameIndex = ins.operands[k];
|
||||
parseImportFromMultiname(abcTags, abc, imports,uses, abc.constants.constant_multiname[multinameIndex], ignorePackage);
|
||||
parseImportsUsagesFromMultiname(abcTags, abc, imports,uses, abc.constants.constant_multiname[multinameIndex], ignorePackage);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void parseImportsFromTrait(List<DoABCTag> abcTags, ABC abc, Trait t, List<String> imports, List<String> uses, String ignorePackage) {
|
||||
private void parseImportsUsagesFromTrait(List<DoABCTag> abcTags, ABC abc, Trait t, List<String> imports, List<String> uses, String ignorePackage) {
|
||||
if (t instanceof TraitMethodGetterSetter) {
|
||||
TraitMethodGetterSetter tm = (TraitMethodGetterSetter) t;
|
||||
if (tm.method_info != 0) {
|
||||
parseImportsFromMethodInfo(abcTags, abc, tm.method_info, imports,uses, ignorePackage);
|
||||
parseImportsUsagesFromMethodInfo(abcTags, abc, tm.method_info, imports,uses, ignorePackage);
|
||||
}
|
||||
}
|
||||
parseImportFromMultiname(abcTags, abc, imports,uses, t.getName(abc), ignorePackage);
|
||||
parseImportsUsagesFromMultiname(abcTags, abc, imports,uses, t.getName(abc), ignorePackage);
|
||||
if (t instanceof TraitSlotConst) {
|
||||
TraitSlotConst ts = (TraitSlotConst) t;
|
||||
parseImportFromMultiname(abcTags, abc, imports,uses, abc.constants.constant_multiname[ts.type_index], ignorePackage);
|
||||
parseImportsUsagesFromMultiname(abcTags, abc, imports,uses, abc.constants.constant_multiname[ts.type_index], ignorePackage);
|
||||
}
|
||||
}
|
||||
|
||||
private List getImports(List<DoABCTag> abcTags, ABC abc,List<String> imports,List<String> uses) {
|
||||
private List getImportsUsages(List<DoABCTag> abcTags, ABC abc,List<String> imports,List<String> uses) {
|
||||
//constructor
|
||||
|
||||
//parseImportFromMultiname(imports, constants.constant_multiname[instance_info[instanceIndex].name_index]);
|
||||
@@ -173,27 +173,27 @@ public class TraitClass extends Trait {
|
||||
String packageName = abc.instance_info[class_info].getName(abc.constants).getNamespace(abc.constants).getName(abc.constants);
|
||||
|
||||
if (abc.instance_info[class_info].super_index > 0) {
|
||||
parseImportFromMultiname(abcTags, abc, imports,uses, abc.constants.constant_multiname[abc.instance_info[class_info].super_index], packageName);
|
||||
parseImportsUsagesFromMultiname(abcTags, abc, imports,uses, abc.constants.constant_multiname[abc.instance_info[class_info].super_index], packageName);
|
||||
}
|
||||
for (int i : abc.instance_info[class_info].interfaces) {
|
||||
parseImportFromMultiname(abcTags, abc, imports,uses, abc.constants.constant_multiname[i], packageName);
|
||||
parseImportsUsagesFromMultiname(abcTags, abc, imports,uses, abc.constants.constant_multiname[i], packageName);
|
||||
}
|
||||
|
||||
//static
|
||||
for (Trait t : abc.class_info[class_info].static_traits.traits) {
|
||||
parseImportsFromTrait(abcTags, abc, t, imports, uses, packageName);
|
||||
parseImportsUsagesFromTrait(abcTags, abc, t, imports, uses, packageName);
|
||||
}
|
||||
|
||||
//static initializer
|
||||
parseImportsFromMethodInfo(abcTags, abc, abc.class_info[class_info].cinit_index, imports, uses, packageName);
|
||||
parseImportsUsagesFromMethodInfo(abcTags, abc, abc.class_info[class_info].cinit_index, imports, uses, packageName);
|
||||
|
||||
//instance
|
||||
for (Trait t : abc.instance_info[class_info].instance_traits.traits) {
|
||||
parseImportsFromTrait(abcTags, abc, t, imports, uses, packageName);
|
||||
parseImportsUsagesFromTrait(abcTags, abc, t, imports, uses, packageName);
|
||||
}
|
||||
|
||||
//instance initializer
|
||||
parseImportsFromMethodInfo(abcTags, abc, abc.instance_info[class_info].iinit_index, imports, uses, packageName);
|
||||
parseImportsUsagesFromMethodInfo(abcTags, abc, abc.instance_info[class_info].iinit_index, imports, uses, packageName);
|
||||
return imports;
|
||||
}
|
||||
|
||||
@@ -208,7 +208,7 @@ public class TraitClass extends Trait {
|
||||
//imports
|
||||
List<String> imports = new ArrayList<String>();
|
||||
List<String> uses = new ArrayList<String>();
|
||||
getImports(abcTags, abc,imports,uses);
|
||||
getImportsUsages(abcTags, abc,imports,uses);
|
||||
for (String imp : imports) {
|
||||
out.println(ABC.IDENT_STRING + "import " + imp + ";");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user