PT #165419026: Hyperlinks in XML config files

This commit is contained in:
BoykoAlex
2019-05-07 12:49:26 -04:00
parent 6db573175e
commit 3b396e975f
40 changed files with 1782 additions and 171 deletions

View File

@@ -109,9 +109,21 @@
<extension
point="org.eclipse.ui.preferencePages">
<page
category="org.springframework.tooling.ls.eclipse.commons.console.preferences"
class="org.springframework.tooling.boot.ls.BootLanguageServerPreferencesPage"
category="org.springframework.tooling.boot.ls.preferences"
class="org.springframework.tooling.boot.ls.BootJavaPreferencesPage"
id="org.springframework.tooling.boot.java.ls.preferences"
name="Spring Boot Java">
</page>
<page
category="org.springframework.tooling.boot.ls.preferences"
class="org.springframework.tooling.boot.ls.XmlConfigPreferencePage"
id="org.springframework.tooling.boot.xml.ls.preferences"
name="Spring XML Config">
</page>
<page
category="org.springframework.tooling.ls.eclipse.commons.console.preferences"
class="org.springframework.tooling.boot.ls.SpringBootLanguageServerPreferencePage"
id="org.springframework.tooling.boot.ls.preferences"
name="Spring Boot Language Server">
</page>
</extension>

View File

