Java-Suchsteuerkomponente verwenden

Ihr Plug-in kann die JDT-API verwenden, um Java-Projekte im Arbeitsbereich nach Java-Elementen, wie z. B. Verweise auf Methoden, Felddeklarationen, Implementierungselemente einer Schnittstelle, zu durchsuchen.

Der Eingangspunkt für die Java-Suche ist die Klasse SearchEngine. Sie können innerhalb eines Java-Elements nach bestimmten Mustern suchen und den Suchbereich auf spezifische Elemente eingrenzen.  Suchmuster können mit Hilfe von createSearchPattern erstellt werden.  Der Bereich eines Musters wird unter Verwendung voncreateJavaSearchScope festgelegt.  Sobald ein Muster und ein Bereich definiert wurden, wird die Methodesearch verwendet, um die Ergebnisse zu erfassen.

Suchergebnisse werden an einen IJavaSearchResultCollector gemeldet, der implementiert werden muss, damit der Zugriff auf die Ergebnisse möglich ist.

Suche vorbereiten

Eine Suchoperation verwendet sowohl ein Muster zur Beschreibung der Art der Suche, als auch einen eingeschränkten Suchbereich.

Java-Suchmuster erstellen

Ein Suchmuster definiert, wie die Suchergebnisse gesucht werden. Sie können entweder von einem Java-Element ein Suchmuster erstellen (siehe hierzu createSearchPattern(IJavaElement, int)), oder von einer Zeichenfolge (siehe hierzu createSearchPattern(String, int, int, boolean).) Die zweite Methode unterstützt Platzhalter ("*") und kann verwendet werden, um die Suchergebnisse auszuweiten.

Ein Suchmuster für die Suche nach Verweisen auf eine bestimmte Methode wird beispielsweise folgendermaßen erstellt:

    // Get the method
    IMethod method = ...;
    
    // Create search pattern
    ISearchPattern pattern = SearchEngine.createSearchPattern(method, IJavaSearchConstants.REFERENCES);

Erstellen eines Suchmusters für die Suche nach Deklarationen aller Typen, die mit "Obj" beginnen:

    // Create search pattern
    ISearchPattern pattern = SearchEngine.createSearchPattern("Obj*", IJavaSearchConstants.TYPE, IJavaSearchConstants.DECLARATIONS, true);

Folgende Suchmuster werden unterstützt:

Java-Suchbereich erstellen

Sind Sie an Suchergebnissen in einem bestimmten Projekt oder in einem bestimmten Paket interessiert, oder können sich Suchergebnisse nur in einer Hierarchie eines bestimmten Typs befinden, können Sie den entsprechenden Suchbereich unter Verwendung von createJavaSearchScope(IJavaElement[]) oder createHierarchyScope(IType) erstellen.

Ein Suchbereich für ein bestimmtes Paket wird beispielsweise wie folgt erstellt:

    // Get the package
    IPackageFragment pkg = ...;

    // Create search scope
    IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] {pkg});

Erstellen eines Suchbereichs für die Hierarchie eines bestimmten Typs:

    // Get the type
    IType type = ...;

    // Create search scope
    IJavaSearchScope scope = SearchEngine.createHierarchyScope(type);

Am Schluss können Sie einen Suchbereich für den gesamten Arbeitsbereich erstellen:

    // Create search scope
    IJavaSearchScope scope = SearchEngine.createWorkspaceScope();

Suchen

Sobald Sie ein Suchmuster und einen Suchbereich erstellt und IJavaSearchResultCollector implementiert haben, können Sie eine Suchabfrage wie folgt starten:

    // Get the search pattern
    ISearchPattern pattern = ...;

    // Get the search scope
    IJavaSearchScope scope = ...;

    // Get the search result collector
    IJavaSearchResultCollector collector = ...;

    // Search
    SearchEngine searchEngine = new SearchEngine();
    searchEngine.search(ResourcesPlugin.getWorkspace(), pattern, scope, collector);

Eine Benachrichtigung über das Starten der Suche wird unter Verwendung der Methode aboutToStart an Ihren Suchergebniskollektor gesendet.  Dann werden alle Suchergebnisse unter Verwendung der Methode accept berichtet. Am Schluss wird durch Fertig gestellt angezeigt, dass die Suche beendet ist.

Suchergebnisse sammeln

Suchergebnisse werden unter Verwendung der Methode accept berichtet. In den folgenden Abschnitten werden die Argumente dieser Methode näher erläutert.

Ressourcen und Java-Elemente

Ein Suchergebnis kann einem Java-Element zugeordnet werden (z. B. einer Typdeklaration), oder es kann in einem Java-Element enthalten sein (z. B. ein Verweis auf einen Typ innerhalb einer Methode). Die Suchsteuerkomponente versucht stets, das innerste Java-Element zu finden, das dem Suchergebnis zugeordnet ist bzw. das Suchergebnis enthält. Beim Suchen von Typdeklarationen nach Namen könnte beispielsweise eine Deklaration für einen lokalen Typ gesucht werden. Da das Java-Modell keine lokalen Typen darstellt, wird die Methode, die die Deklaration für diesen lokalen Typ enthält, an den Ergebniskollektor gegeben.

Die Suchsteuerkomponente versucht auch, die das Java-Element enthaltende Ressource an den Ergebniskollektor zu geben. Ist das Java-Element also eine Methode in einer Kompiliereinheit, ist die Ressource die entsprechende IFile. Ist das Element in einer .jar-Datei enthalten, ist die Ressource die .jar-Datei (wenn sich diese .jar-Datei im Arbeitsbereich befindet). Handelt es sich um eine externe .jar-Datei, ist die Ressource Null.

Quellenpositionen

Quellenpositionen werden relativ zu der Kompiliereinheit angegeben, die das Suchergebnis enthält. Ist das Suchergebnis in einer .jar-Datei enthalten, sind die Quellenpositionen relativ zu der zugeordneten Quelle. Sie sind (-1, -1), wenn der .jar-Datei keine Quelle zugeordnet wird.

Genaue und ungenaue Suchergebnisse

In den meisten Fällen sind die Suchergebnisse genau, d. h. die Suchsteuerkomponente konnte ermitteln, dass nach der angegebenen Übereinstimmung tatsächlich gesucht wurde. In einigen Fällen kann die Suchsteuerkomponente dies jedoch nicht ermitteln. Dann ist die Übereinstimmung ungenau. Für eine ungenaue Übereinstimmung kann es folgende Erklärungen geben:

Copyright IBM Corporation und Andere 2000, 2003. Alle Rechte vorbehalten.