Skip to content

Commit

Permalink
Support update Java project options. (#3162)
Browse files Browse the repository at this point in the history
- All the options from JavaCore are supported via the delegate command
  'java.project.updateSettings'.

Signed-off-by: Sheng Chen <[email protected]>
  • Loading branch information
jdneo authored May 28, 2024
1 parent ecc87c6 commit 958ed89
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.stream.Stream;
Expand Down Expand Up @@ -721,6 +722,8 @@ public JdkUpdateResult(boolean success, String message) {
public static void updateProjectSettings(String projectUri, Map<String, Object> options) throws CoreException, URISyntaxException {
IJavaProject javaProject = getJavaProjectFromUri(projectUri);
IProject project = javaProject.getProject();
Map<String, String> newOptions = new HashMap<>();
final Map<String, String> currentOptions = javaProject.getOptions(true);
for (Map.Entry<String, Object> entry : options.entrySet()) {
switch (entry.getKey()) {
case M2E_SELECTED_PROFILES:
Expand All @@ -744,8 +747,18 @@ public static void updateProjectSettings(String projectUri, Map<String, Object>
}
break;
default:
String settingValue = currentOptions.get(entry.getKey());
// only update the options whose keys are valid and value are different from the current ones
if (settingValue != null && !settingValue.equals(entry.getValue().toString().trim())) {
newOptions.put(entry.getKey(), entry.getValue().toString());
}
break;
}
}
if (!newOptions.isEmpty()) {
Map<String, String> projectSpecificOptions = javaProject.getOptions(false);
projectSpecificOptions.putAll(newOptions);
javaProject.setOptions(projectSpecificOptions);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -467,6 +467,24 @@ public void testUpdateMavenProfiles() throws Exception {
assertEquals("my profile", options.get(KEY));
}

@Test
public void testUpdateProjectOptions() throws Exception {
importProjects("maven/salut");
IProject project = WorkspaceHelper.getProject("salut");
String uriString = project.getLocationURI().toString();
List<String> settingKeys = Arrays.asList(JavaCore.COMPILER_CODEGEN_METHOD_PARAMETERS_ATTR);
Map<String, Object> options = ProjectCommand.getProjectSettings(uriString, settingKeys);

assertEquals(JavaCore.DO_NOT_GENERATE, options.get(JavaCore.COMPILER_CODEGEN_METHOD_PARAMETERS_ATTR));

Map<String, Object> updateOptions = new HashMap<>();
updateOptions.put(JavaCore.COMPILER_CODEGEN_METHOD_PARAMETERS_ATTR, JavaCore.GENERATE);
ProjectCommand.updateProjectSettings(uriString, updateOptions);

options = ProjectCommand.getProjectSettings(uriString, settingKeys);
assertEquals(JavaCore.GENERATE, options.get(JavaCore.COMPILER_CODEGEN_METHOD_PARAMETERS_ATTR));
}

private SymbolInformation buildClassSymbol(IProject project, String fqClassName) throws Exception {
String uriString = buildClassfileUri(project, fqClassName);
SymbolInformation si = new SymbolInformation();
Expand Down

0 comments on commit 958ed89

Please sign in to comment.