From 9b71f1c23f7f75fc6265d32374a29abebaa03632 Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Fri, 14 May 2021 21:12:52 +0200 Subject: [PATCH] Improve handling of settings files exported from Eclipse Fixes https://github.com/redhat-developer/vscode-java/issues/1939 Signed-off-by: Snjezana Peco --- .../managers/StandardProjectsManager.java | 11 +++++-- .../formatter/settings2.prefs | 6 ++++ .../internal/handlers/JavaSettingsTest.java | 31 ++++++++++++++++++- 3 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 org.eclipse.jdt.ls.tests/formatter/settings2.prefs diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java index 944b50e9bf..1084429b98 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/managers/StandardProjectsManager.java @@ -39,6 +39,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import org.eclipse.core.internal.preferences.EclipsePreferences; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; @@ -289,9 +290,13 @@ public static void configureSettings(Preferences preferences) { if (properties != null && !properties.isEmpty()) { properties.forEach((k, v) -> { if (k instanceof String && v instanceof String) { - k = ((String) k).replace("/instance/", ""); - if (javaOptions.get(k) != null) { - javaOptions.put((String) k, (String) v); + String path = (String) k; + if (!"file_export_version".equals(path) && path.charAt(0) != '@' && path.charAt(0) != '!') { + String[] decoded = EclipsePreferences.decodePath(path); + String key = decoded[1]; + if (key != null) { + javaOptions.put(key, (String) v); + } } } }); diff --git a/org.eclipse.jdt.ls.tests/formatter/settings2.prefs b/org.eclipse.jdt.ls.tests/formatter/settings2.prefs new file mode 100644 index 0000000000..4735ec5380 --- /dev/null +++ b/org.eclipse.jdt.ls.tests/formatter/settings2.prefs @@ -0,0 +1,6 @@ +#Mon May 10 12:54:52 CEST 2021 +\!/= +/instance/org.eclipse.jdt.core/org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=ignore +/instance/org.eclipse.jdt.core/org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning +@org.eclipse.jdt.core=3.25.0.v20210223-0522 +file_export_version=3.0 diff --git a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/JavaSettingsTest.java b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/JavaSettingsTest.java index eecb92793c..6dced49993 100644 --- a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/JavaSettingsTest.java +++ b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/JavaSettingsTest.java @@ -51,7 +51,8 @@ @RunWith(MockitoJUnitRunner.class) public class JavaSettingsTest extends AbstractCompilationUnitBasedTest { - private static final String MISSING_SERIAL_VERSION = "org.eclipse.jdt.core.compiler.problem.missingSerialVersion"; + private static final String MISSING_SERIAL_VERSION = JavaCore.COMPILER_PB_MISSING_SERIAL_VERSION; + private static final String STATIC_ACCESS_RECEIVER = JavaCore.COMPILER_PB_STATIC_ACCESS_RECEIVER; private IJavaProject javaProject; private Hashtable options; @@ -170,4 +171,32 @@ public void testFormatter() throws Exception { assertEquals(DefaultCodeFormatterConstants.END_OF_LINE, JavaCore.getOption(DefaultCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_BLOCK)); } + // https://github.com/redhat-developer/vscode-java/issues/1939 + @Test + public void testSettingsV3() throws Exception { + assertEquals("ignore", JavaCore.getOption(MISSING_SERIAL_VERSION)); + assertEquals("warning", JavaCore.getOption(STATIC_ACCESS_RECEIVER)); + assertEquals("ignore", javaProject.getOption(MISSING_SERIAL_VERSION, true)); + assertEquals("warning", javaProject.getOption(STATIC_ACCESS_RECEIVER, true)); + try { + String settingsUrl = "../../formatter/settings2.prefs"; + preferences.setSettingsUrl(settingsUrl); + projectsManager.fileChanged(preferences.getSettingsAsURI().toURL().toString(), CHANGE_TYPE.CHANGED); + waitForBackgroundJobs(); + assertEquals("warning", JavaCore.getOption(MISSING_SERIAL_VERSION)); + assertEquals("ignore", JavaCore.getOption(STATIC_ACCESS_RECEIVER)); + assertEquals("warning", javaProject.getOption(MISSING_SERIAL_VERSION, true)); + assertEquals("ignore", javaProject.getOption(STATIC_ACCESS_RECEIVER, true)); + } finally { + JavaCore.setOptions(options); + preferences.setSettingsUrl(null); + StandardProjectsManager.configureSettings(preferences); + waitForBackgroundJobs(); + } + assertEquals("ignore", JavaCore.getOption(MISSING_SERIAL_VERSION)); + assertEquals("warning", JavaCore.getOption(STATIC_ACCESS_RECEIVER)); + assertEquals("ignore", javaProject.getOption(MISSING_SERIAL_VERSION, true)); + assertEquals("warning", javaProject.getOption(STATIC_ACCESS_RECEIVER, true)); + } + }