Added #2124 Copy tags to other SWFs and replace same classes / export names

This commit is contained in:
Jindra Petřík
2023-11-25 14:56:56 +01:00
parent 5d85dee6f8
commit b2abab0d45
7 changed files with 502 additions and 20 deletions

View File

@@ -413,6 +413,9 @@ public final class SWF implements SWFContainerItem, Timelined, Openable {
private static final DecompilerPool decompilerPool = new DecompilerPool();
@Internal
private Map<String, Integer> exportNameToCharacter = new HashMap<>();
@Internal
private AbcIndexing abcIndex;
@@ -822,6 +825,14 @@ public final class SWF implements SWFContainerItem, Timelined, Openable {
int charId = classToCharacter.get(className);
return getCharacter(charId);
}
public CharacterTag getCharacterByExportName(String exportName) {
if (!exportNameToCharacter.containsKey(exportName)) {
return null;
}
int charId = exportNameToCharacter.get(exportName);
return getCharacter(charId);
}
public String getExportName(int characterId) {
CharacterTag characterTag = getCharacters().get(characterId);
@@ -1821,6 +1832,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable {
}
public void assignExportNamesToSymbols() {
exportNameToCharacter.clear();
HashMap<Integer, String> exportNames = new HashMap<>(importedTagToExportNameMapping);
for (Tag t : getTags()) {
if (t instanceof ExportAssetsTag) {
@@ -1830,6 +1842,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable {
String name = eat.names.get(i);
if ((!exportNames.containsKey(tagId)) && (!exportNames.containsValue(name))) {
exportNames.put(tagId, name);
exportNameToCharacter.put(name, tagId);
}
}
}