Search in sources :

Example 1 with NodeModulesFolder

use of org.eclipse.n4js.utils.NodeModulesDiscoveryHelper.NodeModulesFolder in project n4js by eclipse.

the class ProjectDiscoveryHelper method collectProjectDependencies.

/**
 * Collects all (transitive) dependencies of the given project
 */
private void collectProjectDependencies(Set<Path> allProjectDirs, Path projectDir, Map<Path, ProjectDescription> pdCache, Set<Path> dependencies) {
    NodeModulesFolder nodeModulesFolder = nodeModulesDiscoveryHelper.getNodeModulesFolder(projectDir, pdCache);
    LinkedHashSet<Path> workList = new LinkedHashSet<>();
    workList.add(projectDir);
    while (!workList.isEmpty()) {
        Iterator<Path> iterator = workList.iterator();
        Path nextProject = iterator.next();
        iterator.remove();
        findDependencies(allProjectDirs, nextProject, nodeModulesFolder, pdCache, workList, dependencies);
    }
}
Also used : Path(java.nio.file.Path) LinkedHashSet(java.util.LinkedHashSet) NodeModulesFolder(org.eclipse.n4js.utils.NodeModulesDiscoveryHelper.NodeModulesFolder)

Example 2 with NodeModulesFolder

use of org.eclipse.n4js.utils.NodeModulesDiscoveryHelper.NodeModulesFolder in project n4js by eclipse.

the class SemanticDependencySupplier method computePackageName2ProjectIdMap.

/**
 * Computes a map from package names to project ids. The context of the given project is taken into account, i.e. in
 * case there exist multiple projects in the workspace with the same package name, the id of that project is mapped
 * that would bind to the given project as a dependency.
 */
public Map<String, String> computePackageName2ProjectIdMap(N4JSWorkspaceConfig workspace, ProjectDescription projectDescription, Path relatedRootLocation, Iterable<String> packageNames) {
    Path projectLocation = projectDescription.getLocation().toPath();
    NodeModulesFolder nodeModulesFolder = nodeModulesDiscoveryHelper.getNodeModulesFolder(projectLocation);
    Map<String, String> packageName2projectIds = new HashMap<>();
    for (String packageName : packageNames) {
        Set<N4JSProjectConfig> candidates = workspace.findProjectsByPackageName(packageName);
        String qualifiedName = getQualifiedName(relatedRootLocation, projectLocation, candidates, nodeModulesFolder, packageName);
        qualifiedName = qualifiedName == null ? packageName : qualifiedName;
        packageName2projectIds.put(packageName, qualifiedName);
    }
    return packageName2projectIds;
}
Also used : Path(java.nio.file.Path) NodeModulesFolder(org.eclipse.n4js.utils.NodeModulesDiscoveryHelper.NodeModulesFolder) HashMap(java.util.HashMap) N4JSProjectConfig(org.eclipse.n4js.workspace.N4JSProjectConfig)

Example 3 with NodeModulesFolder

use of org.eclipse.n4js.utils.NodeModulesDiscoveryHelper.NodeModulesFolder in project n4js by eclipse.

the class ProjectDiscoveryHelper method collectAllProjects.

private void collectAllProjects(Path wsRoot, Set<Path> allProjectDirs, Map<Path, ProjectDescription> pdCache) {
    NodeModulesFolder nodeModulesFolder = nodeModulesDiscoveryHelper.getNodeModulesFolder(wsRoot, pdCache);
    if (nodeModulesFolder == null) {
        // Assume side-by-side case (neither NPM nor Yarn project)
        collectProjects(wsRoot, null, true, pdCache, allProjectDirs);
        if (allProjectDirs.isEmpty()) {
            // no project found => not side-by-side case: Search in parent directories
            Path projectRoot = getProjectRootOrUnchanged(wsRoot);
            nodeModulesFolder = nodeModulesDiscoveryHelper.getNodeModulesFolder(projectRoot, pdCache);
        } else {
            // check if the side-by-side case is actually a yarn case
            Path oneProject = allProjectDirs.iterator().next();
            NodeModulesFolder yarnProject = nodeModulesDiscoveryHelper.getNodeModulesFolder(oneProject, pdCache);
            if (yarnProject.isYarnWorkspaceMember) {
                Path yarnProjectDir = yarnProject.workspaceNodeModulesFolder.getParentFile().toPath();
                collectYarnWorkspaceProjects(yarnProjectDir, pdCache, allProjectDirs);
            }
        }
    }
    if (nodeModulesFolder != null) {
        if (nodeModulesFolder.isYarnWorkspaceRoot || nodeModulesFolder.isYarnWorkspaceMember) {
            // Is Yarn project
            // use projects referenced in packages
            Path yarnProjectDir = nodeModulesFolder.workspaceNodeModulesFolder.getParentFile().toPath();
            collectYarnWorkspaceProjects(yarnProjectDir, pdCache, allProjectDirs);
        } else {
            // Is a stand-alone npm project
            addIfNotPlainjs(wsRoot, wsRoot, pdCache, allProjectDirs);
        }
    }
}
Also used : Path(java.nio.file.Path) NodeModulesFolder(org.eclipse.n4js.utils.NodeModulesDiscoveryHelper.NodeModulesFolder)

Aggregations

Path (java.nio.file.Path)3 NodeModulesFolder (org.eclipse.n4js.utils.NodeModulesDiscoveryHelper.NodeModulesFolder)3 HashMap (java.util.HashMap)1 LinkedHashSet (java.util.LinkedHashSet)1 N4JSProjectConfig (org.eclipse.n4js.workspace.N4JSProjectConfig)1