Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNitin Dahyabhai2020-07-19 19:02:25 +0000
committerNitin Dahyabhai2020-07-19 19:02:25 +0000
commita7ad80b1ee9a0b1ec3a730dd1010dfe24539f523 (patch)
treeaeda595742a06986484875f714fee6d56140d000
parentd9ca7702d1573dadf5284a3ec9b7b239465cac2c (diff)
downloadwebtools.sourceediting-a7ad80b1ee9a0b1ec3a730dd1010dfe24539f523.tar.gz
webtools.sourceediting-a7ad80b1ee9a0b1ec3a730dd1010dfe24539f523.tar.xz
webtools.sourceediting-a7ad80b1ee9a0b1ec3a730dd1010dfe24539f523.zip
[565338] Enable text hovers from the generic editor
-rw-r--r--core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextViewerConfiguration.java4
-rw-r--r--core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/PreferenceInitializer.java4
-rw-r--r--core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIMessages.java3
-rw-r--r--core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIPluginResources.properties3
-rw-r--r--core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/EditorPreferenceNames.java5
-rw-r--r--core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/ui/TextHoverPreferenceTab.java26
-rw-r--r--core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/taginfo/BestMatchHover.java71
7 files changed, 89 insertions, 27 deletions
diff --git a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextViewerConfiguration.java b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextViewerConfiguration.java
index 4d88757c71..4e8effe189 100644
--- a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextViewerConfiguration.java
+++ b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextViewerConfiguration.java
@@ -524,7 +524,7 @@ public class StructuredTextViewerConfiguration extends TextSourceViewerConfigura
* @param partitionType
* the partition type for which the lineStyleProviders are
* applicable
- * @return LineStyleProvders or null if should not be supported
+ * @return LineStyleProvders or <code>null</code> if should not be supported
*/
public LineStyleProvider[] getLineStyleProviders(ISourceViewer sourceViewer, String partitionType) {
return null;
@@ -736,7 +736,7 @@ public class StructuredTextViewerConfiguration extends TextSourceViewerConfigura
}
/**
- * @return the associated content assistnat
+ * @return the associated content assistant
*/
protected StructuredContentAssistant getContentAssistant() {
return this.fContentAssistant;
diff --git a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/PreferenceInitializer.java b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/PreferenceInitializer.java
index 187583ea74..f89e5f4188 100644
--- a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/PreferenceInitializer.java
+++ b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/PreferenceInitializer.java
@@ -52,7 +52,7 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer {
store.setDefault(EditorPreferenceNames.READ_ONLY_FOREGROUND_SCALE, 30);
store.setDefault(EditorPreferenceNames.CODEASSIST_AUTOACTIVATION_DELAY, 500);
-
+
initAppearanceAndHoverPreferences(store, registry);
}
@@ -85,5 +85,7 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer {
* SWT.MOD2 is currently SWT.COMMAND on Mac; SWT.CONTROL elsewhere
*/
store.setDefault(AppearancePreferenceNames.EDITOR_TEXT_HOVER_MODIFIERS, "combinationHover|true|0;problemHover|false|0;documentationHover|false|0;annotationHover|true|" + mod2Name); //$NON-NLS-1$
+
+ store.setDefault(EditorPreferenceNames.PREFER_GENERIC_HOVER, true);
}
} \ No newline at end of file
diff --git a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIMessages.java b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIMessages.java
index d581e5b1ce..c765af1398 100644
--- a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIMessages.java
+++ b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIMessages.java
@@ -1,5 +1,5 @@
/**********************************************************************
- * Copyright (c) 2005, 2015 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2005, 2020 IBM Corporation and others. All rights reserved. This
* program and the accompanying materials are made available under the terms of
* the Eclipse Public License 2.0 which accompanies this distribution, and is
* available at https://www.eclipse.org/legal/epl-2.0/
@@ -256,6 +256,7 @@ public class SSEUIMessages extends NLS {
public static String TextHoverPreferenceTab_hoverPreferences;
public static String TextHoverPreferenceTab_keyModifier;
public static String TextHoverPreferenceTab_description;
+ public static String TextHoverPreferenceTab_generic;
public static String TextHoverPreferenceTab_modifierIsNotValid;
public static String TextHoverPreferenceTab_modifierIsNotValidForHover;
public static String TextHoverPreferenceTab_duplicateModifier;
diff --git a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIPluginResources.properties b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIPluginResources.properties
index 0bfd5d2280..6afd12cfd9 100644
--- a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIPluginResources.properties
+++ b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIPluginResources.properties
@@ -1,5 +1,5 @@
###############################################################################
-# Copyright (c) 2001, 2015 IBM Corporation and others.
+# Copyright (c) 2001, 2020 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at
@@ -232,6 +232,7 @@ TextHoverPreferenceTab_title=Hovers
TextHoverPreferenceTab_hoverPreferences=Text &Hover key modifier preferences:
TextHoverPreferenceTab_keyModifier=Pressed key &modifier while hovering:
TextHoverPreferenceTab_description=Description:
+TextHoverPreferenceTab_generic=Prefer Generic Editor hovers when available
TextHoverPreferenceTab_modifierIsNotValid=Modifier ''{0}'' is not valid.
TextHoverPreferenceTab_modifierIsNotValidForHover=Modifier ''{0}'' for ''{1}'' hover is not valid.
TextHoverPreferenceTab_duplicateModifier=''{0}'' hover uses the same modifier as ''{1}'' hover.
diff --git a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/EditorPreferenceNames.java b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/EditorPreferenceNames.java
index 71752e8958..18bedbda5f 100644
--- a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/EditorPreferenceNames.java
+++ b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/EditorPreferenceNames.java
@@ -44,4 +44,9 @@ public class EditorPreferenceNames {
* </p>
*/
public final static String CODEASSIST_AUTOACTIVATION_DELAY = "content_assist_autoactivation_delay"; //$NON-NLS-1$
+
+ /**
+ * Preference name for boolean value controlling whether to defer to Generic Editor hovers
+ */
+ public final static String PREFER_GENERIC_HOVER = "prefer_generic_hover"; //$NON-NLS-1$
}
diff --git a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/ui/TextHoverPreferenceTab.java b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/ui/TextHoverPreferenceTab.java
index 6bb5c747be..57fce1c8a3 100644
--- a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/ui/TextHoverPreferenceTab.java
+++ b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/preferences/ui/TextHoverPreferenceTab.java
@@ -16,12 +16,14 @@ package org.eclipse.wst.sse.ui.internal.preferences.ui;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.preference.PreferencePage;
-import org.eclipse.jface.text.Assert;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
@@ -56,6 +58,7 @@ import org.eclipse.ui.PlatformUI;
import org.eclipse.wst.sse.ui.internal.SSEUIMessages;
import org.eclipse.wst.sse.ui.internal.SSEUIPlugin;
import org.eclipse.wst.sse.ui.internal.editor.IHelpContextIds;
+import org.eclipse.wst.sse.ui.internal.preferences.EditorPreferenceNames;
import org.eclipse.wst.sse.ui.internal.preferences.OverlayPreferenceStore;
import org.eclipse.wst.sse.ui.internal.taginfo.TextHoverManager;
import org.eclipse.wst.sse.ui.internal.taginfo.TextHoverManager.TextHoverDescriptor;
@@ -286,6 +289,10 @@ public class TextHoverPreferenceTab extends AbstractPreferenceTab {
gd.horizontalSpan = 2;
fDescription.setLayoutData(gd);
+ new Label(hoverComposite, SWT.NONE).setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 2, 1));
+
+ addCheckBox(hoverComposite, SSEUIMessages.TextHoverPreferenceTab_generic, EditorPreferenceNames.PREFER_GENERIC_HOVER, 0);
+
initialize();
Dialog.applyDialogFont(hoverComposite);
@@ -295,9 +302,10 @@ public class TextHoverPreferenceTab extends AbstractPreferenceTab {
}
private OverlayPreferenceStore.OverlayKey[] createOverlayStoreKeys() {
- ArrayList overlayKeys = new ArrayList();
+ List<OverlayPreferenceStore.OverlayKey> overlayKeys = new ArrayList<>();
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, AppearancePreferenceNames.EDITOR_TEXT_HOVER_MODIFIERS));
+ overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, EditorPreferenceNames.PREFER_GENERIC_HOVER));
OverlayPreferenceStore.OverlayKey[] keys = new OverlayPreferenceStore.OverlayKey[overlayKeys.size()];
overlayKeys.toArray(keys);
@@ -383,8 +391,9 @@ public class TextHoverPreferenceTab extends AbstractPreferenceTab {
fModifierEditor.setEnabled(false);
// initialize checkboxes in hover table
- for (int i = 0; i < fTextHovers.length; i++)
+ for (int i = 0; i < fTextHovers.length; i++) {
fHoverTable.getItem(i).setChecked(fTextHovers[i].isEnabled());
+ }
fHoverTableViewer.refresh();
}
@@ -414,9 +423,10 @@ public class TextHoverPreferenceTab extends AbstractPreferenceTab {
public void performOk() {
String textHoverString = generateTextHoverString();
getOverlayStore().setValue(AppearancePreferenceNames.EDITOR_TEXT_HOVER_MODIFIERS, textHoverString);
- getTextHoverManager().resetTextHovers(); // notify text hover manager
- // it should reset to get
- // latest preferences
+ /*
+ * notify text hover manager it should reset to get latest preferences
+ */
+ getTextHoverManager().resetTextHovers();
}
/**
@@ -435,7 +445,7 @@ public class TextHoverPreferenceTab extends AbstractPreferenceTab {
status = new StatusInfo(IStatus.ERROR, NLS.bind(SSEUIMessages.TextHoverPreferenceTab_modifierIsNotValid, new String[]{hoverConfig.getModifierString()}));
int i = 0;
- HashMap stateMasks = new HashMap(fTextHovers.length);
+ Map<Integer, String> stateMasks = new HashMap<>(fTextHovers.length);
while (status.isOK() && i < fTextHovers.length) {
if (fTextHovers[i].isEnabled()) {
String label = fTextHovers[i].getLabel();
@@ -443,7 +453,7 @@ public class TextHoverPreferenceTab extends AbstractPreferenceTab {
if (stateMask.intValue() == -1)
status = new StatusInfo(IStatus.ERROR, NLS.bind(SSEUIMessages.TextHoverPreferenceTab_modifierIsNotValidForHover, new String[]{fTextHovers[i].getModifierString(), label}));
else if (stateMasks.containsKey(stateMask))
- status = new StatusInfo(IStatus.ERROR, NLS.bind(SSEUIMessages.TextHoverPreferenceTab_duplicateModifier, new String[]{label, (String) stateMasks.get(stateMask)}));
+ status = new StatusInfo(IStatus.ERROR, NLS.bind(SSEUIMessages.TextHoverPreferenceTab_duplicateModifier, new String[]{label, stateMasks.get(stateMask)}));
else
stateMasks.put(stateMask, label);
}
diff --git a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/taginfo/BestMatchHover.java b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/taginfo/BestMatchHover.java
index 3443c2217d..af578af4f1 100644
--- a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/taginfo/BestMatchHover.java
+++ b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/taginfo/BestMatchHover.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2013 IBM Corporation and others.
+ * Copyright (c) 2005, 2020 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
@@ -15,17 +15,28 @@
package org.eclipse.wst.sse.ui.internal.taginfo;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Set;
+import org.eclipse.core.filebuffers.FileBuffers;
+import org.eclipse.core.filebuffers.ITextFileBuffer;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.content.IContentType;
+import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IInformationControlCreator;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextHover;
import org.eclipse.jface.text.ITextHoverExtension;
import org.eclipse.jface.text.ITextHoverExtension2;
import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.ui.internal.genericeditor.GenericEditorPlugin;
import org.eclipse.wst.sse.ui.internal.ExtendedConfigurationBuilder;
import org.eclipse.wst.sse.ui.internal.Logger;
+import org.eclipse.wst.sse.ui.internal.SSEUIPlugin;
+import org.eclipse.wst.sse.ui.internal.preferences.EditorPreferenceNames;
/**
* Provides the best hover help documentation (by using other hover help
@@ -40,7 +51,7 @@ public class BestMatchHover implements ITextHover, ITextHoverExtension, ITextHov
*/
private ITextHover[] fTagInfoHovers;
/** List of text hovers to consider in best match */
- private List fTextHovers;
+ private List<ITextHover> fTextHovers;
/**
* Partition type for which to create text hovers (when deferred for
* performance)
@@ -49,6 +60,8 @@ public class BestMatchHover implements ITextHover, ITextHoverExtension, ITextHov
private ITextHover controlCreatorProvider;
+ private Set<IContentType> fDetectedContentTypes;
+
public BestMatchHover(ITextHover infoTagHover) {
this(new ITextHover[]{infoTagHover});
}
@@ -67,8 +80,8 @@ public class BestMatchHover implements ITextHover, ITextHoverExtension, ITextHov
*
* @return List of ITextHover - in abstract class this is empty list
*/
- private List createTextHoversList() {
- List hoverList = new ArrayList();
+ private List<ITextHover> createTextHoversList(ITextViewer textViewer) {
+ List<ITextHover> hoverList = new ArrayList<>();
// if currently debugging, then add the debug hover to the list of
// best match
if (Logger.isTracing(DebugInfoHoverProcessor.TRACEFILTER)) {
@@ -78,8 +91,8 @@ public class BestMatchHover implements ITextHover, ITextHoverExtension, ITextHov
hoverList.add(new ProblemAnnotationHoverProcessor());
if (fPartitionType != null && fTagInfoHovers == null) {
- List extendedTextHover = ExtendedConfigurationBuilder.getInstance().getConfigurations(ExtendedConfigurationBuilder.DOCUMENTATIONTEXTHOVER, fPartitionType);
- fTagInfoHovers = (ITextHover[]) extendedTextHover.toArray(new ITextHover[extendedTextHover.size()]);
+ List<ITextHover> extendedTextHover = ExtendedConfigurationBuilder.getInstance().getConfigurations(ExtendedConfigurationBuilder.DOCUMENTATIONTEXTHOVER, fPartitionType);
+ fTagInfoHovers = extendedTextHover.toArray(new ITextHover[extendedTextHover.size()]);
}
if (fTagInfoHovers != null) {
for (int i = 0; i < fTagInfoHovers.length; i++) {
@@ -87,9 +100,39 @@ public class BestMatchHover implements ITextHover, ITextHoverExtension, ITextHov
}
}
hoverList.add(new AnnotationHoverProcessor());
+
+ if (SSEUIPlugin.getInstance().getPreferenceStore().getBoolean(EditorPreferenceNames.PREFER_GENERIC_HOVER)) {
+ Set<IContentType> detectedContentTypes = detectContentTypes(textViewer);
+ if (textViewer instanceof ISourceViewer && detectedContentTypes != null) {
+ List<ITextHover> genericHovers = GenericEditorPlugin.getDefault().getHoverRegistry().getAvailableHovers((ISourceViewer) textViewer, null, detectedContentTypes);
+ hoverList.addAll(0, genericHovers);
+ }
+ }
return hoverList;
}
+ private Set<IContentType> detectContentTypes(ITextViewer viewer) {
+ if (fDetectedContentTypes == null) {
+ Set<IContentType> types = new HashSet<>();
+ IDocument currentDocument = viewer.getDocument();
+ if (currentDocument != null) {
+ ITextFileBuffer textFileBuffer = FileBuffers.getTextFileBufferManager().getTextFileBuffer(currentDocument);
+ if (textFileBuffer != null) {
+ IContentType[] foundTypes = Platform.getContentTypeManager().findContentTypesFor(textFileBuffer.getLocation().lastSegment());
+ for (int i = 0; i < foundTypes.length; i++) {
+ IContentType type = foundTypes[i];
+ while (type != null) {
+ types.add(type);
+ type = type.getBaseType();
+ }
+ }
+ }
+ }
+ fDetectedContentTypes = types;
+ }
+ return fDetectedContentTypes;
+ }
+
public IInformationControlCreator getHoverControlCreator() {
IInformationControlCreator creator = null;
@@ -118,9 +161,9 @@ public class BestMatchHover implements ITextHover, ITextHoverExtension, ITextHov
// either had no best match hover or best match hover returned null
if (displayText == null) {
// go through list of text hovers and return first display string
- Iterator i = getTextHovers().iterator();
+ Iterator<ITextHover> i = getTextHovers(viewer).iterator();
while ((i.hasNext()) && (displayText == null)) {
- ITextHover hover = (ITextHover) i.next();
+ ITextHover hover = i.next();
displayText = hover.getHoverInfo(viewer, hoverRegion);
if (displayText != null) {
controlCreatorProvider = hover;
@@ -146,9 +189,9 @@ public class BestMatchHover implements ITextHover, ITextHoverExtension, ITextHov
// either had no best match hover or best match hover returned null
if (information == null) {
// go through list of text hovers and return first display string
- Iterator i = getTextHovers().iterator();
+ Iterator<ITextHover> i = getTextHovers(textViewer).iterator();
while ((i.hasNext()) && (information == null)) {
- ITextHover hover = (ITextHover) i.next();
+ ITextHover hover = i.next();
if (hover == fBestMatchHover)
continue;
if (hover instanceof ITextHoverExtension2) {
@@ -179,9 +222,9 @@ public class BestMatchHover implements ITextHover, ITextHoverExtension, ITextHov
// go through list of text hovers and return first hover region
ITextHover hover = null;
- Iterator i = getTextHovers().iterator();
+ Iterator<ITextHover> i = getTextHovers(viewer).iterator();
while ((i.hasNext()) && (hoverRegion == null)) {
- hover = (ITextHover) i.next();
+ hover = i.next();
hoverRegion = hover.getHoverRegion(viewer, offset);
}
@@ -194,9 +237,9 @@ public class BestMatchHover implements ITextHover, ITextHoverExtension, ITextHov
return hoverRegion;
}
- private List getTextHovers() {
+ private List<ITextHover> getTextHovers(ITextViewer viewer) {
if (fTextHovers == null) {
- fTextHovers = createTextHoversList();
+ fTextHovers = createTextHoversList(viewer);
}
return fTextHovers;
}

Back to the top