From 5f5fe4162fef7d79ca62571d29740c15fd4bc8f0 Mon Sep 17 00:00:00 2001 From: Jan Lahoda Date: Sun, 26 Mar 2023 10:07:27 +0200 Subject: [PATCH] Make sure the test roots are associated with the correct project(s) before attempting to run tests. --- .../openjdk/jtreg/ActionProviderImpl.java | 43 ++++++++++++++++++- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ActionProviderImpl.java b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ActionProviderImpl.java index 4c7e418afdc0..5ec010a5d20a 100644 --- a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ActionProviderImpl.java +++ b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ActionProviderImpl.java @@ -51,8 +51,11 @@ import javax.swing.SwingUtilities; import org.netbeans.api.java.classpath.ClassPath; +import org.netbeans.api.java.project.JavaProjectConstants; import org.netbeans.api.project.FileOwnerQuery; import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectManager; +import org.netbeans.api.project.ProjectUtils; import org.netbeans.modules.java.openjdk.common.BuildUtils; import org.netbeans.modules.java.openjdk.common.BuildUtils.ExtraMakeTargets; import org.netbeans.modules.java.openjdk.common.ShortcutUtils; @@ -123,6 +126,7 @@ public void invokeAction(String command, Lookup context) throws IllegalArgumentE "DN_Running=Running ({0})"}) public static ExecutorTask createAndRunTest(Lookup context, String command) { final FileObject file = context.lookup(FileObject.class); + ensureProjectsRegistered(file); String ioName = COMMAND_DEBUG_TEST_SINGLE.equals(command) ? Bundle.DN_Debugging(file.getName()) : Bundle.DN_Running(file.getName()); StopAction newStop = new StopAction(); ReRunAction newReRun = new ReRunAction(COMMAND_TEST_SINGLE); @@ -671,13 +675,48 @@ public boolean isActionEnabled(String command, Lookup context) throws IllegalArg if (file == null) return false; + return findJDKRoot(file) != null; + } + + private static FileObject findJDKRoot(FileObject file) { while (!file.isRoot()) { if (Utilities.isJDKRepository(file)) - return true; + return file; file = file.getParent(); } - return false; + return null; + } + + private static void ensureProjectsRegistered(FileObject file) { + if (FileOwnerQuery.getOwner(file) != null) { + return ; + } + + FileObject jdkRoot = findJDKRoot(file); + + if (jdkRoot == null) { + return ; + } + + for (String wellKnownProject : new String[] {"java.base", "java.compiler", + "java.xml", "jdk.scripting.nashorn"}) { + for (String open : new String[] {"open/", ""}) { + FileObject prjRoot = jdkRoot.getFileObject(open + "src/" + wellKnownProject); + + if (prjRoot == null) { + continue; + } + + Project thisPrj = FileOwnerQuery.getOwner(prjRoot); + + if (thisPrj != null) { + //ensure external roots are registered: + ProjectUtils.getSources(thisPrj) + .getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA); + } + } + } } private static TestType inferTestType(Project prj) {