Search in sources :

Example 41 with IN4JSProject

use of org.eclipse.n4js.projectModel.IN4JSProject in project n4js by eclipse.

the class ExternalLibraryBuilder method ensureDynamicDependenciesSetForWorkspaceProjects.

/**
 * Make sure the project description is available and cached for each workspace projects. This is important to avoid
 * performing a workspace operation (with no scheduling rule) when setting the dynamic project references for each
 * project.
 *
 * See: ProjectDescriptionLoadListener#updateProjectReferencesIfNecessary(IProject)
 */
private void ensureDynamicDependenciesSetForWorkspaceProjects() {
    for (IProject project : getWorkspace().getRoot().getProjects()) {
        org.eclipse.emf.common.util.URI uri = createPlatformResourceURI(project.getName(), true);
        IN4JSProject n4Project = core.findProject(uri).get();
        if (null != n4Project) {
            // This will trigger dynamic project reference update.
            n4Project.getProjectId();
        }
    }
}
Also used : URI(org.eclipse.emf.common.util.URI) IN4JSProject(org.eclipse.n4js.projectModel.IN4JSProject) IProject(org.eclipse.core.resources.IProject)

Example 42 with IN4JSProject

use of org.eclipse.n4js.projectModel.IN4JSProject in project n4js by eclipse.

the class ExternalLibraryBuilder method doPerformOperation.

private List<IProject> doPerformOperation(N4JSExternalProject[] projects, BuildOperation operation, IProgressMonitor monitor) {
    if (projects == null || projects.length == 0) {
        return Collections.emptyList();
    }
    ISchedulingRule rule = getRule();
    try {
        Job.getJobManager().beginRule(rule, monitor);
        VertexOrder<IN4JSProject> buildOrder = builtOrderComputer.getBuildOrder(projects);
        // wrap as Arrays.asList returns immutable list
        List<IN4JSProject> buildOrderList = new ArrayList<>(Arrays.asList(buildOrder.vertexes));
        if (BuildOperation.CLEAN.equals(operation)) {
            Collections.reverse(buildOrderList);
        }
        // Remove external projects that have the workspace counterpart if it is a build operation.
        if (BuildOperation.BUILD.equals(operation)) {
            for (Iterator<IN4JSProject> itr = buildOrderList.iterator(); itr.hasNext(); ) {
                if (hasWorkspaceCounterpart(itr.next())) {
                    itr.remove();
                }
            }
        }
        ensureDynamicDependenciesSetForWorkspaceProjects();
        String prefix = Strings.toFirstUpper(operation.toString().toLowerCase());
        String projectNames = getProjectNames(buildOrderList);
        LOGGER.info(prefix + "ing external libraries: " + projectNames);
        SubMonitor subMonitor = SubMonitor.convert(monitor, buildOrderList.size());
        List<IProject> actualBuildOrderList = new LinkedList<>();
        for (IN4JSProject project : buildOrderList) {
            LOGGER.info(prefix + "ing external library: " + project.getProjectId());
            // bold cast
            N4JSEclipseProject n4EclPrj = (N4JSEclipseProject) project;
            operation.run(this, n4EclPrj, subMonitor.newChild(1));
            IProject iProject = n4EclPrj.getProject();
            actualBuildOrderList.add(iProject);
        }
        return actualBuildOrderList;
    } finally {
        Job.getJobManager().endRule(rule);
    }
}
Also used : N4JSEclipseProject(org.eclipse.n4js.ui.internal.N4JSEclipseProject) IN4JSProject(org.eclipse.n4js.projectModel.IN4JSProject) ArrayList(java.util.ArrayList) SubMonitor(org.eclipse.core.runtime.SubMonitor) IProject(org.eclipse.core.resources.IProject) LinkedList(java.util.LinkedList) ISchedulingRule(org.eclipse.core.runtime.jobs.ISchedulingRule)

Example 43 with IN4JSProject

use of org.eclipse.n4js.projectModel.IN4JSProject in project n4js by eclipse.

the class N4JSProjectExplorerHelper method getProject.