@@ -12,18 +12,12 @@ package org.springframework.tooling.boot.ls;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.springframework.tooling.ls.eclipse.commons.LanguageServerCommonsActivator;
@@ -35,11 +29,7 @@ import org.springframework.tooling.ls.eclipse.commons.preferences.PreferenceCons
* @author Alex Boyko
*
*/
public class BootLanguageServerPreferencesPage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
public BootLanguageServerPreferencesPage() {
super(GRID);
}
public class BootJavaPreferencesPage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
/**
* Starts a preference change listener that keeps code mining preferences in sync with
@@ -84,48 +74,22 @@ public class BootLanguageServerPreferencesPage extends FieldEditorPreferencePage
setPreferenceStore(BootLanguageServerPlugin.getDefault().getPreferenceStore());
}
@Override
protected void adjustGridLayout() {
// Keep empty
}
@Override
protected void createFieldEditors() {
final IPreferenceStore commonsLsPrefs = LanguageServerCommonsActivator.getInstance().getPreferenceStore();
Composite contents = new Composite(getFieldEditorParent(), SWT.NONE);
GridData gd = new GridData(GridData.FILL_BOTH);
contents.setLayoutData(gd);
contents.setLayout(new GridLayout());
Composite fieldEditorParent = getFieldEditorParent();
Group liveBeansGroup = new Group(contents, SWT.NONE);
liveBeansGroup.setText("Spring Boot Live Beans");
liveBeansGroup.setLayout(new GridLayout(1, false));
liveBeansGroup.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create());
addField(new BooleanFieldEditor(Constants.PREF_BOOT_HINTS, "Live Boot Hint Decorators", liveBeansGroup));
addField(new BooleanFieldEditor(PreferenceConstants.HIGHLIGHT_CODELENS_PREFS, "Highlights CodeLens", liveBeansGroup) {
addField(new BooleanFieldEditor(Constants.PREF_SCAN_JAVA_TEST_SOURCES, "Scan Java test sources", fieldEditorParent));
addField(new BooleanFieldEditor(Constants.PREF_BOOT_HINTS, "Live Boot Hint Decorators", fieldEditorParent));
addField(new BooleanFieldEditor(PreferenceConstants.HIGHLIGHT_CODELENS_PREFS, "Highlights CodeLens", fieldEditorParent) {
@Override
public IPreferenceStore getPreferenceStore() {
return commonsLsPrefs;
}
});
addField(new BooleanFieldEditor(Constants.PREF_CHANGE_DETECTION, "Live Boot Change Detection", liveBeansGroup));
addField(new BooleanFieldEditor(Constants.PREF_CHANGE_DETECTION, "Live Boot Change Detection", fieldEditorParent));
Group symbolGroup = new Group(contents, SWT.NONE);
symbolGroup.setText("Spring Symbols");
symbolGroup.setLayout(new GridLayout(1, false));
symbolGroup.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create());
addField(new BooleanFieldEditor(Constants.PREF_SCAN_JAVA_TEST_SOURCES, "Scan Java test sources", symbolGroup));
addField(new BooleanFieldEditor(Constants.PREF_SUPPORT_SPRING_XML_CONFIGS, "Scan Spring XML Config files (experimental)", symbolGroup));
Composite scanFoldersComposite = new Composite(symbolGroup, SWT.NONE);
scanFoldersComposite.setFont(symbolGroup.getFont());
scanFoldersComposite.setLayoutData(GridDataFactory.swtDefaults().span(2, 1).align(GridData.FILL, GridData.BEGINNING).grab(true, false).create());
scanFoldersComposite.setLayout(new GridLayout(2, false));
addField(new StringFieldEditor(Constants.PREF_XML_CONFIGS_SCAN_FOLDERS, "Scan Spring XML in folders:", scanFoldersComposite));
}
}

View File

@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2017, 2018 Pivotal, Inc.
* Copyright (c) 2017, 2019 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
@@ -45,7 +45,7 @@ public class BootLanguageServerPlugin extends AbstractUIPlugin {
plugin = this;
super.start(context);
deactivateDuplicateKeybindings();
BootLanguageServerPreferencesPage.manageCodeMiningPreferences();
BootJavaPreferencesPage.manageCodeMiningPreferences();
}
@Override

View File

@@ -21,6 +21,8 @@ public class Constants {
public static final String PREF_SUPPORT_SPRING_XML_CONFIGS = "boot-java.support-spring-xml-config.on";
public static final String PREF_XML_CONFIGS_SCAN_FOLDERS = "boot-java.support-spring-xml-config.scan-folders-globs";
public static final String PREF_SCAN_JAVA_TEST_SOURCES = "boot-java.scan-java-test-sources";
public static final String PREF_XML_CONFIGS_HYPERLINKS = "boot-java.support-spring-xml-config.hyperlinks";
public static final String PREF_XML_CONFIGS_CONTENT_ASSIST = "boot-java.support-spring-xml-config.content-assist";
public static final String PREF_CHANGE_DETECTION = "boot-java.change-detection.on";
}

View File

@@ -213,6 +213,8 @@ public class DelegatingStreamConnectionProvider implements StreamConnectionProvi
bootHint.put("on", preferenceStore.getBoolean(Constants.PREF_BOOT_HINTS));
supportXML.put("on", preferenceStore.getBoolean(Constants.PREF_SUPPORT_SPRING_XML_CONFIGS));
supportXML.put("scan-folders-globs", preferenceStore.getString(Constants.PREF_XML_CONFIGS_SCAN_FOLDERS));
supportXML.put("hyperlinks", preferenceStore.getString(Constants.PREF_XML_CONFIGS_HYPERLINKS));
supportXML.put("content-assist", preferenceStore.getString(Constants.PREF_XML_CONFIGS_CONTENT_ASSIST));
bootChangeDetection.put("on", preferenceStore.getBoolean(Constants.PREF_CHANGE_DETECTION));
scanTestJavaSources.put("on", preferenceStore.getBoolean(Constants.PREF_SCAN_JAVA_TEST_SOURCES));

View File

@@ -29,6 +29,8 @@ public class PrefsInitializer extends AbstractPreferenceInitializer {
IPreferenceStore preferenceStore = BootLanguageServerPlugin.getDefault().getPreferenceStore();
preferenceStore.setDefault(Constants.PREF_BOOT_HINTS, true);
preferenceStore.setDefault(Constants.PREF_SUPPORT_SPRING_XML_CONFIGS, false);
preferenceStore.setDefault(Constants.PREF_XML_CONFIGS_HYPERLINKS, true);
preferenceStore.setDefault(Constants.PREF_XML_CONFIGS_CONTENT_ASSIST, true);
preferenceStore.setDefault(Constants.PREF_XML_CONFIGS_SCAN_FOLDERS, "**/src/main/**");
preferenceStore.setDefault(Constants.PREF_CHANGE_DETECTION, false);
preferenceStore.setDefault(Constants.PREF_SCAN_JAVA_TEST_SOURCES, false);

View File

@@ -0,0 +1,43 @@
/*******************************************************************************
* Copyright (c) 2019 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.tooling.boot.ls;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
public class SpringBootLanguageServerPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
public SpringBootLanguageServerPreferencePage() {
}
public SpringBootLanguageServerPreferencePage(String title) {
super(title);
}
public SpringBootLanguageServerPreferencePage(String title, ImageDescriptor image) {
super(title, image);
}
@Override
public void init(IWorkbench workbench) {
}
@Override
protected Control createContents(Composite parent) {
return new Composite(parent, SWT.NONE);
}
}

View File

@@ -0,0 +1,105 @@
/*******************************************************************************
* Copyright (c) 2019 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.tooling.boot.ls;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
/**
*
* @author Alex Boyko
*
*/
public class XmlConfigPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
private List<Runnable> updateXmlSettingControlsEnablement = Collections.emptyList();
private BooleanFieldEditor enableEditor;
public XmlConfigPreferencePage() {
super(GRID);
}
@Override
protected void adjustGridLayout() {
}
@Override
public void init(IWorkbench workbench) {
setPreferenceStore(BootLanguageServerPlugin.getDefault().getPreferenceStore());
}
@Override
public void propertyChange(PropertyChangeEvent event) {
super.propertyChange(event);
if (enableEditor == event.getSource()) {
updateXmlSettingControlsEnablement.forEach(r -> r.run());
}
}
@Override
protected void performDefaults() {
super.performDefaults();
updateXmlSettingControlsEnablement.forEach(r -> r.run());
}
@Override
protected void createFieldEditors() {
Composite fieldEditorParent = getFieldEditorParent();
final boolean xmlEnabled = getPreferenceStore().getBoolean(Constants.PREF_SUPPORT_SPRING_XML_CONFIGS);
updateXmlSettingControlsEnablement = new ArrayList<>();
enableEditor = new BooleanFieldEditor(Constants.PREF_SUPPORT_SPRING_XML_CONFIGS, "Enable Spring XML Config files support", fieldEditorParent);
addField(enableEditor);
Label label = new Label(fieldEditorParent, SWT.SEPARATOR | SWT.HORIZONTAL);
label.setLayoutData(GridDataFactory.swtDefaults().grab(true, false).span(2, 1).align(SWT.FILL, SWT.BEGINNING).create());
Composite settingsComposite = new Composite(fieldEditorParent, SWT.NONE);
settingsComposite.setLayoutData(GridDataFactory.swtDefaults().grab(true, true).align(SWT.FILL, SWT.BEGINNING).create());
settingsComposite.setLayout(new GridLayout(1, false));
BooleanFieldEditor caFieldEditor = new BooleanFieldEditor(Constants.PREF_XML_CONFIGS_CONTENT_ASSIST, "Content Assist in editor", settingsComposite);
addField(caFieldEditor);
caFieldEditor.setEnabled(xmlEnabled, settingsComposite);
updateXmlSettingControlsEnablement.add(() -> caFieldEditor.setEnabled(enableEditor.getBooleanValue(), settingsComposite));
BooleanFieldEditor hyperlinkEditor = new BooleanFieldEditor(Constants.PREF_XML_CONFIGS_HYPERLINKS, "Hyperlinks in editor", settingsComposite);
addField(hyperlinkEditor);
hyperlinkEditor.setEnabled(xmlEnabled, settingsComposite);
updateXmlSettingControlsEnablement.add(() -> hyperlinkEditor.setEnabled(enableEditor.getBooleanValue(), settingsComposite));
Composite scanFoldersComposite = new Composite(settingsComposite, SWT.NONE);
scanFoldersComposite.setFont(settingsComposite.getFont());
scanFoldersComposite.setLayoutData(GridDataFactory.swtDefaults().span(2, 1).align(GridData.FILL, GridData.BEGINNING).grab(true, false).create());
scanFoldersComposite.setLayout(new GridLayout(2, false));
StringFieldEditor scanGlobEditor = new StringFieldEditor(Constants.PREF_XML_CONFIGS_SCAN_FOLDERS, "Scan XML in folders for symbols:", scanFoldersComposite);
addField(scanGlobEditor);
scanGlobEditor.setEnabled(xmlEnabled, scanFoldersComposite);
updateXmlSettingControlsEnablement.add(() -> scanGlobEditor.setEnabled(enableEditor.getBooleanValue(), scanFoldersComposite));
}
}

View File

@@ -62,7 +62,8 @@ public class XMLContentAssistProposalComputer implements IAsyncCompletionProposa
@Override
public List<IContextInformation> computeContextInformation(CompletionProposalInvocationContext context, IProgressMonitor monitor) {
if (!BootLanguageServerPlugin.getDefault().getPreferenceStore().getBoolean(Constants.PREF_SUPPORT_SPRING_XML_CONFIGS)) {
if (!BootLanguageServerPlugin.getDefault().getPreferenceStore().getBoolean(Constants.PREF_SUPPORT_SPRING_XML_CONFIGS)
|| !BootLanguageServerPlugin.getDefault().getPreferenceStore().getBoolean(Constants.PREF_XML_CONFIGS_CONTENT_ASSIST)) {
return Collections.emptyList();
}