Removing AS3 scripts ("ScriptPacks")

This commit is contained in:
Jindra Petřík
2021-02-16 08:17:36 +01:00
parent 3385211b54
commit b54b51d206
4 changed files with 52 additions and 4 deletions

View File

@@ -93,6 +93,8 @@ import com.jpexs.decompiler.flash.tags.DebugIDTag;
import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag;
import com.jpexs.decompiler.flash.tags.DefineSoundTag;
import com.jpexs.decompiler.flash.tags.DefineSpriteTag;
import com.jpexs.decompiler.flash.tags.DoABC2Tag;
import com.jpexs.decompiler.flash.tags.DoABCTag;
import com.jpexs.decompiler.flash.tags.DoInitActionTag;
import com.jpexs.decompiler.flash.tags.EnableDebugger2Tag;
import com.jpexs.decompiler.flash.tags.EnableDebuggerTag;
@@ -2993,6 +2995,9 @@ public final class SWF implements SWFContainerItem, Timelined {
}
private void removeTagInternal(Timelined timelined, Tag tag, boolean removeDependencies) {
if ((tag instanceof DoABC2Tag) || (tag instanceof DoABCTag)) {
clearAbcListCache();
}
if (tag instanceof ShowFrameTag || ShowFrameTag.isNestedTagType(tag.getId())) {
timelined.removeTag(tag);
timelined.setModified(true);

View File

@@ -27,6 +27,7 @@ import com.jpexs.decompiler.flash.abc.types.ConvertData;
import com.jpexs.decompiler.flash.abc.types.MethodBody;
import com.jpexs.decompiler.flash.abc.types.Multiname;
import com.jpexs.decompiler.flash.abc.types.Namespace;
import com.jpexs.decompiler.flash.abc.types.ScriptInfo;
import com.jpexs.decompiler.flash.abc.types.traits.Trait;
import com.jpexs.decompiler.flash.abc.types.traits.TraitClass;
import com.jpexs.decompiler.flash.abc.types.traits.TraitFunction;
@@ -331,6 +332,9 @@ public class ScriptPack extends AS3ClassTreeItem {
@Override
public boolean isModified() {
if (scriptIndex >= abc.script_info.size()) {
return false;
}
return abc.script_info.get(scriptIndex).isModified();
}
@@ -637,4 +641,15 @@ public class ScriptPack extends AS3ClassTreeItem {
trait.getMethodInfos(abc, GraphTextWriter.TRAIT_UNKNOWN, -1, methodInfos);
}
}
public void delete(ABC abc, boolean d) {
ScriptInfo si = abc.script_info.get(scriptIndex);
if (isSimple) {
si.delete(abc, d);
} else {
for (int t : traitIndices) {
si.traits.traits.get(t).delete(abc, d);
}
}
}
}