/**
 * Returns with the corresponding {@link IN4JSProject N4JS project} for the given {@link IProject Eclipse project}
 * argument. Returns with {@code null} if
 * <ul>
 * <li>the {@code project} argument is {@code null} or</li>
 * <li>no {@link IN4JSProject#exists() existing} {@link IN4JSProject N4JS project} project can be found with the
 * desired project ID.</li>
 * </ul>
 *
 * @param project
 *            the searched project.
 * @return the N4JS project or {@code null} if such project does not exist.
 */
public IN4JSProject getProject(IProject project) {
    checkArgument(!(project instanceof ExternalProject), "Expected Eclipse workspace project. Got: " + project);
    if (null == project || !project.exists() || !project.isOpen()) {
        return null;
    }
    final String projectName = Strings.nullToEmpty(project.getName());
    final IN4JSProject n4Project = core.create(createPlatformResourceURI(projectName, true));
    if (null == n4Project || !n4Project.exists() || n4Project.isExternal()) {
        return null;
    }
    return n4Project;
}
Also used : ExternalProject(org.eclipse.n4js.utils.resources.ExternalProject) IN4JSProject(org.eclipse.n4js.projectModel.IN4JSProject)

Example 44 with IN4JSProject

use of org.eclipse.n4js.projectModel.IN4JSProject in project n4js by eclipse.

the class N4JSProjectExplorerHelper method getVirtualNodesForProject.

/**
 * Returns with an array of virtual {@link Node node} instances for the project that should be revealed in the
 * project explorer.
 *
 * @param project
 *            the workspace project.
 * @return an array of virtual nodes.
 */
