package com.intellij.flex.compiler;
import flex2.tools.oem.PathResolver;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class SdkFilesResolver implements PathResolver {
private static final String FLEXLIB_PATH;
static {
// See #flex2.tools.Compiler.processConfiguration(): System.getProperty("application.home") + File.separator + "frameworks"
final String appHome = System.getProperty("application.home");
FLEXLIB_PATH = appHome == null ? "." : appHome + File.separator + "frameworks";
}
// slashes are messed up, but that's how it works.
// see DefaultsConfigurator.java: "${flexlib}/${configname}-config.xml"
private static final String FLEX_CONFIG_PATH = FLEXLIB_PATH + "/flex-config.xml";
private static final String AIR_CONFIG_PATH = FLEXLIB_PATH + "/air-config.xml";
private static File fakeConfigFile;
public static SdkFilesResolver INSTANCE = new SdkFilesResolver();
private SdkFilesResolver() {
}
public File resolve(final String path) {
/*
if (FLEX_CONFIG_PATH.equals(path) || AIR_CONFIG_PATH.equals(path)) {
// We need not to show real flex-config.xml file, otherwise stupid compiler reads options from there and overrides actual options
//final File configFile = new File(path);
//if (configFile.exists()) {
// return configFile;
//}
synchronized (SdkFilesResolver.class) {
if (fakeConfigFile == null) {
fakeConfigFile = createFakeConfigFile();
}
return fakeConfigFile;
}
}
*/
final File file = new File(FLEXLIB_PATH, path);
if (file.exists()) {
return file;
}
return null;
}
private static File createFakeConfigFile() {
try {
final File file = File.createTempFile("fake-config", ".xml");
file.deleteOnExit();
final FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write("<flex-config/>".getBytes());
fileOutputStream.flush();
fileOutputStream.close();
return file;
}
catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static void removeTempFile() {
if (fakeConfigFile != null) {
fakeConfigFile.delete();
}
}
}