Search in sources :

Example 1 with ProjectType

use of com.nextgenactionscript.vscode.project.ProjectType 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;
}
Also used : JSGoogConfiguration(org.apache.flex.compiler.internal.driver.js.goog.JSGoogConfiguration) Configuration(org.apache.flex.compiler.config.Configuration) Matcher(java.util.regex.Matcher) HashMap(java.util.HashMap) Configurator(org.apache.flex.compiler.config.Configurator) ArrayList(java.util.ArrayList) ITargetSettings(org.apache.flex.compiler.targets.ITargetSettings) URI(java.net.URI) JSGoogConfiguration(org.apache.flex.compiler.internal.driver.js.goog.JSGoogConfiguration) FlexProject(org.apache.flex.compiler.internal.projects.FlexProject) ITarget(org.apache.flex.compiler.targets.ITarget) ICompilerProblem(org.apache.flex.compiler.problems.ICompilerProblem) ProjectType(com.nextgenactionscript.vscode.project.ProjectType) CompilerOptions(com.nextgenactionscript.vscode.project.CompilerOptions) PublishDiagnosticsParams(org.eclipse.lsp4j.PublishDiagnosticsParams) Workspace(org.apache.flex.compiler.internal.workspaces.Workspace) IWorkspace(org.apache.flex.compiler.workspaces.IWorkspace)

Aggregations

CompilerOptions (com.nextgenactionscript.vscode.project.CompilerOptions)1 ProjectType (com.nextgenactionscript.vscode.project.ProjectType)1 URI (java.net.URI)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 Matcher (java.util.regex.Matcher)1 Configuration (org.apache.flex.compiler.config.Configuration)1 Configurator (org.apache.flex.compiler.config.Configurator)1 JSGoogConfiguration (org.apache.flex.compiler.internal.driver.js.goog.JSGoogConfiguration)1 FlexProject (org.apache.flex.compiler.internal.projects.FlexProject)1 Workspace (org.apache.flex.compiler.internal.workspaces.Workspace)1 ICompilerProblem (org.apache.flex.compiler.problems.ICompilerProblem)1 ITarget (org.apache.flex.compiler.targets.ITarget)1 ITargetSettings (org.apache.flex.compiler.targets.ITargetSettings)1 IWorkspace (org.apache.flex.compiler.workspaces.IWorkspace)1 PublishDiagnosticsParams (org.eclipse.lsp4j.PublishDiagnosticsParams)1