public Node[] getVirtualNodesForProject(IProject project) {
    checkArgument(!(project instanceof ExternalProject), "Expected Eclipse workspace project. Got: " + project);
    if (null == project || !project.exists() || !project.isAccessible()) {
        return Node.EMPTY_NODES;
    }
    IN4JSProject n4Project = getProject(project);
    if (null == n4Project || !n4Project.exists() || n4Project.isExternal()) {
        return Node.EMPTY_NODES;
    }
    final Image image = ImageRef.LIB_PATH.asImage().get();
    final NamedNode rootNode = new NamedNode(project, "External Dependencies", image);
    Iterable<IN4JSProject> directDependencies = from(n4Project.getAllDirectDependencies()).filter(IN4JSProject.class);
    Iterable<IN4JSProject> runtimeLibraries = getExternalDependenciesOfType(directDependencies, RUNTIME_LIBRARY);
    if (!from(runtimeLibraries).isEmpty()) {
        Map<String, IN4JSProject> builtInRuntimeEnvironments = getBuiltInRuntimeEnvironments();
        Map<String, IN4JSProject> builtInRuntimeLibraries = getBuiltInRuntimeLibraries();
        Collection<IN4JSProject> libs = newHashSet();
        Collection<IN4JSProject> envs = newHashSet();
        for (IN4JSProject p : runtimeLibraries) {
            IN4JSProject dependency = builtInRuntimeLibraries.get(p.getProjectId());
            if (null != dependency) {
                libs.add(dependency);
            }
        }
        if (!libs.isEmpty()) {
            OUTER: for (IN4JSProject p : builtInRuntimeEnvironments.values()) {
                for (IN4JSProject providedLib : from(p.getProvidedRuntimeLibraries()).filter(IN4JSProject.class)) {
                    if (libs.contains(providedLib)) {
                        envs.add(p);
                        String extndedRuntimeEnvName = p.getExtendedRuntimeEnvironmentId().orNull();
                        if (null != extndedRuntimeEnvName) {
                            final IN4JSProject extension = builtInRuntimeEnvironments.get(extndedRuntimeEnvName);
                            if (null != extension) {
                                envs.add(extension);
                            }
                        }
                        continue OUTER;
                    }
                }
            }
        }
        NamedNode runtimeNode = new NamedNode(rootNode, "N4JS Runtime", image);
        if (!envs.isEmpty()) {
            NamedNode envsNode = new NamedNode(runtimeNode, "Runtime Environments", image);
            envsNode.addChild(from(envs).transform(p -> new BuiltInProjectNode(envsNode, p)));
            runtimeNode.addChild(envsNode);
        }
        if (!libs.isEmpty()) {
            NamedNode libsNode = new NamedNode(runtimeNode, "Runtime Libraries", image);
            libsNode.addChild(from(libs).transform(p -> new BuiltInProjectNode(libsNode, p)));
            runtimeNode.addChild(libsNode);
        }
        if (!Arrays2.isEmpty(runtimeNode.getChildren())) {
            rootNode.addChild(runtimeNode);
        }
    }
    Map<String, IN4JSProject> langProjects = getAvailableLangProjects();
    Map<String, IN4JSProject> mangelhaftProjects = getAvailableMangelhaftProjects();
    Map<String, IN4JSProject> npmProjects = getAvailableNpmProjects();
    Collection<IN4JSProject> requiredLangLibs = newHashSet();
    Collection<IN4JSProject> requiredMangelhaftLibs = newHashSet();
    Collection<IN4JSProject> requiredNpmLibs = newHashSet();
    for (IN4JSProject directDependecy : directDependencies) {
        if (directDependecy.exists() && directDependecy.isExternal()) {
            IN4JSProject externalDepenency = mangelhaftProjects.get(directDependecy.getProjectId());
            if (null != externalDepenency) {
                requiredMangelhaftLibs.add(externalDepenency);
            } else {
                externalDepenency = npmProjects.get(directDependecy.getProjectId());
                if (null != externalDepenency) {
                    requiredNpmLibs.add(externalDepenency);
                } else {
                    externalDepenency = langProjects.get(directDependecy.getProjectId());
                    if (null != externalDepenency) {
                        requiredLangLibs.add(externalDepenency);
                    }
                }
            }
        }
    }
    if (!requiredLangLibs.isEmpty()) {
        NamedNode langNode = new NamedNode(rootNode, EXTERNAL_LIBRARY_NAMES.get(LANG_CATEGORY), image);
        langNode.addChild(from(requiredLangLibs).transform(p -> new BuiltInProjectNode(langNode, p)));
        rootNode.addChild(langNode);
    }
    if (!requiredMangelhaftLibs.isEmpty()) {
        NamedNode mangNode = new NamedNode(rootNode, EXTERNAL_LIBRARY_NAMES.get(MANGELHAFT_CATEGORY), image);
        mangNode.addChild(from(requiredMangelhaftLibs).transform(p -> new BuiltInProjectNode(mangNode, p)));
        rootNode.addChild(mangNode);
    }
    if (!requiredNpmLibs.isEmpty()) {
        NamedNode npmNode = new NamedNode(rootNode, EXTERNAL_LIBRARY_NAMES.get(NPM_CATEGORY), image);
        npmNode.addChild(from(requiredNpmLibs).transform(p -> new BuiltInProjectNode(npmNode, p)));
        rootNode.addChild(npmNode);
    }
    return Arrays2.isEmpty(rootNode.getChildren()) ? new Node[0] : new Node[] { rootNode };
}
Also used : IFolder(org.eclipse.core.resources.IFolder) ExternalLibraryWorkspace(org.eclipse.n4js.external.ExternalLibraryWorkspace) LANG_CATEGORY(org.eclipse.n4js.external.libraries.ExternalLibrariesActivator.LANG_CATEGORY) Inject(com.google.inject.Inject) Image(org.eclipse.swt.graphics.Image) Maps.uniqueIndex(com.google.common.collect.Maps.uniqueIndex) MANGELHAFT_CATEGORY(org.eclipse.n4js.external.libraries.ExternalLibrariesActivator.MANGELHAFT_CATEGORY) IN4JSCore(org.eclipse.n4js.projectModel.IN4JSCore) Arrays2(org.eclipse.n4js.utils.collections.Arrays2) Strings(com.google.common.base.Strings) Preconditions.checkArgument(com.google.common.base.Preconditions.checkArgument) RUNTIME_ENVIRONMENT(org.eclipse.n4js.n4mf.ProjectType.RUNTIME_ENVIRONMENT) IProject(org.eclipse.core.resources.IProject) FluentIterable.from(com.google.common.collect.FluentIterable.from) Map(java.util.Map) EXTERNAL_LIBRARIES_SUPPLIER(org.eclipse.n4js.external.libraries.ExternalLibrariesActivator.EXTERNAL_LIBRARIES_SUPPLIER) Sets.newHashSet(com.google.common.collect.Sets.newHashSet) IExternalResource(org.eclipse.n4js.utils.resources.IExternalResource) URI(java.net.URI) EnumSet(java.util.EnumSet) Collection(java.util.Collection) IN4JSProject(org.eclipse.n4js.projectModel.IN4JSProject) RUNTIME_CATEGORY(org.eclipse.n4js.external.libraries.ExternalLibrariesActivator.RUNTIME_CATEGORY) EXTERNAL_LIBRARY_NAMES(org.eclipse.n4js.external.libraries.ExternalLibrariesActivator.EXTERNAL_LIBRARY_NAMES) ExternalProject(org.eclipse.n4js.utils.resources.ExternalProject) URI.createFileURI(org.eclipse.emf.common.util.URI.createFileURI) ProjectType(org.eclipse.n4js.n4mf.ProjectType) URI.createPlatformResourceURI(org.eclipse.emf.common.util.URI.createPlatformResourceURI) Collections(java.util.Collections) ImageRef(org.eclipse.n4js.ui.ImageDescriptorCache.ImageRef) NPM_CATEGORY(org.eclipse.n4js.external.libraries.ExternalLibrariesActivator.NPM_CATEGORY) RUNTIME_LIBRARY(org.eclipse.n4js.n4mf.ProjectType.RUNTIME_LIBRARY) Singleton(com.google.inject.Singleton) ExternalProject(org.eclipse.n4js.utils.resources.ExternalProject) IN4JSProject(org.eclipse.n4js.projectModel.IN4JSProject) Image(org.eclipse.swt.graphics.Image)

