package com.intellij.flex.compiler.flex4;
import com.intellij.flex.compiler.SdkSpecificHandler;
import flash.localization.LocalizationManager;
import flash.localization.ResourceBundleLocalizer;
import flex2.compiler.CompilerAPI;
import flex2.compiler.Logger;
import flex2.compiler.common.CompilerConfiguration;
import flex2.compiler.common.Configuration;
import flex2.compiler.common.DefaultsConfigurator;
import flex2.compiler.config.ConfigurationBuffer;
import flex2.compiler.config.ConfigurationException;
import flex2.compiler.util.ThreadLocalToolkit;
import flex2.tools.CommandLineConfiguration;
import flex2.tools.Compc;
import flex2.tools.CompcConfiguration;
import flex2.tools.Mxmlc;
import macromedia.asc.util.ContextStatics;
import java.io.IOException;
public class Flex4Handler extends SdkSpecificHandler {
public void initThreadLocals(final Logger logger) {
super.initThreadLocals(logger);
CompilerAPI.useAS3();
CompilerAPI.usePathResolver();
final LocalizationManager localizationManager = new LocalizationManager();
localizationManager.addLocalizer(new ResourceBundleLocalizer());
ThreadLocalToolkit.setLocalizationManager(localizationManager);
ThreadLocalToolkit.setLogger(logger);
}
public void cleanThreadLocals() {
CompilerAPI.removePathResolver();
ThreadLocalToolkit.setLogger(null);
ThreadLocalToolkit.setLocalizationManager(null);
super.cleanThreadLocals();
}
public boolean isOmitTrace(final boolean isSwf, final String[] params) {
try {
final Configuration configuration = processConfiguration(isSwf, params);
final CompilerConfiguration cc = configuration.getCompilerConfiguration();
return !cc.debug() && cc.omitTraceStatements();
} catch (Throwable t) {
// if API changed
return false;
}
}
/**
* similar to flex2.tools.oem.internal.LibraryCompiler.getCompcConfiguration(String[] args)
* or flex2.tools.oem.internal.ApplicationCompiler.getCommandLineConfiguration(String[] args)
*/
private Configuration processConfiguration(final boolean isSwf, final String[] params) throws ConfigurationException, IOException {
if (isSwf) {
final ConfigurationBuffer cfgbuf = new ConfigurationBuffer(CommandLineConfiguration.class, CommandLineConfiguration.getAliases());
cfgbuf.setDefaultVar("file-specs");
DefaultsConfigurator.loadDefaults(cfgbuf);
return Mxmlc.processConfiguration(ThreadLocalToolkit.getLocalizationManager(), "mxmlc", params, cfgbuf,
CommandLineConfiguration.class, "file-specs");
} else {
final ConfigurationBuffer cfgbuf = new ConfigurationBuffer(CompcConfiguration.class, CompcConfiguration.getAliases());
cfgbuf.setDefaultVar("include-classes");
DefaultsConfigurator.loadCompcDefaults(cfgbuf);
return Mxmlc.processConfiguration(ThreadLocalToolkit.getLocalizationManager(), "compc", params, cfgbuf,
CompcConfiguration.class, "include-classes");
}
}
public void setupOmitTraceOption(final boolean omitTrace) {
try {
ContextStatics.omitTrace = omitTrace;
} catch (Throwable t) {/* if API changed */}
}
public void compileSwf(String[] args) {
Mxmlc.mxmlc(args);
}
public void compileSwc(String[] args) {
Compc.compc(args);
}
}