Skip to content

Commit f56eab2

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

File tree

2 files changed

+169
-0
lines changed

2 files changed

+169
-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: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
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/java/gradle.java/src/org/netbeans/modules/gradle/java/GradleJavaTokenProvider.java b/java/gradle.java/src/org/netbeans/modules/gradle/java/GradleJavaTokenProvider.java
56+
index 84435b7fbc..418f3e603e 100644
57+
--- a/java/gradle.java/src/org/netbeans/modules/gradle/java/GradleJavaTokenProvider.java
58+
+++ b/java/gradle.java/src/org/netbeans/modules/gradle/java/GradleJavaTokenProvider.java
59+
@@ -53,12 +53,14 @@ public class GradleJavaTokenProvider implements ReplaceTokenProvider {
60+
private static final String AFFECTED_BUILD_TASK = "affectedBuildTasks";//NOI18N
61+
private static final String TEST_TASK_NAME = "testTaskName"; //NOI18N
62+
private static final String CLEAN_TEST_TASK_NAME = "cleanTestTaskName"; //NOI18N
63+
+ private static final String SOURCE_SET_NAMES = "sourceSetNames"; //NOI18N
64+
65+
private static final Set<String> SUPPORTED = Collections.unmodifiableSet(new HashSet<String>(Arrays.asList(
66+
SELECTED_CLASS,
67+
SELECTED_CLASS_NAME,
68+
SELECTED_METHOD,
69+
SELECTED_PACKAGE,
70+
+ SOURCE_SET_NAMES,
71+
AFFECTED_BUILD_TASK
72+
)));
73+
74+
@@ -123,6 +125,7 @@ public class GradleJavaTokenProvider implements ReplaceTokenProvider {
75+
GradleJavaSourceSet ss = gjp.containingSourceSet(f);
76+
if (ss != null) {
77+
Set<GradleJavaSourceSet.SourceType> types = ss.getSourceTypes(f);
78+
+ map.merge(SOURCE_SET_NAMES, ss.getName(), (oldVal, newVal) -> oldVal.trim() + "," + newVal.trim());
79+
for (GradleJavaSourceSet.SourceType type : types) {
80+
buildTasks.add(ss.getBuildTaskName(type));
81+
}
82+
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
83+
index 97fadb9fee..8e27c5699b 100644
84+
--- a/java/gradle.java/src/org/netbeans/modules/gradle/java/action-mapping.xml
85+
+++ b/java/gradle.java/src/org/netbeans/modules/gradle/java/action-mapping.xml
86+
@@ -53,11 +53,11 @@
87+
</action>
88+
89+
<action name="run.single">
90+
- <args>-PrunClassName=${selectedClass} ${javaExec.workingDir} ${javaExec.environment} run --stacktrace ${javaExec.jvmArgs} ${javaExec.args}</args>
91+
+ <args>-PrunClassName=${selectedClass} -PrunSourceSetNames=${sourceSetNames} ${javaExec.workingDir} ${javaExec.environment} run --stacktrace ${javaExec.jvmArgs} ${javaExec.args}</args>
92+
</action>
93+
94+
<action name="debug.single">
95+
- <args>-PrunClassName=${selectedClass} ${javaExec.workingDir} ${javaExec.environment} run --stacktrace --debug-jvm ${javaExec.jvmArgs} ${javaExec.args}</args>
96+
+ <args>-PrunClassName=${selectedClass} -PrunSourceSetNames=${sourceSetNames} ${javaExec.workingDir} ${javaExec.environment} run --stacktrace --debug-jvm ${javaExec.jvmArgs} ${javaExec.args}</args>
97+
</action>
98+
</apply-for>
99+
100+
@@ -91,7 +91,7 @@
101+
<actions>
102+
<apply-for plugins="java">
103+
<action name="run.single">
104+
- <args>-PrunClassName=${selectedClass} ${javaExec.workingDir} ${javaExec.environment} run --continuous ${javaExec.jvmArgs} ${javaExec.args}</args>
105+
+ <args>-PrunClassName=${selectedClass} -PrunSourceSetNames=${sourceSetNames} ${javaExec.workingDir} ${javaExec.environment} run --continuous ${javaExec.jvmArgs} ${javaExec.args}</args>
106+
</action>
107+
<action name="test.single">
108+
<args>"${cleanTestTaskName}" "${testTaskName}" --tests "${selectedClass}" --continuous</args>
109+
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
110+
index e503da42bd..93cbc81339 100644
111+
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/launch/NbLaunchDelegate.java
112+
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/launch/NbLaunchDelegate.java
113+
@@ -28,6 +28,7 @@ import java.util.Arrays;
114+
import java.util.Collection;
115+
import java.util.Collections;
116+
import java.util.List;
117+
+import java.util.Locale;
118+
import java.util.Map;
119+
import java.util.Objects;
120+
import java.util.Optional;
121+
@@ -60,6 +61,8 @@ import org.netbeans.api.extexecution.ExecutionDescriptor;
122+
import org.netbeans.api.extexecution.ExecutionService;
123+
import org.netbeans.api.java.classpath.ClassPath;
124+
import org.netbeans.api.java.queries.UnitTestForSourceQuery;
125+
+import org.netbeans.api.java.source.ClasspathInfo;
126+
+import org.netbeans.api.java.source.SourceUtils;
127+
import org.netbeans.api.project.FileOwnerQuery;
128+
import org.netbeans.api.project.Project;
129+
import org.netbeans.api.project.ProjectUtils;
130+
@@ -84,6 +87,7 @@ import org.netbeans.spi.project.ProjectConfigurationProvider;
131+
import org.netbeans.spi.project.SingleMethod;
132+
133+
import org.openide.filesystems.FileObject;
134+
+import org.openide.filesystems.FileUtil;
135+
import org.openide.util.BaseUtilities;
136+
import org.openide.util.Lookup;
137+
import org.openide.util.NbBundle;
138+
@@ -114,6 +118,7 @@ public abstract class NbLaunchDelegate {
139+
140+
private final RequestProcessor requestProcessor = new RequestProcessor(NbLaunchDelegate.class);
141+
private final Map<DebugAdapterContext, DebuggerManagerListener> debuggerListeners = new ConcurrentHashMap<>();
142+
+ private final static String JAVA_FILE_EXT = ".java";
143+
144+
public abstract void preLaunch(Map<String, Object> launchArguments, DebugAdapterContext context);
145+
146+
@@ -570,8 +575,20 @@ public abstract class NbLaunchDelegate {
147+
} else if (launchType == LaunchType.RUN_TEST) {
148+
mainSource = false;
149+
} else {
150+
- FileObject fileRoot = sourceCP != null ? sourceCP.findOwnerRoot(toRun) : null;
151+
- mainSource = fileRoot == null || UnitTestForSourceQuery.findSources(fileRoot).length == 0;
152+
+ mainSource = true;
153+
+ if (sourceCP != null) {
154+
+ FileObject root = sourceCP.findOwnerRoot(toRun);
155+
+ if (root != null) {
156+
+ if (UnitTestForSourceQuery.findSources(root).length > 0) {
157+
+ String relativePath = FileUtil.getRelativePath(root, toRun);
158+
+ if (relativePath != null && relativePath.toLowerCase(Locale.ENGLISH).endsWith(JAVA_FILE_EXT)) {
159+
+ String className = relativePath.substring(0, relativePath.length() - JAVA_FILE_EXT.length()).replace('/', '.');
160+
+ ClasspathInfo cpi = ClasspathInfo.create(toRun);
161+
+ mainSource = SourceUtils.isMainClass(className, cpi, true);
162+
+ }
163+
+ }
164+
+ }
165+
+ }
166+
}
167+
ActionProvider provider = null;
168+
String command = null;

0 commit comments

Comments
 (0)