use of org.apache.flex.compiler.config.Configurator in project vscode-nextgenas by BowlerHatLLC.
the class ActionScriptTextDocumentService method getProject.
private FlexProject getProject() {
clearInvisibleCompilationUnits();
refreshProjectOptions();
if (currentProjectOptions == null) {
cleanupCurrentProject();
return null;
}
FlexProject project = null;
if (currentProject == null) {
project = new FlexProject(new Workspace());
project.setProblems(new ArrayList<>());
currentWorkspace = project.getWorkspace();
fileSpecGetter = new LanguageServerFileSpecGetter(currentWorkspace, sourceByPath);
} else {
//clear all old problems because they won't be cleared automatically
currentProject.getProblems().clear();
return currentProject;
}
CompilerOptions compilerOptions = currentProjectOptions.compilerOptions;
Configurator configurator = null;
if (isJSConfig(currentProjectOptions)) {
configurator = new Configurator(JSGoogConfiguration.class);
} else //swf only
{
configurator = new Configurator(Configuration.class);
}
configurator.setToken(TOKEN_CONFIGNAME, currentProjectOptions.config);
ProjectType type = currentProjectOptions.type;
String[] files = currentProjectOptions.files;
String additionalOptions = currentProjectOptions.additionalOptions;
ArrayList<String> combinedOptions = new ArrayList<>();
if (compilerOptions.swfExternalLibraryPath != null) {
//this isn't available in the configurator, so add it like the additionalOptions
appendPathCompilerOptions("--swf-external-library-path+=", compilerOptions.swfExternalLibraryPath, combinedOptions);
}
if (compilerOptions.swfLibraryPath != null) {
appendPathCompilerOptions("--swf-library-path+=", compilerOptions.swfLibraryPath, combinedOptions);
}
if (compilerOptions.jsExternalLibraryPath != null) {
appendPathCompilerOptions("--js-external-library-path+=", compilerOptions.jsExternalLibraryPath, combinedOptions);
}
if (compilerOptions.jsLibraryPath != null) {
appendPathCompilerOptions("--js-library-path+=", compilerOptions.jsLibraryPath, combinedOptions);
}
if (additionalOptions != null) {
//split the additionalOptions into separate values so that we can
//pass them in as String[], as the compiler expects.
Matcher matcher = additionalOptionsPattern.matcher(additionalOptions);
while (matcher.find()) {
String option = matcher.group();
combinedOptions.add(option);
}
}
//not all framework SDKs support a theme (such as Adobe's AIR SDK), so
//we clear it for the editor to avoid a missing spark.css file.
combinedOptions.add("-theme=");
if (type.equals(ProjectType.LIB)) {
configurator.setConfiguration(combinedOptions.toArray(new String[combinedOptions.size()]), ICompilerSettingsConstants.INCLUDE_CLASSES_VAR, false);
} else // app
{
combinedOptions.addAll(Arrays.asList(files));
configurator.setConfiguration(combinedOptions.toArray(new String[combinedOptions.size()]), ICompilerSettingsConstants.FILE_SPECS_VAR);
}
//this needs to be set before applyToProject() so that it's in the
//configuration buffer before addExternalLibraryPath() is called
configurator.setExcludeNativeJSLibraries(false);
boolean result = configurator.applyToProject(project);
Collection<ICompilerProblem> problems = configurator.getConfigurationProblems();
if (problems.size() > 0) {
Map<URI, PublishDiagnosticsParams> filesMap = new HashMap<>();
for (ICompilerProblem problem : problems) {
URI uri = Paths.get(problem.getSourcePath()).toUri();
configProblemTracker.trackFileWithProblems(uri);
PublishDiagnosticsParams params = null;
if (filesMap.containsKey(uri)) {
params = filesMap.get(uri);
} else {
params = new PublishDiagnosticsParams();
params.setUri(uri.toString());
params.setDiagnostics(new ArrayList<>());
filesMap.put(uri, params);
}
addCompilerProblem(problem, params);
}
if (languageClient != null) {
filesMap.values().forEach(languageClient::publishDiagnostics);
}
//we don't return null if result is not false
}
configProblemTracker.cleanUpStaleProblems();
if (!result) {
return null;
}
//because setting some values checks the cfgbuf
if (compilerOptions.sourcePath != null) {
configurator.addSourcePath(compilerOptions.sourcePath);
}
if (compilerOptions.libraryPath != null) {
configurator.addLibraryPath(compilerOptions.libraryPath);
}
if (compilerOptions.externalLibraryPath != null) {
configurator.addExternalLibraryPath(compilerOptions.externalLibraryPath);
}
if (compilerOptions.namespaceMappings != null) {
configurator.setNamespaceMappings(compilerOptions.namespaceMappings);
}
if (compilerOptions.defines != null) {
configurator.setDefineDirectives(compilerOptions.defines);
}
if (currentProjectOptions.type.equals(ProjectType.LIB)) {
if (compilerOptions.includeClasses != null) {
configurator.setIncludeClasses(compilerOptions.includeClasses);
}
if (compilerOptions.includeNamespaces != null) {
configurator.setIncludeNamespaces(compilerOptions.includeNamespaces);
}
if (compilerOptions.includeSources != null) {
configurator.setIncludeSources(compilerOptions.includeSources);
}
}
configurator.enableDebugging(compilerOptions.debug, null);
configurator.showActionScriptWarnings(compilerOptions.warnings);
result = configurator.applyToProject(project);
if (!result) {
return null;
}
ITarget.TargetType targetType = ITarget.TargetType.SWF;
if (currentProjectOptions.type.equals(ProjectType.LIB)) {
targetType = ITarget.TargetType.SWC;
}
ITargetSettings targetSettings = configurator.getTargetSettings(targetType);
if (targetSettings == null) {
System.err.println("Failed to get compile settings for +configname=" + currentProjectOptions.config + ".");
return null;
}
project.setTargetSettings(targetSettings);
return project;
}
Aggregations