diff --git a/CHANGELOG.md b/CHANGELOG.md index b3b140f9b..c2b34f208 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to this project will be documented in this file. - Updated portugese-brasil translation - AS3 Debugging - export/import ByteArray variable data - [#2123] FLA export - show some progress info +- Label that flex compiler is used (when it's enabled in settings) ### Fixed - [#2021], [#2000] Caret position in editors when using tabs and / or unicode @@ -23,6 +24,8 @@ All notable changes to this project will be documented in this file. - [#2123] FLA export - IndexOutOfBounds in shape fixer - [#2123] FLA export - morphshapes fixer - [#2111] AS3 direct editation - access class in class initializer +- [#2111] Flex AS3 editation - use SWF dependencies defined in GUI +- SWF dependencies label was not updated on startup ### Removed - [#2123] FLA export - Using shape fixer for morphshapes (needs something better) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java index caf525559..1f4d688c7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java @@ -1855,8 +1855,8 @@ public class ABC implements Openable { method_info.remove(index); } - public boolean replaceScriptPack(As3ScriptReplacerInterface replacer, ScriptPack pack, String as) throws As3ScriptReplaceException, IOException, InterruptedException { - replacer.replaceScript(pack, as); + public boolean replaceScriptPack(As3ScriptReplacerInterface replacer, ScriptPack pack, String as, List dependencies) throws As3ScriptReplaceException, IOException, InterruptedException { + replacer.replaceScript(pack, as, dependencies); ((Tag) parentTag).setModified(true); return pack.isSimple; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java index 6d4ecad3e..d2b64e886 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java @@ -66,6 +66,8 @@ public final class Configuration { public static final Level logLevel; public static boolean showStat; + + public static final String ABC_DEPS_SEPARATOR = "{*sep*}"; @ConfigurationDefaultBoolean(true) @ConfigurationCategory("ui") diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/swf/SwfToSwcExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/swf/SwfToSwcExporter.java index 3d6982f22..032dc1401 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/swf/SwfToSwcExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/swf/SwfToSwcExporter.java @@ -255,8 +255,6 @@ public class SwfToSwcExporter { printDelay("swc.recompile2", t3, t4); } catch (Exception ex) { - ex.printStackTrace(); - System.exit(0); throw new RuntimeException(ex); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcAs3ScriptReplacer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcAs3ScriptReplacer.java index 2121d5c59..721925264 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcAs3ScriptReplacer.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcAs3ScriptReplacer.java @@ -24,6 +24,8 @@ 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.configuration.Configuration; +import com.jpexs.decompiler.flash.configuration.CustomConfigurationKeys; +import com.jpexs.decompiler.flash.configuration.SwfSpecificCustomConfiguration; import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; import com.jpexs.decompiler.flash.exporters.script.AS3ScriptExporter; import com.jpexs.decompiler.flash.exporters.settings.ScriptExportSettings; @@ -43,6 +45,7 @@ import java.io.FileInputStream; import java.io.IOException; import java.nio.file.Files; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -56,6 +59,7 @@ public class MxmlcAs3ScriptReplacer extends MxmlcRunner implements As3ScriptRepl private File tempDir; private File pkgDir; private File swcFile; + private List dependenciesSwcFiles = new ArrayList<>(); public MxmlcAs3ScriptReplacer(String flexSdkPath) { super(flexSdkPath); @@ -115,13 +119,13 @@ public class MxmlcAs3ScriptReplacer extends MxmlcRunner implements As3ScriptRepl } @Override - public synchronized void replaceScript(ScriptPack pack, String text) throws As3ScriptReplaceException, IOException, InterruptedException { + public synchronized void replaceScript(ScriptPack pack, String text, List dependencies) throws As3ScriptReplaceException, IOException, InterruptedException { if (!pack.isSimple) { throw new IOException("Cannot compile such file"); //Alchemy, etc. TODO: handle better } if (!isInited(pack)) { - initReplacement(pack); + initReplacement(pack, dependencies); } File scriptFileToCompile = new File(pkgDir, pack.getClassPath().className + ".as"); @@ -131,7 +135,21 @@ public class MxmlcAs3ScriptReplacer extends MxmlcRunner implements As3ScriptRepl try { //Compile it (and subclasses stubs) - mxmlc("-strict=false", "-include-inheritance-dependencies-only", "-warnings=false", "-library-path", swcFile.getAbsolutePath(), "-source-path", tempDir.getAbsolutePath(), "-output", compiledSwfFile.getAbsolutePath(), "-debug=true", scriptFileToCompile.getAbsolutePath()); + List args = new ArrayList<>(Arrays.asList("-strict=false", + "-include-inheritance-dependencies-only", + "-warnings=false", + "-library-path", swcFile.getAbsolutePath())); + + for (File depSwcFile : dependenciesSwcFiles) { + args.add("-library-path"); + args.add(depSwcFile.getAbsolutePath()); + } + + args.addAll(Arrays.asList("-source-path", tempDir.getAbsolutePath(), + "-output", compiledSwfFile.getAbsolutePath(), + "-debug=true", + scriptFileToCompile.getAbsolutePath())); + mxmlc(args); } catch (MxmlcException ex1) { //String compiledFilePath = scriptFileToCompile.getAbsolutePath(); Pattern errPattern = Pattern.compile("^" + Pattern.quote(tempDir.getAbsolutePath()) + "(?.*)\\((?[0-9]+)\\): col: (?[0-9]+) (?.*)$"); @@ -149,7 +167,13 @@ public class MxmlcAs3ScriptReplacer extends MxmlcRunner implements As3ScriptRepl errorItems.add(new As3ScriptReplaceExceptionItem(errFile, errMsg, errLine, errCol)); } } - throw new As3ScriptReplaceException(errorItems); + As3ScriptReplaceException ex; + if (errorItems.isEmpty()) { + ex = new As3ScriptReplaceException(err); + } else { + ex = new As3ScriptReplaceException(errorItems); + } + throw ex; } try (FileInputStream fis = new FileInputStream(compiledSwfFile)) { @@ -248,7 +272,7 @@ public class MxmlcAs3ScriptReplacer extends MxmlcRunner implements As3ScriptRepl } @Override - public synchronized void initReplacement(ScriptPack pack) { + public synchronized void initReplacement(ScriptPack pack, List dependencies) { if (tempDir != null) { deinitReplacement(pack); } @@ -262,11 +286,11 @@ public class MxmlcAs3ScriptReplacer extends MxmlcRunner implements As3ScriptRepl } pkgDir.mkdirs(); - swcFile = new File(pkgDir, "out.swc"); + swcFile = new File(tempDir, "out.swc"); //Make copy without the old script Openable openable = pack.getOpenable(); - SWF swf = (openable instanceof SWF) ? (SWF) openable : ((ABC) openable).getSwf(); + SWF swf = (openable instanceof SWF) ? (SWF) openable : ((ABC) openable).getSwf(); SWF swfCopy = recompileSWF(swf); List modAbcs = new ArrayList<>(); @@ -309,7 +333,15 @@ public class MxmlcAs3ScriptReplacer extends MxmlcRunner implements As3ScriptRepl //Flex then uses the code already present in the SWC, no need to decompile it (hurray!) SwfToSwcExporter swcExport = new SwfToSwcExporter(); swcExport.exportSwf(swfCopy, swcFile, true); - + + dependenciesSwcFiles = new ArrayList<>(); + int i = 0; + for (SWF depSwf : dependencies) { + i++; + File depSwcFile = new File(tempDir, "dep" + i + ".swc"); + swcExport.exportSwf(depSwf, depSwcFile, false); + dependenciesSwcFiles.add(depSwcFile); + } } catch (IOException iex) { //ignore } catch (InterruptedException ex) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcRunner.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcRunner.java index 12a2964cd..74cae2b7f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcRunner.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcRunner.java @@ -20,6 +20,7 @@ import com.jpexs.helpers.Helper; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; +import java.util.List; public class MxmlcRunner { @@ -51,10 +52,12 @@ public class MxmlcRunner { return null; } - public void mxmlc(String... arguments) throws MxmlcException, InterruptedException, IOException { - String[] runArgs = new String[arguments.length + 1]; + public void mxmlc(List arguments) throws MxmlcException, InterruptedException, IOException { + String[] runArgs = new String[arguments.size() + 1]; runArgs[0] = getMxmlcPath(flexSdkPath); - System.arraycopy(arguments, 0, runArgs, 1, arguments.length); + for (int i = 0; i < arguments.size(); i++) { + runArgs[i + 1] = arguments.get(i); + } //System.out.println("" + String.join(" ", runArgs)); Process proc = null; try { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/AS3ScriptImporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/AS3ScriptImporter.java index 8e1d9b9c6..0adc0d836 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/AS3ScriptImporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/AS3ScriptImporter.java @@ -37,11 +37,11 @@ public class AS3ScriptImporter { private static final Logger logger = Logger.getLogger(AS3ScriptImporter.class.getName()); - public int importScripts(As3ScriptReplacerInterface scriptReplacer, String scriptsFolder, List packs) throws InterruptedException { - return importScripts(scriptReplacer, scriptsFolder, packs, null); + public int importScripts(As3ScriptReplacerInterface scriptReplacer, String scriptsFolder, List packs, List dependencies) throws InterruptedException { + return importScripts(scriptReplacer, scriptsFolder, packs, null, dependencies); } - public int importScripts(As3ScriptReplacerInterface scriptReplacer, String scriptsFolder, List packs, ScriptImporterProgressListener listener) throws InterruptedException { + public int importScripts(As3ScriptReplacerInterface scriptReplacer, String scriptsFolder, List packs, ScriptImporterProgressListener listener, List dependencies) throws InterruptedException { if (!scriptsFolder.endsWith(File.separator)) { scriptsFolder += File.separator; } @@ -64,7 +64,7 @@ public class AS3ScriptImporter { String txt = Helper.readTextFile(fileName); try { - pack.abc.replaceScriptPack(scriptReplacer, pack, txt); + pack.abc.replaceScriptPack(scriptReplacer, pack, txt, dependencies); } catch (As3ScriptReplaceException asre) { for (As3ScriptReplaceExceptionItem item : asre.getExceptionItems()) { logger.log(Level.SEVERE, "%error% on line %line%, column %col%, file: %file%".replace("%error%", item.getMessage()).replace("%line%", Long.toString(item.getLine())).replace("%file%", fileName).replace("%col%", "" + item.getCol())); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/As3ScriptReplaceException.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/As3ScriptReplaceException.java index d5ab6526e..060889390 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/As3ScriptReplaceException.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/As3ScriptReplaceException.java @@ -27,12 +27,25 @@ public class As3ScriptReplaceException extends Exception { private List exceptionItems; + public As3ScriptReplaceException(String message) { + super(message); + } + public As3ScriptReplaceException(List exceptionItems) { + super("Script replace exception"); this.exceptionItems = exceptionItems; } + + public As3ScriptReplaceException(As3ScriptReplaceExceptionItem exceptionItem) { + this.exceptionItems = new ArrayList<>(); + this.exceptionItems.add(exceptionItem); + } @Override public String getMessage() { + if (exceptionItems.isEmpty()) { + return super.getMessage(); + } StringBuilder sb = new StringBuilder(); for (As3ScriptReplaceExceptionItem item : exceptionItems) { sb.append(item.toString()).append("\r\n"); @@ -43,15 +56,9 @@ public class As3ScriptReplaceException extends Exception { @Override public String getLocalizedMessage() { return getMessage(); - } - - public As3ScriptReplaceException(As3ScriptReplaceExceptionItem exceptionItem) { - this.exceptionItems = new ArrayList<>(); - this.exceptionItems.add(exceptionItem); - } + } public List getExceptionItems() { return exceptionItems; } - } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/As3ScriptReplacerInterface.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/As3ScriptReplacerInterface.java index 4e0b6a259..11bcb5e4d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/As3ScriptReplacerInterface.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/As3ScriptReplacerInterface.java @@ -16,16 +16,18 @@ */ package com.jpexs.decompiler.flash.importers; +import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.abc.ScriptPack; import java.io.IOException; +import java.util.List; public interface As3ScriptReplacerInterface { public boolean isAvailable(); - public void initReplacement(ScriptPack pack); + public void initReplacement(ScriptPack pack, List dependencies); - public void replaceScript(ScriptPack pack, String text) throws As3ScriptReplaceException, IOException, InterruptedException; + public void replaceScript(ScriptPack pack, String text, List dependencies) throws As3ScriptReplaceException, IOException, InterruptedException; public void deinitReplacement(ScriptPack pack); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/FFDecAs3ScriptReplacer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/FFDecAs3ScriptReplacer.java index fc267eff5..468a9922f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/FFDecAs3ScriptReplacer.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/FFDecAs3ScriptReplacer.java @@ -41,7 +41,7 @@ public class FFDecAs3ScriptReplacer implements As3ScriptReplacerInterface { } @Override - public void replaceScript(ScriptPack pack, String text) throws As3ScriptReplaceException, IOException, InterruptedException { + public void replaceScript(ScriptPack pack, String text, List dependencies) throws As3ScriptReplaceException, IOException, InterruptedException { ABC abc = pack.abc; SWF swf = pack.abc.getSwf(); String scriptName = pack.getPathScriptName() + ".as"; @@ -103,7 +103,7 @@ public class FFDecAs3ScriptReplacer implements As3ScriptReplacerInterface { } @Override - public void initReplacement(ScriptPack pack) { + public void initReplacement(ScriptPack pack, List dependencies) { //empty } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/DirectEditingTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/DirectEditingTest.java index 0545a73a7..7a5f3192a 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/DirectEditingTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/DirectEditingTest.java @@ -93,7 +93,7 @@ public class DirectEditingTest extends FileTestBase { try { en.toSource(swf.getAbcIndex(), htw, abc.script_info.get(s).traits.traits, new ConvertData(), ScriptExportMode.AS, false, false); String original = htw.toString(); - abc.replaceScriptPack(As3ScriptReplacerFactory.createFFDec() /*TODO: test the otherone*/, en, original); + abc.replaceScriptPack(As3ScriptReplacerFactory.createFFDec() /*TODO: test the otherone*/, en, original, new ArrayList<>()); } catch (As3ScriptReplaceException ex) { fail("Exception during decompilation - file: " + filePath + " class: " + classPathString + " msg:" + ex.getMessage(), ex); } catch (Exception ex) { diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/flexsdk/As3ScriptReplacerTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/flexsdk/As3ScriptReplacerTest.java index 9ef85a9e1..bfdb1d285 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/flexsdk/As3ScriptReplacerTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/flexsdk/As3ScriptReplacerTest.java @@ -56,7 +56,7 @@ public class As3ScriptReplacerTest { classNames.add("classes.TestClass1"); List packs = swf.getScriptPacksByClassNames(classNames); for (ScriptPack sp : packs) { - replacer.replaceScript(sp, replacement); + replacer.replaceScript(sp, replacement, new ArrayList<>()); return; } } diff --git a/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java b/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java index d8a0e696a..afa8a7298 100644 --- a/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java +++ b/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java @@ -4240,7 +4240,7 @@ public class CommandLineArgumentParser { } }; new AS2ScriptImporter().importScripts(scriptsFolder, swf.getASMs(true), listener); - new AS3ScriptImporter().importScripts(As3ScriptReplacerFactory.createByConfig(air), scriptsFolder, swf.getAS3Packs(), listener); + new AS3ScriptImporter().importScripts(As3ScriptReplacerFactory.createByConfig(air), scriptsFolder, swf.getAS3Packs(), listener, Main.getDependencies(swf)); try { try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(outFile))) { @@ -4395,7 +4395,7 @@ public class CommandLineArgumentParser { } try { - pack.abc.replaceScriptPack(scriptReplacer, pack, as); + pack.abc.replaceScriptPack(scriptReplacer, pack, as, Main.getDependencies(pack.abc.getSwf())); } catch (As3ScriptReplaceException asre) { for (As3ScriptReplaceExceptionItem item : asre.getExceptionItems()) { String r = "%error% on line %line%, column %col%, file: %file%".replace("%error%", "" + item.getMessage()); diff --git a/src/com/jpexs/decompiler/flash/gui/Main.java b/src/com/jpexs/decompiler/flash/gui/Main.java index 69c852b40..80f1514d2 100644 --- a/src/com/jpexs/decompiler/flash/gui/Main.java +++ b/src/com/jpexs/decompiler/flash/gui/Main.java @@ -1634,7 +1634,7 @@ public class Main { if (conf != null) { String abcDependencies = conf.getCustomData(CustomConfigurationKeys.KEY_ABC_DEPENDENCIES, ""); if (!abcDependencies.isEmpty()) { - String[] parts = (abcDependencies + LinkDialog.ABC_DEPS_SEPARATOR).split(Pattern.quote(LinkDialog.ABC_DEPS_SEPARATOR)); + String[] parts = (abcDependencies + Configuration.ABC_DEPS_SEPARATOR).split(Pattern.quote(Configuration.ABC_DEPS_SEPARATOR)); List preselectedNames = new ArrayList<>(); for (String part : parts) { if (!part.isEmpty()) { @@ -1642,6 +1642,9 @@ public class Main { } } swf.setAbcIndexDependencies(namesToSwfs(preselectedNames)); + if (mainFrame != null && mainFrame.getPanel() != null && mainFrame.getPanel().getABCPanel() != null) { + mainFrame.getPanel().getABCPanel().updateLinksLabel(); + } } } } @@ -3245,4 +3248,23 @@ public class Main { throw new RuntimeException("Problems with creating the log files"); } } + + public static List getDependencies(SWF swf) { + SwfSpecificCustomConfiguration conf = Configuration.getSwfSpecificCustomConfiguration(swf.getShortPathTitle()); + List dependencies = new ArrayList<>(); + if (conf != null) { + String abcDependencies = conf.getCustomData(CustomConfigurationKeys.KEY_ABC_DEPENDENCIES, ""); + if (!abcDependencies.isEmpty()) { + String[] parts = (abcDependencies + Configuration.ABC_DEPS_SEPARATOR).split(Pattern.quote(Configuration.ABC_DEPS_SEPARATOR)); + List preselectedNames = new ArrayList<>(); + for (String part : parts) { + if (!part.isEmpty()) { + preselectedNames.add(part); + } + } + dependencies = Main.namesToSwfs(preselectedNames); + } + } + return dependencies; + } } diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index b109da4ab..601c62660 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -3858,7 +3858,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se @Override public void scriptImportError() { } - } + }, + Main.getDependencies(swf) ); if (countAs3 > 0) { diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java index 189327e05..c79fe3b74 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java @@ -112,6 +112,7 @@ import java.util.Map; import java.util.Objects; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.regex.Pattern; import javax.swing.AbstractAction; import javax.swing.BorderFactory; import javax.swing.BoxLayout; @@ -188,6 +189,8 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener preselectedNames = new ArrayList<>(); for (String part : parts) { if (!part.isEmpty()) { @@ -145,7 +143,7 @@ public class LinkDialog extends JDialog { Map map = getSelectedSwfs(); SwfSpecificCustomConfiguration conf = Configuration.getOrCreateSwfSpecificCustomConfiguration(swf.getShortPathTitle()); String oldValue = conf.getCustomData(CustomConfigurationKeys.KEY_ABC_DEPENDENCIES, ""); - String newValue = String.join(ABC_DEPS_SEPARATOR, map.keySet()); + String newValue = String.join(Configuration.ABC_DEPS_SEPARATOR, map.keySet()); conf.setCustomData(CustomConfigurationKeys.KEY_ABC_DEPENDENCIES, newValue); List swfs = new ArrayList<>(map.values()); if (!Objects.equals(oldValue, newValue) || force) { diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties index 2e4abbc25..8288a9317 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties @@ -1234,4 +1234,6 @@ clipboard.clear.frame = Clear the frame clipboard debug.export = Export %name% debug.export.bytearray = Export byte array data... debug.import = Import to %name% -debug.import.bytearray = Import byte array data... \ No newline at end of file +debug.import.bytearray = Import byte array data... + +action.edit.flex = (Flex compiler) \ No newline at end of file diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_cs.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_cs.properties index 80a296022..a0b170a5e 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_cs.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_cs.properties @@ -1211,4 +1211,6 @@ clipboard.clear.frame = Vy\u010distit sn\u00edmkovou schr\u00e1nku debug.export = Exportovat %name% debug.export.bytearray = Exportovat byte array data... debug.import = Importovat do %name% -debug.import.bytearray = Importovat byte array data... \ No newline at end of file +debug.import.bytearray = Importovat byte array data... + +action.edit.flex = (kompil\u00e1tor Flex) \ No newline at end of file