2009-09-15 5 views
5

Ich möchte eine Liste aller Unterklassen einer bestimmten Klasse mit ihren voll qualifizierten Namen erhalten. Ich wollte es von Eclipse kopieren und in eine Textdatei wie folgt einfügen:Liste aller Unterklassen mit vollständig qualifizierten Namen

some.package.Class1 
some.package.Class2 
some.other.package.Class3 
... 

Ich habe versucht:

  • Search | Java | Type, Limit to implementors tun. Aber dieser aus einigen seltsamen Gründen keine Unterklassen von Unterklassen, nur direkte Nachkommen.
  • Öffnen Hierarchy Ansicht für die Klasse, die alle Unterklassen in einer Baumkomponente, aber druckt diese Ansicht erlaubt mir nicht, alle Zeilen auszuwählen und kopieren Sie ihre Namen.

Irgendwelche anderen Tricks? Da es Hunderte von Klassen gibt, wollte ich es vermeiden, es manuell zu machen.

+0

bezogen http://stackoverflow.com/questions/492184/how-do-you-find-all-subclasses-of-a-iven-class-in-java – Narayan

+1

@Narayan: Ich habe die Frage gesehen, Aber das ist programmatisch. Ich habe mit ein paar Klicks auf eine Lösung gehofft. –

+0

Sie konnten tatsächlich eine benutzerdefinierte Ansicht erstellen, viel weniger kompliziert das 'TypeHierarchyViewPart' der" Hierarchieansicht ", aber den gleichen zugrunde liegenden Mechanismus verwenden, um die Hierarchie der Klassen abzurufen/anzuzeigen. – VonC

Antwort

3

Das Verfahren in der Hierarchie Ansicht, die der Hierarchiebaum ist in der org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyLifeCycle tut bauen: Sie können

private ITypeHierarchy createTypeHierarchy(IJavaElement element, IProgressMonitor pm) throws JavaModelException { 
    if (element.getElementType() == IJavaElement.TYPE) { 
     IType type= (IType) element; 
     if (fIsSuperTypesOnly) { 
      return type.newSupertypeHierarchy(pm); 
     } else { 
      return type.newTypeHierarchy(pm); 
     } 
    } else { 

Welche verwendet org.eclipse.jdt.internal.core.SourceType Klasse

/** 
* @see IType 
*/ 
public ITypeHierarchy newTypeHierarchy(IJavaProject project, IProgressMonitor monitor) throws JavaModelException { 
    return newTypeHierarchy(project, DefaultWorkingCopyOwner.PRIMARY, monitor); 
} 

Wenn Sie also eine IJavaElement bekommen können, überprüfen Diese Klassen emulieren das gleiche Ergebnis.

Es verwendet ein org.eclipse.jdt.internal.core.CreateTypeHierarchyOperation

+0

Sie schlagen daher vor, eine benutzerdefinierte Ansicht in Eclipse zu implementieren. Bekomme ich es richtig? –

1

nWire for Java können Sie die vollständige Liste der Klassen geben, die eine gegebene Klasse erweitern oder eine bestimmte Schnittstelle implementieren. Sie erhalten es im nWire-Navigator, der keinen Kopierbefehl bereitstellt.

Sie können jedoch auf die nWire-Datenbank tippen, die eine Standard-H2-Datenbank ist und eine sehr einfache Struktur hat, und alles, was Sie brauchen, mit einer einfachen Abfrage erhalten. Wir werden in der Zukunft Berichtsfunktionen einführen.

IMHO, es wird weniger Aufwand und Sie erhalten ein Werkzeug, das Ihnen viel mehr gibt.

+0

Ich habe das Plugin installiert. Wie tippe ich "in die nWire Datenbank"? Ich sehe keine Aussicht wie diese. Auch hilft die Website nicht dabei. Oder sollte ich einen Datenbank-Client verwenden, um darauf zuzugreifen? Wie lautet der Name der Datenbank? –

+0

Senden Sie mir eine E-Mail an support [at] nwiresoftware.com und ich sende Ihnen weitere Details. – zvikico

3

Update: meine ursprüngliche Antwort würde nicht funktionieren, da es keinen Zusammenhang mit der strukturierten Auswahl gibt.

This answer zeigt, wie Sie die Aktion zum Kontextmenü hinzufügen und die strukturierte Auswahl abrufen. Sie können diesen Typ execute Methode ändern Sie die Hierarchie zu verarbeiten (wie VonC schlägt vor, +1) und alle Unterarten erhalten und den Inhalt in die Zwischenablage wie folgt festgelegt:

public Object execute(ExecutionEvent event) throws ExecutionException { 
    IWorkbenchPart activePart = HandlerUtil.getActivePart(event); 
    try { 
     IStructuredSelection selection = SelectionConverter 
       .getStructuredSelection(activePart); 

     IJavaElement[] elements = SelectionConverter.getElements(selection); 

     if (elements != null && elements.length > 0) { 
      if (elements[0] != null && elements[0] instanceof IType) { 
       IType type = (IType)elements[0]; 

       ITypeHierarchy hierarchy = 
        type.newTypeHierarchy(new NullProgressMonitor()); 

       IType[] subTypes = hierarchy.getAllSubtypes(type); 

       StringBuffer buf = new StringBuffer(); 
       for (IType iType : subTypes) { 
        buf.append(iType.getFullyQualifiedName()).append("\n"); 
       } 

       Shell shell = HandlerUtil.getActiveShell(event); 

       Clipboard clipboard = new Clipboard(shell.getDisplay()); 

       clipboard.setContents(
        new Object[]{buf.toString()}, 
        new Transfer[]{TextTransfer.getInstance()}); 
      } 
     } 
    } catch (JavaModelException e) { 
     logException(e); 
    } 
    return null; 
} 
+0

Lass mich sehen ... genial? +1 (+10 wenn ich könnte). – VonC

+0

:) vielen Dank –

Verwandte Themen