Skip to content

Commit 1bf5c0d

Browse files
committed
Support notebook for enable-preview flag from the project context
1 parent 8c28f27 commit 1bf5c0d

File tree

2 files changed

+76
-14
lines changed

2 files changed

+76
-14
lines changed

nbcode/notebooks/src/org/netbeans/modules/nbcode/java/notebook/NotebookSessionManager.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -130,12 +130,7 @@ private List<String> getCompilerOptions(Project prj) {
130130
addOption.accept(CLASS_PATH, configs.getClassPath());
131131
addOption.accept(MODULE_PATH, configs.getModulePath());
132132
addOption.accept(ADD_MODULES, configs.getAddModules());
133-
134-
if (configs.isEnablePreview()) {
135-
compilerOptions.add(ENABLE_PREVIEW);
136-
compilerOptions.add(SOURCE_FLAG);
137-
compilerOptions.add(configs.getJdkVersion());
138-
}
133+
boolean enablePreview = configs.isEnablePreview();
139134

140135
if (prj != null) {
141136
List<String> projOptions = ProjectConfigurationUtils.compilerOptions(prj);
@@ -153,6 +148,13 @@ private List<String> getCompilerOptions(Project prj) {
153148
if (checkEmptyString(configs.getAddModules()) && prjConfigMap.containsKey(ADD_MODULES)) {
154149
addOption.accept(ADD_MODULES, prjConfigMap.get(ADD_MODULES));
155150
}
151+
enablePreview = enablePreview || projOptions.contains(ENABLE_PREVIEW);
152+
}
153+
154+
if (enablePreview) {
155+
compilerOptions.add(ENABLE_PREVIEW);
156+
compilerOptions.add(SOURCE_FLAG);
157+
compilerOptions.add(configs.getJdkVersion());
156158
}
157159

158160
return compilerOptions;
@@ -161,7 +163,7 @@ private List<String> getCompilerOptions(Project prj) {
161163
private List<String> getRemoteVmOptions(Project prj) {
162164
List<String> remoteOptions = new ArrayList<>();
163165
NotebookConfigs configs = NotebookConfigs.getInstance();
164-
boolean isEnablePreview = configs.isEnablePreview();
166+
boolean enablePreview = configs.isEnablePreview();
165167

166168
BiConsumer<String, String> addOption = (flag, value) -> {
167169
if (!checkEmptyString(value)) {
@@ -174,10 +176,6 @@ private List<String> getRemoteVmOptions(Project prj) {
174176
addOption.accept(MODULE_PATH, configs.getModulePath());
175177
addOption.accept(ADD_MODULES, configs.getAddModules());
176178

177-
if (isEnablePreview) {
178-
remoteOptions.add(ENABLE_PREVIEW);
179-
}
180-
181179
if (prj != null) {
182180
List<String> projOptions = ProjectConfigurationUtils.launchVMOptions(prj);
183181
Map<String, String> prjConfigMap = new HashMap<>();
@@ -194,6 +192,10 @@ private List<String> getRemoteVmOptions(Project prj) {
194192
if (checkEmptyString(configs.getAddModules()) && prjConfigMap.containsKey(ADD_MODULES)) {
195193
addOption.accept(ADD_MODULES, prjConfigMap.get(ADD_MODULES));
196194
}
195+
enablePreview = enablePreview || projOptions.contains(ENABLE_PREVIEW);
196+
}
197+
if (enablePreview) {
198+
remoteOptions.add(ENABLE_PREVIEW);
197199
}
198200
return remoteOptions;
199201
}

nbcode/notebooks/src/org/netbeans/modules/nbcode/java/project/ProjectConfigurationUtils.java

Lines changed: 63 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,13 @@
2323
import java.util.List;
2424
import java.util.Set;
2525
import java.util.concurrent.CompletableFuture;
26-
import org.eclipse.lsp4j.jsonrpc.validation.NonNull;
26+
import org.netbeans.api.annotations.common.NonNull;
2727
import org.netbeans.api.java.classpath.ClassPath;
2828
import org.netbeans.api.java.platform.JavaPlatform;
2929
import org.netbeans.api.java.platform.JavaPlatformManager;
3030
import org.netbeans.api.java.platform.Specification;
3131
import org.netbeans.api.java.project.JavaProjectConstants;
32+
import org.netbeans.api.java.queries.CompilerOptionsQuery;
3233
import org.netbeans.api.java.queries.UnitTestForSourceQuery;
3334
import org.netbeans.api.project.Project;
3435
import org.netbeans.api.project.SourceGroup;
@@ -50,6 +51,7 @@ public class ProjectConfigurationUtils {
5051
public final static String MODULE_PATH = "--module-path";
5152
public final static String ADD_MODULES = "--add-modules";
5253
public final static String ADD_EXPORTS = "--add-exports";
54+
public final static String ENABLE_PREVIEW = "--enable-preview";
5355

5456
public static boolean isNonTestRoot(SourceGroup sg) {
5557
return UnitTestForSourceQuery.findSources(sg.getRootFolder()).length == 0;
@@ -123,21 +125,72 @@ private static JavaPlatform findPlatform(ClassPath bootCP) {
123125
return null;
124126
}
125127

128+
static boolean isPreviewEnabled(@NonNull Project project, List<FileObject> sourceRoots) {
129+
boolean previewEnabled = isPreviewEnabledForAnyProjectSourceRoot(project, sourceRoots);
130+
previewEnabled = previewEnabled || isPreviewEnabledForAnyContainedProjects(project);
131+
return previewEnabled;
132+
}
133+
134+
private static boolean isPreviewEnabledForAnyContainedProjects(@NonNull Project project) {
135+
Set<Project> subProjects = ProjectUtils.getContainedProjects(project, false);
136+
if (subProjects != null) {
137+
for (Project subProject : subProjects) {
138+
if (isPreviewEnabledForAnyProjectSourceRoot(subProject, getNonTestRoots(subProject))) {
139+
return true;
140+
}
141+
}
142+
for (Project subProject : subProjects) {
143+
if (isPreviewEnabledForAnyContainedProjects(subProject)) {
144+
return true;
145+
}
146+
}
147+
}
148+
return false;
149+
}
150+
151+
private static boolean isPreviewEnabledForAnyProjectSourceRoot(@NonNull Project project, List<FileObject> sourceRoots) {
152+
if (sourceRoots == null || sourceRoots.isEmpty()) {
153+
FileObject root = project.getProjectDirectory();
154+
if (root != null && isPreviewEnabledForSource(root)) {
155+
return true;
156+
}
157+
} else {
158+
for (FileObject root : sourceRoots) {
159+
if (root != null && isPreviewEnabledForSource(root)) {
160+
return true;
161+
}
162+
}
163+
}
164+
return false;
165+
}
166+
167+
private static boolean isPreviewEnabledForSource(@NonNull FileObject source) {
168+
CompilerOptionsQuery.Result result = CompilerOptionsQuery.getOptions(source);
169+
return result.getArguments().contains(ENABLE_PREVIEW);
170+
}
171+
126172
@NonNull
127173
public static List<String> launchVMOptions(Project project) {
128174
if (project == null) {
129175
return new ArrayList<>();
130176
}
131177
boolean isModular = ProjectModulePathConfigurationUtils.isModularProject(project);
132178
if (isModular) {
133-
return ProjectModulePathConfigurationUtils.getVmOptions(project);
179+
List<String> vmOptions = ProjectModulePathConfigurationUtils.getVmOptions(project);
180+
if (isPreviewEnabled(project, getNonTestRoots(project))) {
181+
vmOptions.add(ENABLE_PREVIEW);
182+
}
183+
return vmOptions;
134184
}
135185
List<String> vmOptions = new ArrayList<>();
136186
List<FileObject> roots = getNonTestRoots(project);
137187
if (!roots.isEmpty()) {
138188
ClassPath cp = ClassPath.getClassPath(roots.getFirst(), ClassPath.EXECUTE);
139189
vmOptions.addAll(Arrays.asList(CLASS_PATH, addRoots("", cp)));
140190
}
191+
if (isPreviewEnabled(project, roots)) {
192+
vmOptions.add(ENABLE_PREVIEW);
193+
}
141194
return vmOptions;
142195
}
143196

@@ -148,14 +201,21 @@ public static List<String> compilerOptions(Project project) {
148201
}
149202
boolean isModular = ProjectModulePathConfigurationUtils.isModularProject(project);
150203
if (isModular) {
151-
return ProjectModulePathConfigurationUtils.getCompileOptions(project);
204+
List<String> compileOptions = ProjectModulePathConfigurationUtils.getCompileOptions(project);
205+
if (isPreviewEnabled(project, getNonTestRoots(project))) {
206+
compileOptions.add(ENABLE_PREVIEW);
207+
}
208+
return compileOptions;
152209
}
153210
List<String> compileOptions = new ArrayList<>();
154211
List<FileObject> roots = getNonTestRoots(project);
155212
if (!roots.isEmpty()) {
156213
ClassPath cp = ClassPath.getClassPath(roots.getFirst(), ClassPath.COMPILE);
157214
compileOptions.addAll(Arrays.asList(CLASS_PATH, addRoots("", cp)));
158215
}
216+
if (isPreviewEnabled(project, roots)) {
217+
compileOptions.add(ENABLE_PREVIEW);
218+
}
159219
return compileOptions;
160220
}
161221

0 commit comments

Comments
 (0)