Preference pages for props and yaml ls editor

Allows configuring problem severities.
The ui works but is not yet wired to transmit
these setting to the language server.
This commit is contained in:
Kris De Volder
2020-10-02 10:22:41 -07:00
parent 0a29c539b5
commit dbe9520f3d
25 changed files with 632 additions and 64 deletions

View File

@@ -25,7 +25,8 @@ Require-Bundle: org.eclipse.ui,
org.reactivestreams.reactive-streams;bundle-version="1.0.0",
org.apache.commons.lang3,
org.springsource.ide.eclipse.commons.ui,
javax.inject
javax.inject,
com.google.gson
Bundle-ActivationPolicy: lazy
Export-Package: org.springframework.ide.eclipse.editor.support,
org.springframework.ide.eclipse.editor.support.completions,

View File

@@ -54,6 +54,8 @@ import org.springsource.ide.eclipse.commons.livexp.core.UIValueListener;
*/
public abstract class AbstractProblemSeverityPreferencesPage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage, IWorkbenchPropertyPage {
private final ProblemSeverityPreferencesUtil util;
/**
* Project for a project propertypage, or null for a workspace preference page.
*/
@@ -64,6 +66,8 @@ public abstract class AbstractProblemSeverityPreferencesPage extends FieldEditor
*/
private LiveVariable<Boolean> enablePreferences = new LiveVariable<>(true);
private boolean initialized;
private static final Comparator<ProblemType> PROBLEM_TYPE_COMPARATOR = new Comparator<ProblemType>() {
public int compare(ProblemType o1, ProblemType o2) {
@@ -76,9 +80,9 @@ public abstract class AbstractProblemSeverityPreferencesPage extends FieldEditor
{"Ignore", ProblemSeverity.IGNORE.toString()}
};
protected AbstractProblemSeverityPreferencesPage() {
protected AbstractProblemSeverityPreferencesPage(ProblemSeverityPreferencesUtil util) {
super(FieldEditorPreferencePage.GRID);
initializeDefaults();
this.util = util;
}
/**
@@ -90,7 +94,7 @@ public abstract class AbstractProblemSeverityPreferencesPage extends FieldEditor
protected void initializeDefaults() {
IEclipsePreferences defaults = DefaultScope.INSTANCE.getNode(getPluginId());
for (ProblemType problemType : getProblemTypes()) {
defaults.put(getPreferenceName(problemType), problemType.getDefaultSeverity().toString());
defaults.put(util.getPreferenceName(problemType), problemType.getDefaultSeverity().toString());
}
try {
defaults.flush();
@@ -112,12 +116,16 @@ public abstract class AbstractProblemSeverityPreferencesPage extends FieldEditor
@Override
protected void createFieldEditors() {
if (!initialized) {
initialized = true;
initializeDefaults();
}
ProblemType[] problemTypes = getProblemTypes().toArray(new ProblemType[0]);
Arrays.sort(problemTypes, PROBLEM_TYPE_COMPARATOR);
for (ProblemType problemType : problemTypes) {
ComboFieldEditor field = new ComboFieldEditor(
ProblemSeverityPreferencesUtil.getPreferenceName(problemType),
util.getPreferenceName(problemType),
problemType.getLabel(),
SEVERITY_NAMES_AND_VALUES,
getFieldEditorParent()

View File

@@ -35,15 +35,18 @@ public class PreferencesBasedSeverityProvider implements SeverityProvider {
private IPreferenceStore workspacePrefs;
private Map<ProblemType, ProblemSeverity> cache = null;
private final ProblemSeverityPreferencesUtil util;
public PreferencesBasedSeverityProvider(IPreferenceStore projectPrefs, IPreferenceStore workspacePrefs, EditorType editorType) {
public PreferencesBasedSeverityProvider(ProblemSeverityPreferencesUtil util, IPreferenceStore projectPrefs, IPreferenceStore workspacePrefs, EditorType editorType) {
this.util = util;
this.projectPrefs = projectPrefs;
this.workspacePrefs = workspacePrefs;
this.editorType = editorType;
}
public PreferencesBasedSeverityProvider(IProject project, String pluginId, EditorType editorType) {
public PreferencesBasedSeverityProvider(ProblemSeverityPreferencesUtil util, IProject project, String pluginId, EditorType editorType) {
this(
util,
new ScopedPreferenceStore(new ProjectScope(project), pluginId),
new ScopedPreferenceStore(InstanceScope.INSTANCE, pluginId),
editorType
@@ -56,7 +59,7 @@ public class PreferencesBasedSeverityProvider implements SeverityProvider {
}
ProblemSeverity existing = cache.get(problemType);
if (existing==null) {
cache.put(problemType, existing = ProblemSeverityPreferencesUtil.getSeverity(getPrefs(), problemType));
cache.put(problemType, existing = util.getSeverity(getPrefs(), problemType));
}
return existing;
}
@@ -71,7 +74,7 @@ public class PreferencesBasedSeverityProvider implements SeverityProvider {
private boolean useProjectPreferences() {
if (projectPrefs!=null) {
return ProblemSeverityPreferencesUtil.projectPreferencesEnabled(projectPrefs, editorType);
return util.projectPreferencesEnabled(projectPrefs, editorType);
}
return false;
}

View File

@@ -24,17 +24,21 @@ import org.springsource.ide.eclipse.commons.core.util.StringUtil;
*/
public class ProblemSeverityPreferencesUtil {
public static final String PREFERENCE_PREFIX = "spring.properties.editor.problem.";
public final String PREFERENCE_PREFIX;// = "spring.properties.editor.problem.";
public static final String ENABLE_PROJECT_PREFERENCES(EditorType et) {
public ProblemSeverityPreferencesUtil(String preferencePrefix) {
this.PREFERENCE_PREFIX = preferencePrefix;
}
public final String ENABLE_PROJECT_PREFERENCES(EditorType et) {
return PREFERENCE_PREFIX+et+".project.prefs.enabled";
}
public static String getPreferenceName(ProblemType problemType) {
return PREFERENCE_PREFIX+problemType.toString();
public String getPreferenceName(ProblemType problemType) {
return PREFERENCE_PREFIX+problemType.getId();
}
public static ProblemSeverity getSeverity(IPreferenceStore prefs, ProblemType problemType) {
public ProblemSeverity getSeverity(IPreferenceStore prefs, ProblemType problemType) {
String value = prefs.getString(getPreferenceName(problemType));
try {
if (StringUtil.hasText(value)) {
@@ -47,15 +51,15 @@ public class ProblemSeverityPreferencesUtil {
return problemType.getDefaultSeverity();
}
public static void setSeverity(IPreferenceStore prefs, ProblemType problemType, ProblemSeverity severity) {
public void setSeverity(IPreferenceStore prefs, ProblemType problemType, ProblemSeverity severity) {
prefs.setValue(getPreferenceName(problemType), severity.toString());
}
public static boolean projectPreferencesEnabled(IPreferenceStore projectPrefs, EditorType et) {
public boolean projectPreferencesEnabled(IPreferenceStore projectPrefs, EditorType et) {
return projectPrefs.getBoolean(ENABLE_PROJECT_PREFERENCES(et));
}
public static void enableProjectPrefs(IPreferenceStore projectPrefs, EditorType et, boolean enable) {
public void enableProjectPrefs(IPreferenceStore projectPrefs, EditorType et, boolean enable) {
projectPrefs.setValue(ENABLE_PROJECT_PREFERENCES(et), enable);
}

View File

@@ -0,0 +1,99 @@
/*******************************************************************************
* Copyright (c) 2020 Pivotal, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Pivotal, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.editor.support.preferences;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.springframework.ide.eclipse.editor.support.reconcile.ProblemSeverity;
import org.springframework.ide.eclipse.editor.support.reconcile.ProblemType;
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
public abstract class ProblemSeverityPreferityPageFromMetadata extends AbstractProblemSeverityPreferencesPage {
public static Map<String, ProblemTypeData[]> readFromFile(File metadataFile) throws FileNotFoundException, IOException {
Gson gson = new Gson();
TypeToken<Map<String, ProblemTypeData[]>> tt = new TypeToken<Map<String,ProblemTypeData[]>>() {};
try (Reader json = new FileReader(metadataFile)) {
return gson.fromJson(json, tt.getType());
}
}
public static class ProblemTypeData implements ProblemType {
String code;
String label;
String description;
String defaultSeverity;
public ProblemTypeData() {}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public ProblemSeverity getDefaultSeverity() {
return ProblemSeverity.valueOf(defaultSeverity);
}
public void setDefaultSeverity(String defaultSeverity) {
this.defaultSeverity = defaultSeverity;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
@Override
public String getId() {
return code;
}
}
private ProblemType[] problemTypes;
public ProblemSeverityPreferityPageFromMetadata(ProblemSeverityPreferencesUtil util, ProblemTypeData[] problemTypeJsonData) {
super(util);
this.problemTypes = problemTypeJsonData;
}
@Override
protected List<ProblemType> getProblemTypes() {
return Arrays.asList(problemTypes);
}
@Override
protected String getEnableProjectPreferencesKey() {
// TODO Auto-generated method stub
return null;
}
}