Skip to content

Commit 9800dd5

Browse files
committed
backporting fix for sourceSet inclusion while running Gradle Files
1 parent 5e22af4 commit 9800dd5

File tree

2 files changed

+193
-0
lines changed

2 files changed

+193
-0
lines changed

build.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
patches/8827.diff
6969
patches/8828.diff
7070
patches/8829.diff
71+
patches/8897.diff
7172
patches/8856-draft.diff
7273
patches/disable-error-notification.diff
7374
patches/mvn-sh.diff

patches/8897.diff

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
diff --git a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NetBeansRunSinglePlugin.java b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NetBeansRunSinglePlugin.java
2+
index e1e01c3aed..0ca4b052be 100644
3+
--- a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NetBeansRunSinglePlugin.java
4+
+++ b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NetBeansRunSinglePlugin.java
5+
@@ -19,8 +19,10 @@
6+
7+
package org.netbeans.modules.gradle.tooling;
8+
9+
+import java.util.Arrays;
10+
import static java.util.Arrays.asList;
11+
import java.util.List;
12+
+import java.util.Objects;
13+
import java.util.Set;
14+
import org.gradle.api.DefaultTask;
15+
import org.gradle.api.logging.Logger;
16+
@@ -29,7 +31,9 @@ import org.gradle.api.logging.LogLevel;
17+
import org.gradle.api.Plugin;
18+
import org.gradle.api.Project;
19+
import org.gradle.api.Task;
20+
+import org.gradle.api.file.FileCollection;
21+
import org.gradle.api.tasks.JavaExec;
22+
+import org.gradle.api.tasks.SourceSet;
23+
import org.gradle.api.tasks.SourceSetContainer;
24+
import org.gradle.api.tasks.TaskProvider;
25+
import org.gradle.process.CommandLineArgumentProvider;
26+
@@ -47,6 +51,7 @@ class NetBeansRunSinglePlugin implements Plugin<Project> {
27+
private static final String RUN_SINGLE_ARGS = "runArgs";
28+
private static final String RUN_SINGLE_JVM_ARGS = "runJvmArgs";
29+
private static final String RUN_SINGLE_CWD = "runWorkingDir";
30+
+ private static final String RUN_SINGLE_SOURCE_SET_NAMES = "runSourceSetNames";
31+
32+
private static final String DEPRECATE_RUN_SINGLE =
33+
"runSingle task is deprecated. Inspect your configuration and use just 'run' task instead of 'runSingle'";
34+
@@ -64,6 +69,20 @@ class NetBeansRunSinglePlugin implements Plugin<Project> {
35+
}
36+
37+
private void configureJavaExec(Project project, JavaExec je) {
38+
+ Object sourceSetValue = project.findProperty(RUN_SINGLE_SOURCE_SET_NAMES);
39+
+ if (sourceSetValue != null) {
40+
+ SourceSetContainer sourceSets = project.getExtensions().findByType(SourceSetContainer.class);
41+
+ if (sourceSets != null) {
42+
+ FileCollection updatedClasspath = Arrays.stream(sourceSetValue.toString().split(","))
43+
+ .map(String::trim)
44+
+ .map(sourceSets::findByName)
45+
+ .filter(Objects::nonNull)
46+
+ .map(SourceSet::getRuntimeClasspath)
47+
+ .reduce(project.getObjects().fileCollection(), FileCollection::plus);
48+
+
49+
+ je.setClasspath(updatedClasspath);
50+
+ }
51+
+ }
52+
if (project.hasProperty(RUN_SINGLE_MAIN)) {
53+
String mainClass = project.property(RUN_SINGLE_MAIN).toString();
54+
if (GRADLE_VERSION.compareTo(GradleVersion.version("6.4")) < 0) {
55+
diff --git a/ide/lsp.client/test/unit/src/org/netbeans/modules/lsp/client/debugger/DebuggerTest.java b/ide/lsp.client/test/unit/src/org/netbeans/modules/lsp/client/debugger/DebuggerTest.java
56+
index 3718f1f2ed..8736be5755 100644
57+
--- a/ide/lsp.client/test/unit/src/org/netbeans/modules/lsp/client/debugger/DebuggerTest.java
58+
+++ b/ide/lsp.client/test/unit/src/org/netbeans/modules/lsp/client/debugger/DebuggerTest.java
59+
@@ -125,7 +125,8 @@ public class DebuggerTest extends NbTestCase {
60+
.addConfiguration(Map.of("type", "java+",
61+
"request", "launch",
62+
"file", FileUtil.toFile(testFile).getAbsolutePath(),
63+
- "classPaths", List.of("any")))
64+
+ "classPaths", List.of("any"),
65+
+ "testRun", false))
66+
.launch();
67+
waitFor(true, () -> DebuggerManager.getDebuggerManager().getSessions().length > 0);
68+
assertEquals(1, DebuggerManager.getDebuggerManager().getSessions().length);
69+
@@ -198,7 +199,8 @@ public class DebuggerTest extends NbTestCase {
70+
.addConfiguration(Map.of("type", "java+",
71+
"request", "launch",
72+
"file", FileUtil.toFile(testFile).getAbsolutePath(),
73+
- "classPaths", List.of("any")))
74+
+ "classPaths", List.of("any"),
75+
+ "testRun", false))
76+
.launch();
77+
waitFor(true, () -> DebuggerManager.getDebuggerManager().getSessions().length > 0);
78+
assertEquals(1, DebuggerManager.getDebuggerManager().getSessions().length);
79+
diff --git a/java/gradle.java/src/org/netbeans/modules/gradle/java/GradleJavaTokenProvider.java b/java/gradle.java/src/org/netbeans/modules/gradle/java/GradleJavaTokenProvider.java
80+
index 84435b7fbc..418f3e603e 100644
81+
--- a/java/gradle.java/src/org/netbeans/modules/gradle/java/GradleJavaTokenProvider.java
82+
+++ b/java/gradle.java/src/org/netbeans/modules/gradle/java/GradleJavaTokenProvider.java
83+
@@ -53,12 +53,14 @@ public class GradleJavaTokenProvider implements ReplaceTokenProvider {
84+
private static final String AFFECTED_BUILD_TASK = "affectedBuildTasks";//NOI18N
85+
private static final String TEST_TASK_NAME = "testTaskName"; //NOI18N
86+
private static final String CLEAN_TEST_TASK_NAME = "cleanTestTaskName"; //NOI18N
87+
+ private static final String SOURCE_SET_NAMES = "sourceSetNames"; //NOI18N
88+
89+
private static final Set<String> SUPPORTED = Collections.unmodifiableSet(new HashSet<String>(Arrays.asList(
90+
SELECTED_CLASS,
91+
SELECTED_CLASS_NAME,
92+
SELECTED_METHOD,
93+
SELECTED_PACKAGE,
94+
+ SOURCE_SET_NAMES,
95+
AFFECTED_BUILD_TASK
96+
)));
97+
98+
@@ -123,6 +125,7 @@ public class GradleJavaTokenProvider implements ReplaceTokenProvider {
99+
GradleJavaSourceSet ss = gjp.containingSourceSet(f);
100+
if (ss != null) {
101+
Set<GradleJavaSourceSet.SourceType> types = ss.getSourceTypes(f);
102+
+ map.merge(SOURCE_SET_NAMES, ss.getName(), (oldVal, newVal) -> oldVal.trim() + "," + newVal.trim());
103+
for (GradleJavaSourceSet.SourceType type : types) {
104+
buildTasks.add(ss.getBuildTaskName(type));
105+
}
106+
diff --git a/java/gradle.java/src/org/netbeans/modules/gradle/java/action-mapping.xml b/java/gradle.java/src/org/netbeans/modules/gradle/java/action-mapping.xml
107+
index 97fadb9fee..8e27c5699b 100644
108+
--- a/java/gradle.java/src/org/netbeans/modules/gradle/java/action-mapping.xml
109+
+++ b/java/gradle.java/src/org/netbeans/modules/gradle/java/action-mapping.xml
110+
@@ -53,11 +53,11 @@
111+
</action>
112+
113+
<action name="run.single">
114+
- <args>-PrunClassName=${selectedClass} ${javaExec.workingDir} ${javaExec.environment} run --stacktrace ${javaExec.jvmArgs} ${javaExec.args}</args>
115+
+ <args>-PrunClassName=${selectedClass} -PrunSourceSetNames=${sourceSetNames} ${javaExec.workingDir} ${javaExec.environment} run --stacktrace ${javaExec.jvmArgs} ${javaExec.args}</args>
116+
</action>
117+
118+
<action name="debug.single">
119+
- <args>-PrunClassName=${selectedClass} ${javaExec.workingDir} ${javaExec.environment} run --stacktrace --debug-jvm ${javaExec.jvmArgs} ${javaExec.args}</args>
120+
+ <args>-PrunClassName=${selectedClass} -PrunSourceSetNames=${sourceSetNames} ${javaExec.workingDir} ${javaExec.environment} run --stacktrace --debug-jvm ${javaExec.jvmArgs} ${javaExec.args}</args>
121+
</action>
122+
</apply-for>
123+
124+
@@ -91,7 +91,7 @@
125+
<actions>
126+
<apply-for plugins="java">
127+
<action name="run.single">
128+
- <args>-PrunClassName=${selectedClass} ${javaExec.workingDir} ${javaExec.environment} run --continuous ${javaExec.jvmArgs} ${javaExec.args}</args>
129+
+ <args>-PrunClassName=${selectedClass} -PrunSourceSetNames=${sourceSetNames} ${javaExec.workingDir} ${javaExec.environment} run --continuous ${javaExec.jvmArgs} ${javaExec.args}</args>
130+
</action>
131+
<action name="test.single">
132+
<args>"${cleanTestTaskName}" "${testTaskName}" --tests "${selectedClass}" --continuous</args>
133+
diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/launch/NbLaunchDelegate.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/launch/NbLaunchDelegate.java
134+
index e503da42bd..93cbc81339 100644
135+
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/launch/NbLaunchDelegate.java
136+
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/launch/NbLaunchDelegate.java
137+
@@ -28,6 +28,7 @@ import java.util.Arrays;
138+
import java.util.Collection;
139+
import java.util.Collections;
140+
import java.util.List;
141+
+import java.util.Locale;
142+
import java.util.Map;
143+
import java.util.Objects;
144+
import java.util.Optional;
145+
@@ -60,6 +61,8 @@ import org.netbeans.api.extexecution.ExecutionDescriptor;
146+
import org.netbeans.api.extexecution.ExecutionService;
147+
import org.netbeans.api.java.classpath.ClassPath;
148+
import org.netbeans.api.java.queries.UnitTestForSourceQuery;
149+
+import org.netbeans.api.java.source.ClasspathInfo;
150+
+import org.netbeans.api.java.source.SourceUtils;
151+
import org.netbeans.api.project.FileOwnerQuery;
152+
import org.netbeans.api.project.Project;
153+
import org.netbeans.api.project.ProjectUtils;
154+
@@ -84,6 +87,7 @@ import org.netbeans.spi.project.ProjectConfigurationProvider;
155+
import org.netbeans.spi.project.SingleMethod;
156+
157+
import org.openide.filesystems.FileObject;
158+
+import org.openide.filesystems.FileUtil;
159+
import org.openide.util.BaseUtilities;
160+
import org.openide.util.Lookup;
161+
import org.openide.util.NbBundle;
162+
@@ -114,6 +118,7 @@ public abstract class NbLaunchDelegate {
163+
164+
private final RequestProcessor requestProcessor = new RequestProcessor(NbLaunchDelegate.class);
165+
private final Map<DebugAdapterContext, DebuggerManagerListener> debuggerListeners = new ConcurrentHashMap<>();
166+
+ private final static String JAVA_FILE_EXT = ".java";
167+
168+
public abstract void preLaunch(Map<String, Object> launchArguments, DebugAdapterContext context);
169+
170+
@@ -570,8 +575,20 @@ public abstract class NbLaunchDelegate {
171+
} else if (launchType == LaunchType.RUN_TEST) {
172+
mainSource = false;
173+
} else {
174+
- FileObject fileRoot = sourceCP != null ? sourceCP.findOwnerRoot(toRun) : null;
175+
- mainSource = fileRoot == null || UnitTestForSourceQuery.findSources(fileRoot).length == 0;
176+
+ mainSource = true;
177+
+ if (sourceCP != null) {
178+
+ FileObject root = sourceCP.findOwnerRoot(toRun);
179+
+ if (root != null) {
180+
+ if (UnitTestForSourceQuery.findSources(root).length > 0) {
181+
+ String relativePath = FileUtil.getRelativePath(root, toRun);
182+
+ if (relativePath != null && relativePath.toLowerCase(Locale.ENGLISH).endsWith(JAVA_FILE_EXT)) {
183+
+ String className = relativePath.substring(0, relativePath.length() - JAVA_FILE_EXT.length()).replace('/', '.');
184+
+ ClasspathInfo cpi = ClasspathInfo.create(toRun);
185+
+ mainSource = SourceUtils.isMainClass(className, cpi, true);
186+
+ }
187+
+ }
188+
+ }
189+
+ }
190+
}
191+
ActionProvider provider = null;
192+
String command = null;

0 commit comments

Comments
 (0)