Skip to content

Commit 958ed89

Browse files
authored
Support update Java project options. (#3162)
- All the options from JavaCore are supported via the delegate command 'java.project.updateSettings'. Signed-off-by: Sheng Chen <[email protected]>
1 parent ecc87c6 commit 958ed89

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/commands/ProjectCommand.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.List;
2929
import java.util.Map;
3030
import java.util.Optional;
31+
import java.util.Set;
3132
import java.util.Map.Entry;
3233
import java.util.Objects;
3334
import java.util.stream.Stream;
@@ -721,6 +722,8 @@ public JdkUpdateResult(boolean success, String message) {
721722
public static void updateProjectSettings(String projectUri, Map<String, Object> options) throws CoreException, URISyntaxException {
722723
IJavaProject javaProject = getJavaProjectFromUri(projectUri);
723724
IProject project = javaProject.getProject();
725+
Map<String, String> newOptions = new HashMap<>();
726+
final Map<String, String> currentOptions = javaProject.getOptions(true);
724727
for (Map.Entry<String, Object> entry : options.entrySet()) {
725728
switch (entry.getKey()) {
726729
case M2E_SELECTED_PROFILES:
@@ -744,8 +747,18 @@ public static void updateProjectSettings(String projectUri, Map<String, Object>
744747
}
745748
break;
746749
default:
750+
String settingValue = currentOptions.get(entry.getKey());
751+
// only update the options whose keys are valid and value are different from the current ones
752+
if (settingValue != null && !settingValue.equals(entry.getValue().toString().trim())) {
753+
newOptions.put(entry.getKey(), entry.getValue().toString());
754+
}
747755
break;
748756
}
749757
}
758+
if (!newOptions.isEmpty()) {
759+
Map<String, String> projectSpecificOptions = javaProject.getOptions(false);
760+
projectSpecificOptions.putAll(newOptions);
761+
javaProject.setOptions(projectSpecificOptions);
762+
}
750763
}
751764
}

org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/commands/ProjectCommandTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,24 @@ public void testUpdateMavenProfiles() throws Exception {
467467
assertEquals("my profile", options.get(KEY));
468468
}
469469

470+
@Test
471+
public void testUpdateProjectOptions() throws Exception {
472+
importProjects("maven/salut");
473+
IProject project = WorkspaceHelper.getProject("salut");
474+
String uriString = project.getLocationURI().toString();
475+
List<String> settingKeys = Arrays.asList(JavaCore.COMPILER_CODEGEN_METHOD_PARAMETERS_ATTR);
476+
Map<String, Object> options = ProjectCommand.getProjectSettings(uriString, settingKeys);
477+
478+
assertEquals(JavaCore.DO_NOT_GENERATE, options.get(JavaCore.COMPILER_CODEGEN_METHOD_PARAMETERS_ATTR));
479+
480+
Map<String, Object> updateOptions = new HashMap<>();
481+
updateOptions.put(JavaCore.COMPILER_CODEGEN_METHOD_PARAMETERS_ATTR, JavaCore.GENERATE);
482+
ProjectCommand.updateProjectSettings(uriString, updateOptions);
483+
484+
options = ProjectCommand.getProjectSettings(uriString, settingKeys);
485+
assertEquals(JavaCore.GENERATE, options.get(JavaCore.COMPILER_CODEGEN_METHOD_PARAMETERS_ATTR));
486+
}
487+
470488
private SymbolInformation buildClassSymbol(IProject project, String fqClassName) throws Exception {
471489
String uriString = buildClassfileUri(project, fqClassName);
472490
SymbolInformation si = new SymbolInformation();

0 commit comments

Comments
 (0)