Example 45 with IN4JSProject

use of org.eclipse.n4js.projectModel.IN4JSProject in project n4js by eclipse.

the class ExternalProjectCacheLoader method load.

@Override
public Optional<Pair<N4JSExternalProject, ProjectDescription>> load(final URI rootLocation) throws Exception {
    ProjectDescription projectDescription = packageManager.loadManifestFromProjectRoot(rootLocation);
    if (null != projectDescription) {
        File projectRoot = new File(rootLocation.toFileString());
        ExternalProject p = new ExternalProject(projectRoot, NATURE_ID, BUILDER_ID);
        IN4JSProject pp = new N4JSEclipseProject(p, rootLocation, model);
        N4JSExternalProject ppp = new N4JSExternalProject(projectRoot, pp);
        return Optional.of(Tuples.create(ppp, projectDescription));
    }
    return Optional.absent();
}
Also used : N4JSExternalProject(org.eclipse.n4js.external.N4JSExternalProject) N4JSExternalProject(org.eclipse.n4js.external.N4JSExternalProject) ExternalProject(org.eclipse.n4js.utils.resources.ExternalProject) IN4JSProject(org.eclipse.n4js.projectModel.IN4JSProject) ProjectDescription(org.eclipse.n4js.n4mf.ProjectDescription) File(java.io.File)

Aggregations

IN4JSProject (org.eclipse.n4js.projectModel.IN4JSProject)93 URI (org.eclipse.emf.common.util.URI)32 Test (org.junit.Test)18 ArrayList (java.util.ArrayList)13 List (java.util.List)11 Inject (com.google.inject.Inject)9 Map (java.util.Map)9 IProject (org.eclipse.core.resources.IProject)9 IN4JSCore (org.eclipse.n4js.projectModel.IN4JSCore)9 Optional (com.google.common.base.Optional)7 File (java.io.File)7 Collection (java.util.Collection)7 HashSet (java.util.HashSet)7 ResourceSet (org.eclipse.emf.ecore.resource.ResourceSet)7 Set (java.util.Set)6 Collectors (java.util.stream.Collectors)6 IOException (java.io.IOException)5 IN4JSArchive (org.eclipse.n4js.projectModel.IN4JSArchive)5 IN4JSSourceContainer (org.eclipse.n4js.projectModel.IN4JSSourceContainer)5 FluentIterable.from (com.google.common.collect.FluentIterable.from)4