2012-08-09 24 views
5

Under Finestra> Preferenze> Generali> Ricerca, v'è la possibilità Ignora possibili corrispondenzeSignificato 'Ignora possibili corrispondenze'

Che cosa fa? Sia che lo attivi o meno, non vedo mai una differenza.

È un'opzione che ha senso solo per lo sviluppo di Java (cosa che non faccio mai, ma sviluppo in C, Python e PHP utilizzando Eclipse)?

+0

Stavo per [indicare il manuale] (http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2Freference%2Fref-search.htm) ma dice solo "Seleziona questa opzione se vuoi vedere solo le corrispondenze esatte". che non è esattamente utile ;-) –

+0

Quella singola opzione è stata un mistero per me da anni! Ho già cercato molte volte utilizzando google, la guida integrata (che, credo, è la stessa di http://help.eclipse.org), e non ho mai trovato nulla di utile in remoto. – parvus

+0

È stato appena aggiunto un esempio di "potenziale corrispondenza" problematica, nonché un riferimento a una segnalazione di bug che spiega perché il diverso numero di parametro non è un criterio per "corrispondenza potenziale". – VonC

risposta

3

Vedi bug 127442 per gli esempi: a seconda di cosa si sta cercando (una classe, un metodo, ...), il motore di ricerca può trovare esempi che potrebbero partita (ma non può dire per certo).

Quei casi sono contrassegnati "POTENTIAL_MATCH":

Metodo con diverso numero di parametri non è un potenziale partita.

(vedi bug 97322)

Un potenziale partita è una partita dove la risoluzione non (ad esempio il metodo di rilegatura è nullo).
Se l'utente cerca "foo(String)" (senza qualificazione String), quindi "foo(java.lang.String)" e "foo(p.String)" sono entrambe le corrispondenze esatte.

Per il caso .class di file, penso che possiamo avere solo possibili corrispondenze nel caso del caso tipo mancante (vedi bug 196200), cioè se il file .class è stato compilato e alcuni tipi IT riferimenti mancavano.


Un esempio attuale di potenziale partita comportamento scorretto si trova in bug 382778:

Ho un metodo public static void printIt(String name).
Quando apro la sua gerarchia di chiamata, mancano alcuni chiamanti.

Suppongo che i chiamanti manchino perché la ricerca java li contrassegna come potenziali anziché corrispondenze esatte per il riferimento printIt(String).
Il seguente codice è volte contrassegnati come potenziale, e volte esatto:

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

Quando il risultato della ricerca è segnato potenziale, il chiamante è presente nella gerarchia di printIt() chiamata.

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(). 

Così impl2.getName() sopra restituisce un String.

ci sono alcuni problemi segnalati che immagino rendere le partite essere contrassegnato come potenziale:

... 
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 

scopre che:

Il compilatore chiede alla "NameEnvironment" per ottenere il tipo informazioni di qualsiasi tipo dipendente.
La ricerca ha la propria implementazione NameEnvironment in JavaSearchNameEnvironment e non è in cerca di tipi secondari.
Questo è male ed è sorprendente che non abbiamo eseguito in questo problema fino ad ora.

+0

Penso di vedere dove sta andando. Stavo cercando 'getName()' di un'interfaccia e stavo ottenendo le corrispondenze nel framework Spring in classi che erano completamente estranee. –

+0

Votato e contrassegnato come 'la risposta'. Ma davvero mi stai travolgendo! Il miscuglio di conoscenza versato qui è mooolto troppo per me da gestire. Sono totalmente sbalordito dalla velocità e dalla facilità con cui l'hai scritto. Quello che ricorderò da questo, dopo aver letto alcune delle segnalazioni di bug che hai citato, è che - sì, è una cosa java - no, nel suo stato attuale, normalmente non si vuole che sia abilitato. Grazie mille! – parvus

0

In Eclipse Luna (Service Release 1 (4.4.1)) Ho cercato solo per i riferimenti a questo metodo Java:

merge(DashboardConfigurationModel template, DashboardModel custom) 

Si restituisce due riferimenti. Una di queste chiamate al metodo merge() passa in un DashboardConfigurationModel e DashboardModel, come si addice la firma del metodo. Questa è una partita, va bene!

L'altro riferimento a un metodo merge() passa in un String e uno Map. È contrassegnato in Eclipse come una "potenziale corrispondenza", ma nella mia mente, poiché i tipi di argomenti non corrispondono, questo ha zero possibilità di essere una corrispondenza.

Ho quindi controllato Ignorare le potenziali corrispondenze, ho fatto di nuovo la ricerca e questo rumore è andato via.

Problemi correlati