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:
@@ -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,
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user