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);
}
}
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;
}
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);
}
}
}
Aggregations