2016-08-10 2 views
0

Ich bin ziemlich neu in Eclipse Plugin-Entwicklung, also brauche ich ein bisschen Hilfe. Ich habe ein Projekt, in dem ich die aktuelle Position des Cursors innerhalb eines aktiven Editors erhalten muss und auf eine Schaltfläche klicke, um in einem Dialogfeld die Methode anzuzeigen, die es direkt umgibt. Ich habe folgendes versucht und bin bisher nur in der Lage, den Namen der Methode zu erhalten, aber nicht den gesamten Quellcode, wie ich es möchte. Wenn ich nur mit compilationUnit versuche, kann ich auch den gesamten Quellcode des aktiven Editors bekommen. Andere Fragen scheinen nur den Namen der Methode zu erfordern, aber ich bin daran interessiert, den vollständigen Quellcode der Methode zu erhalten. Gibt es eine Möglichkeit, den Quellcode nur der Methode zu erhalten, die den Cursor direkt umgibt?Wie bekomme ich die Methode direkt um die Caret-Position?

IWorkbenchPage page = window.getActivePage(); 
    IEditorPart editor = page.getActiveEditor(); 
    ITextEditor textEditor = (ITextEditor) page.getActiveEditor(); 
    IJavaElement element = JavaUI.getEditorInputJavaElement(textEditor.getEditorInput()); 
    if (element instanceof ICompilationUnit) { 
     ITextSelection selection = (ITextSelection) ((JavaEditor) textEditor).getSelectionProvider().getSelection(); 
     IJavaElement selected; 
     try { 
      selected = ((ICompilationUnit) element).getElementAt(selection.getOffset()); 

      if (selected != null && selected.getElementType() == IJavaElement.METHOD) { 
       return (IMethod) selected; 
      } 

      MessageDialog.openInformation(
        window.getShell(), 
        editor.getTitle(), 
        selected +"\n"); //(IMethod) 
     } catch (JavaModelException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

Antwort

0

Ja, also habe ich eine Antwort gefunden. Es dauerte eine Weile, aber ich fand es schließlich heraus.

IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event); 

    try { 
     IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); 

     ISelection selection = workbenchWindow.getSelectionService().getSelection(); 
     ITextSelection textSelection; 
     if (selection instanceof ITextSelection) 
      textSelection = (ITextSelection) selection; 
     else 
      throw new RuntimeException("No text selection"); 

     IEditorInput editorInput = workbenchWindow.getActivePage().getActiveEditor().getEditorInput(); 
     ICompilationUnit compilationUnit = JavaUI.getWorkingCopyManager().getWorkingCopy(editorInput); 
     IJavaElement elementWithCursorInside = compilationUnit.getElementAt(textSelection.getOffset()); 
     ISourceReference sourceReference; 
     if (elementWithCursorInside instanceof ISourceReference) 
      sourceReference = (ISourceReference) elementWithCursorInside; 
     else 
      throw new RuntimeException("Not an ISourceReference"); 

     MessageDialog.openInformation(window.getShell(), "Source Code of the Method", sourceReference.getSource()); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return null; 

das scheint für mich jetzt gut zu funktionieren. Ich hoffe, dass meine Lösung jemand anderen mit dem gleichen Problem

hilft
Verwandte Themen