Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjay2018-06-25 08:50:53 +0000
committerJay Arthanareeswaran2018-07-09 05:01:46 +0000
commit96369c32121f4eab99beb458982213461d26b0af (patch)
treebaac09421fdc3a0deb8363f9892c0049c6809746
parentd4140a851c1e057849fd7afc7d8049d16ce1e368 (diff)
downloadeclipse.jdt.core-96369c32121f4eab99beb458982213461d26b0af.tar.gz
eclipse.jdt.core-96369c32121f4eab99beb458982213461d26b0af.tar.xz
eclipse.jdt.core-96369c32121f4eab99beb458982213461d26b0af.zip
Bug 534884 - [9] Transitive project dependencies are missing whenI20180709-2000
launching on a modular JVM Change-Id: I4ca1d89b57cb0ebc433639b9d4c1d8496aac68e8 Signed-off-by: jay <jarthana@in.ibm.com>
-rw-r--r--org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaProject.java2
-rw-r--r--org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java41
2 files changed, 42 insertions, 1 deletions
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaProject.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaProject.java
index 7c38d53d7d..5629858d0b 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaProject.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaProject.java
@@ -617,7 +617,7 @@ public interface IJavaProject extends IParent, IJavaElement, IOpenable {
* In the latter case the corresponding module description of the
* location referenced by that classpath entry is returned.
*
- * @return the <code>IModule</code> this project represents.
+ * @return the <code>IModuleDescription</code> this project represents.
* @exception JavaModelException if this element does not exist or if an
* exception occurs while accessing its corresponding resource
* @since 3.14
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java
index a6f4aaac59..1c65f7c330 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java
@@ -567,6 +567,47 @@ public class JavaProject
} else {
rootIDs.add(rootID);
}
+ } else {
+ if (entry.getEntryKind() == IClasspathEntry.CPE_PROJECT) {
+ computeExpandedClasspathFromModularProject(rootIDs, accumulatedEntries, excludeTestCode, workspaceRoot);
+ }
+ }
+ }
+ }
+
+ private void computeExpandedClasspathFromModularProject(HashSet rootIDs,
+ ObjectVector accumulatedEntries, boolean excludeTestCode, IWorkspaceRoot workspaceRoot)
+ throws JavaModelException {
+ IModuleDescription referring = this.getModuleDescription();
+ if (referring == null)
+ return;
+ IClasspathEntry[] resolvedClasspath = getResolvedClasspath();
+ for (IClasspathEntry iEntry : resolvedClasspath) {
+ ClasspathEntry entry = (ClasspathEntry) iEntry;
+ if (iEntry.getEntryKind() == IClasspathEntry.CPE_PROJECT && entry.isModular()) {
+ String rootID = entry.rootID();
+ if (rootIDs.contains(rootID)) {
+ continue;
+ }
+ rootIDs.add(rootID);
+ IModuleDescription referred = null;
+ IResource member = workspaceRoot.findMember(iEntry.getPath());
+ JavaProject referredProject = null;
+ if (member != null && member.getType() == IResource.PROJECT) {
+ IProject projRsc = (IProject) member;
+ referredProject = (JavaProject) JavaCore.create(projRsc);
+ referred = referredProject.getModuleDescription();
+ if (referred != null) {
+ IModule module = NameLookup.getModuleDescriptionInfo(referring);
+ IModuleReference[] requires = module.requires();
+ for (IModuleReference req : requires) {
+ if (CharOperation.equals(req.name(), referred.getElementName().toCharArray())) {
+ accumulatedEntries.add(entry);
+ }
+ }
+ }
+ referredProject.computeExpandedClasspathFromModularProject(rootIDs, accumulatedEntries, excludeTestCode, workspaceRoot);
+ }
}
}
}

Back to the top