diff options
author | jay | 2018-06-25 08:50:53 +0000 |
---|---|---|
committer | Jay Arthanareeswaran | 2018-07-09 05:01:46 +0000 |
commit | 96369c32121f4eab99beb458982213461d26b0af (patch) | |
tree | baac09421fdc3a0deb8363f9892c0049c6809746 | |
parent | d4140a851c1e057849fd7afc7d8049d16ce1e368 (diff) | |
download | eclipse.jdt.core-96369c32121f4eab99beb458982213461d26b0af.tar.gz eclipse.jdt.core-96369c32121f4eab99beb458982213461d26b0af.tar.xz eclipse.jdt.core-96369c32121f4eab99beb458982213461d26b0af.zip |
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.java | 2 | ||||
-rw-r--r-- | org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java | 41 |
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); + } } } } |