2012-08-09 16 views
5
‚mögliche Übereinstimmungen Ignorieren‘

Unter Fenster> Einstellungen> Allgemein> Suche, besteht die Möglichkeit, ignorieren mögliche ÜbereinstimmungenBedeutung der

Was macht es? Ob ich es aktiviere oder nicht, ich sehe nie einen Unterschied.

Ist es eine Option, die nur für Java-Entwicklung sinnvoll ist (was ich nie mache, aber ich entwickle in C, Python und PHP mit Eclipse)?

+0

Ich war dabei [zeige auf das Handbuch] (http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2Freference%2Fref-search.htm) aber das sagt nur "Wählen Sie diese Option, wenn Sie nur exakte Übereinstimmungen sehen möchten." was nicht gerade hilfreich ist ;-) –

+0

Diese einzige Option ist seit Jahren ein Mysterium für mich! Ich habe bereits viele Male mit Google, der integrierten Hilfe (die, glaube ich, ist das gleiche wie http://help.eclipse.org), gesucht und nie etwas entfernt nützlich gefunden. – parvus

+0

Nur ein Beispiel für eine problematische "potentielle Übereinstimmung" hinzugefügt, sowie ein Verweis auf einen Fehlerbericht, der erklärt, warum eine andere Parameternummer kein Kriterium für "potentielle Übereinstimmung" ist. – VonC

Antwort

3

Siehe bug 127442 für Beispiele: je nachdem, was Sie (eine Klasse, ein Verfahren, ...) suchen, kann die Suchmaschine Instanzen finden, die Spiel konnte (aber es nicht mit Sicherheit sagen kann).

Diese Profile sind mit „POTENTIAL_MATCH“:

Verfahren mit unterschiedlicher Anzahl von Parametern ist keine mögliche Übereinstimmung.

(siehe bug 97322)

Ein potenzielles Spiel ist ein Spiel in dem die Auflösung versagt (beispielsweise das Verfahren Bindung ist null).
Wenn der Benutzer nach "foo(String)" (ohne qualifizierende String) sucht, dann sind "foo(java.lang.String)" und "foo(p.String)" beide exakte Übereinstimmungen.

Für die .class Datei Fall, ich denke, wir können nur potenzielle Übereinstimmungen im Fall des fehlenden Typs (siehe bug 196200), d. H. Wenn die .class-Datei kompiliert wurde und einige Typen, die es Referenzen fehlten.

I printIt(String name) eine public static void Methode hat:


Ein aktuelles Beispiel für schlechtes Benehmen möglicher Übereinstimmung in bug 382778 gefunden.
Wenn ich seine Anrufhierarchie öffne, fehlen einige Anrufer.

Ich rate, die Anrufer fehlen, weil Java-Suche sie als Potenzial anstelle von genauen Übereinstimmungen für die printIt(String) Referenz markiert.
Der folgende Code ist manchmal als potentielle markiert und manchmal genau:

// Listing 1 
PublicInterface2 impl2 = new Impl2("Name Broken"); 
Static.printIt(impl2.getName()); 

Wenn das Suchergebnis Potential markiert ist, wird der Anrufer von der printIt() Aufrufhierarchie fehlt.

PublicInterface2 is an empty public interface which extends PackageInterface2Getters. 
PackageInterface2Getters is an empty default-scoped interface which extends PackageInterface1Getters. 
PackageInterface1Getters is a default-scoped interface which declares String getName(). 

So gibt impl2.getName() über ein String.

Es gibt einige Probleme berichtet, die ich machen denke, die Spiele als mögliche markiert werden:

... 
Filename : \D:\workspace\eclipse\_runtimes\jdt\call-hierarchy-bug\src\main\PublicInterface2.java 
COMPILED type(s)  
2 PROBLEM(s) detected 
    - Pb(2) PackageInterface1Getters cannot be resolved to a type 
    - Pb(327) The hierarchy of the type PublicInterface2 is inconsistent 

Es stellte sich heraus, dass:

Der Compiler die „NameEnvironment“, fragt die Art zu erhalten Informationen eines abhängigen Typs.
Die Suche hat eigene NameEnvironment Implementierung in JavaSearchNameEnvironment und es sucht nicht nach sekundären Typen.
Das ist schlecht und es ist überraschend, dass wir bis jetzt nicht auf dieses Problem gestoßen sind.

+0

Ich denke ich sehe wohin das geht. Ich habe nach 'getName()' einer Schnittstelle gesucht und erhielt Übereinstimmungen im Spring-Framework in Klassen, die völlig unabhängig voneinander waren. –

+0

Abgestimmt und als "die Antwort" markiert. Aber wirklich, Sie überwältigen mich! Der Klappentext des Wissens, der hier ausgegossen wird, ist zu viel, als dass ich damit umgehen könnte. Ich bin total beeindruckt von der Geschwindigkeit und Leichtigkeit, mit der du das niedergeschrieben hast. Was ich daran erinnern werde, nachdem ich einige der Bugreports gelesen habe, ist, dass - ja, es ist eine Java-Sache - nein, in seinem aktuellen Zustand, möchte man normalerweise nicht, dass es aktiviert ist. Vielen Dank! – parvus

0

in Eclipse Luna (Service Release 1 (4.4.1)) Ich suchte nur für Verweise auf diese Java-Methode:

merge(DashboardConfigurationModel template, DashboardModel custom) 

Es gibt zwei Referenzen. Einer dieser Aufrufe an das merge() Verfahren geht in eine DashboardConfigurationModel und eine DashboardModel über, wie es der Methodensignatur entspricht. Das ist ein Spiel in Ordnung!

Die andere Referenz zu einer merge() Methode geht in eine String und eine Map. Es wird in Eclipse als "potentielle Übereinstimmung" markiert, aber da die Argumenttypen nicht übereinstimmen, hat dies meiner Meinung nach kein Potenzial, ein Match zu sein.

Ich dann überprüft Ignorieren potenzielle Übereinstimmungen, hat die Suche erneut, und dieses Geräusch ging weg.