這裏的a way在默認Java編輯器上創建自定義懸停。
下面是針對您的特定使用情況,結合custom script to detect java elements,針對該問題的@ PKeidel LangHover類的自定義實現。請注意,您應將ANNOTATION_NAME
的值更改爲自定義註釋的值,並將getHoverInfo
的返回值更改爲您希望自定義懸停包含的任何值。
public class LangHover implements IJavaEditorTextHover
{
public static final String ANNOTATION_NAME = "YourCustomAnnotation";
@SuppressWarnings("restriction")
public static ICodeAssist getCodeAssist(IEditorPart fEditor)
{
if (fEditor != null) {
IEditorInput input= fEditor.getEditorInput();
if (input instanceof IClassFileEditorInput) {
IClassFileEditorInput cfeInput= (IClassFileEditorInput) input;
return cfeInput.getClassFile();
}
WorkingCopyManager manager= JavaPlugin.getDefault().getWorkingCopyManager();
return manager.getWorkingCopy(input, false);
}
return null;
}
public static IEditorPart getActiveEditor()
{
IWorkbenchWindow window= PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (window != null) {
IWorkbenchPage page= window.getActivePage();
if (page != null) {
return page.getActiveEditor();
}
}
return null;
}
// When this returns true, the custom hover should be shown.
public static boolean elementIsCustomAnnotation(ITextViewer textViewer, IRegion hoverRegion)
{
IEditorPart activeEditor = getActiveEditor();
ICodeAssist resolve = getCodeAssist(activeEditor);
IJavaElement[] detectedJavaElements = null;
if (resolve != null)
{
try
{
detectedJavaElements = resolve.codeSelect(hoverRegion.getOffset(), hoverRegion.getLength());
}
catch (JavaModelException x)
{
System.out.println("JavaModelException occured");
}
}
for (IJavaElement javaElement : detectedJavaElements)
{
// If I found an element of type IJavaElement.ANNOTATION
// and its name equals ANNOTATION_NAME, return true
if (javaElement.getElementType() == IJavaElement.ANNOTATION && javaElement.getElementName().equals(ANNOTATION_NAME))
{
return true;
}
}
return false;
}
@Override
public String getHoverInfo(ITextViewer textviewer, IRegion region)
{
if(elementIsCustomAnnotation(textviewer, region))
{
return "Your own hover text goes here"";
}
return null; // Shows the default Hover (Java Docs)
}
}
基本上,這裏發生了什麼是elementIsCustomAnnotation
正在檢查Java元素(一個或多個)用戶懸停,並將其保存在detectedJavaElements
數組中,然後檢查數組找到名字相同的註解ANNOTATION_NAME
。