JaroslavTulach closed pull request #1051: Adding support for JDK sources from
the checkout attached to JDK plat…
URL: https://github.com/apache/incubator-netbeans/pull/1051
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ClassPathProviderImpl.java
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ClassPathProviderImpl.java
index 5319740266..2c6a943cf8 100644
---
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ClassPathProviderImpl.java
+++
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ClassPathProviderImpl.java
@@ -44,6 +44,7 @@
import org.netbeans.api.project.libraries.LibraryManager;
import org.netbeans.modules.java.openjdk.project.JDKProject.Root;
import org.netbeans.modules.java.openjdk.project.JDKProject.RootKind;
+import
org.netbeans.modules.java.openjdk.project.ModuleDescription.ModuleRepository;
import org.netbeans.modules.parsing.spi.indexing.PathRecognizerRegistration;
import org.netbeans.spi.java.classpath.ClassPathImplementation;
import org.netbeans.spi.java.classpath.ClassPathProvider;
@@ -76,8 +77,9 @@
private final ClassPath sourceCP;
private final ClassPath testsCompileCP;
private final ClassPath testsRegCP;
+ private final ModuleRepository repository;
- public ClassPathProviderImpl(JDKProject project) {
+ public ClassPathProviderImpl(JDKProject project, ModuleRepository
repository) {
bootCP = ClassPath.EMPTY;
moduleBootCP = ClassPath.EMPTY;
@@ -182,6 +184,7 @@ public ClassPathProviderImpl(JDKProject project) {
}
testsCompileCP =
ClassPathSupport.createClassPath(testCompileRoots.toArray(new URL[0]));
testsRegCP = ClassPathSupport.createClassPath(testsRegRoots);
+ this.repository = repository;
}
private static final String[] TEST_LIBRARIES = new String[] {"testng",
"junit_4"};
@@ -193,6 +196,10 @@ private static URL projectDir2FakeTarget(FileObject
projectDir) throws Malformed
@Override
public ClassPath findClassPath(FileObject file, String type) {
if (sourceCP.findOwnerRoot(file) != null) {
+ if (!repository.isAnyProjectOpened()) {
+ //if no project is open, java.base may not be indexed.
Fallback on default queries:
+ return null;
+ }
if (ClassPath.BOOT.equals(type)) {
return bootCP;
} else if (JavaClassPathConstants.MODULE_BOOT_PATH.equals(type)) {
diff --git
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/JDKProject.java
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/JDKProject.java
index 74327efd6d..ff1065ec24 100644
---
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/JDKProject.java
+++
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/JDKProject.java
@@ -203,10 +203,10 @@ public JDKProject(FileObject projectDir, @NullAllowed
ModuleRepository moduleRep
}
- ClassPathProviderImpl cpp = new ClassPathProviderImpl(this);
+ ClassPathProviderImpl cpp = new ClassPathProviderImpl(this,
moduleRepository);
Lookup base = Lookups.fixed(cpp,
- new OpenProjectHookImpl(cpp),
+ new OpenProjectHookImpl(this, cpp,
moduleRepository),
new SourcesImpl(this),
new LogicalViewProviderImpl(this),
new SourceLevelQueryImpl(jdkRoot),
diff --git
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ModuleDescription.java
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ModuleDescription.java
index 92e48a8e2d..7be9e84a26 100644
---
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ModuleDescription.java
+++
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ModuleDescription.java
@@ -29,6 +29,7 @@
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
@@ -42,6 +43,7 @@
import org.netbeans.api.lexer.InputAttributes;
import org.netbeans.api.lexer.TokenHierarchy;
import org.netbeans.api.lexer.TokenSequence;
+import org.netbeans.api.project.Project;
import org.openide.filesystems.FileObject;
import org.openide.util.Pair;
import org.openide.xml.XMLUtil;
@@ -334,6 +336,7 @@ static ModuleDescription parseModuleInfo(Reader r) throws
IOException {
}
public static class ModuleRepository {
+ private final Set<Project> openProjects = new HashSet<>();
private final FileObject root;
private final boolean hasModuleInfos;
private final boolean consolidatedRepository;
@@ -451,6 +454,18 @@ private void allDependencies(ModuleDescription module,
Set<String> result, boole
public boolean isConsolidatedRepo() {
return consolidatedRepository;
}
+
+ public synchronized void projectOpened(Project opened) {
+ this.openProjects.add(opened);
+ }
+
+ public synchronized void projectClosed(Project closed) {
+ this.openProjects.remove(closed);
+ }
+
+ public synchronized boolean isAnyProjectOpened() {
+ return !this.openProjects.isEmpty();
+ }
}
public static final class Dependency {
diff --git
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/OpenProjectHookImpl.java
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/OpenProjectHookImpl.java
index adf858489b..863080013f 100644
---
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/OpenProjectHookImpl.java
+++
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/OpenProjectHookImpl.java
@@ -18,6 +18,7 @@
*/
package org.netbeans.modules.java.openjdk.project;
+import
org.netbeans.modules.java.openjdk.project.ModuleDescription.ModuleRepository;
import org.netbeans.spi.project.ui.ProjectOpenedHook;
/**
@@ -26,20 +27,30 @@
*/
public class OpenProjectHookImpl extends ProjectOpenedHook {
+ private final JDKProject project;
private final ClassPathProviderImpl cpp;
+ private final ModuleRepository repository;
- public OpenProjectHookImpl(ClassPathProviderImpl cpp) {
+ public OpenProjectHookImpl(JDKProject project, ClassPathProviderImpl cpp,
ModuleRepository repository) {
+ this.project = project;
this.cpp = cpp;
+ this.repository = repository;
}
@Override
protected void projectOpened() {
+ if (repository != null) {
+ repository.projectOpened(project);
+ }
cpp.registerClassPaths();
}
@Override
protected void projectClosed() {
cpp.unregisterClassPaths();
+ if (repository != null) {
+ repository.projectClosed(project);
+ }
}
}
diff --git
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/PatchModuleFileManager.java
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/PatchModuleFileManager.java
index ef83fbf76a..f9efa1a379 100644
---
a/java/java.source.base/src/org/netbeans/modules/java/source/parsing/PatchModuleFileManager.java
+++
b/java/java.source.base/src/org/netbeans/modules/java/source/parsing/PatchModuleFileManager.java
@@ -23,6 +23,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -33,10 +34,12 @@
import java.util.logging.Logger;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+
import javax.tools.FileObject;
import javax.tools.JavaFileManager;
import javax.tools.JavaFileObject;
import javax.tools.StandardLocation;
+
import org.netbeans.api.annotations.common.CheckForNull;
import org.netbeans.api.annotations.common.NonNull;
import org.netbeans.api.java.classpath.ClassPath;
@@ -213,16 +216,18 @@ public ClassLoader getClassLoader(Location location) {
final PatchLocation pl = PatchLocation.cast(location);
final ModuleLocation bin = pl.getBin();
final ModuleLocation src = pl.getSrc();
+ final Set<JavaFileObject.Kind> binKinds = EnumSet.copyOf(kinds);
+ binKinds.remove(JavaFileObject.Kind.SOURCE);
if (bin == null) {
return src == null ?
Collections.emptyList() :
srcDelegate.list(src, packageName, kinds, recurse);
} else {
if (src == null) {
- return binDelegate.list(bin, packageName, kinds, recurse);
+ return binDelegate.list(bin, packageName, binKinds,
recurse);
} else {
final List<Iterable<JavaFileObject>> res = new
ArrayList<>(2);
- res.add(binDelegate.list(bin, packageName, kinds,
recurse));
+ res.add(binDelegate.list(bin, packageName, binKinds,
recurse));
res.add(srcDelegate.list(src, packageName, kinds,
recurse));
return Iterators.chained(res);
}
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists