2012-08-09 66 views
5

窗口>首选项>常规>搜索,有选择忽略潜在的匹配意义“忽略潜在的匹配”

它有什么作用?无论我是否激活它,我从来没有看到任何区别。这是一个只对Java开发有意义的选择(我从来不这样做,但我使用Eclipse在C,Python和PHP中开发)?

+0

我正要[指向手册](http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2Freference%2Fref-search.htm )但只说“如果你只想看到完全匹配,请选择此选项”。这并不完全有帮助;-) – 2012-08-09 08:17:19

+0

这种单一选项多年来一直是个谜!我已经使用google搜索了很多次,内置的帮助(我相信这与http://help.eclipse.org相同),并且从未发现任何远程有用的东西。 – parvus 2012-08-09 08:27:51

+0

刚刚添加了一个有问题的“潜在匹配”的例子,以及一个错误报告的参考,解释了为什么不同的参数号码不是“潜在匹配”的标准。 – VonC 2012-08-09 09:10:13

回答

3

例子可见bug 127442:这取决于你正在寻找(一类,方法,...),搜索引擎可以找到实例,其可能比赛(但不能肯定地说)。

那些情况被标记为“POTENTIAL_MATCH”:

具有不同数目的参数的方法,没有潜在的匹配。

(见bug 97322

的潜在匹配的匹配,其中解析失败(例如该方法是结合为null)。
如果用户搜索“foo(String)”(没有限定String),则“foo(java.lang.String)”和“foo(p.String)”都是完全匹配。

对于.class文件的情况下,我想我们只能有潜力的比赛中缺少的类型案件的情况(见bug 196200),即如果.class文件编译和某些类型的引用它不翼而飞。


潜在匹配不当行为的当前示例中bug 382778发现:

我有一个公共静态无效方法printIt(String name)
当我打开其呼叫层次结构时,有些呼叫者缺失。

我猜测呼叫者失踪,因为java搜索将它们标记为潜在的而不是printIt(String)引用的精确匹配。
下面的代码是有时标记为潜在的,和有时确切:

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

当搜索结果被标记的潜力,呼叫者从printIt()调用层次缺失。

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

所以impl2.getName()以上返回String

有报道一些问题,我想使比赛被标记为潜在:

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

事实证明:

编译器询问“NameEnvironment”要获得类型任何依赖类型的信息。
搜索有它自己的NameEnvironmentJavaSearchNameEnvironment执行,它不寻找第二类型。
这很糟糕,我们直到现在还没有遇到这个问题,这是令人惊讶的。

+0

我想我明白这是标题。我一直在寻找一个接口的'getName()',并且在Spring框架中与完全不相关的类进行匹配。 – 2012-08-09 08:35:21

+0

投票并标记为'答案'。但是,真的,你压倒了我!在这里涌出的知识知识太多了,我无法处理。我完全被你写下来的速度和容易感到敬畏。 我会记住,在阅读了你提到的一些错误报告之后,是 - 是的,它是一个java事物 - 不,在当前状态下,通常不希望它被启用。 非常感谢! – parvus 2012-08-09 19:46:48

0

在Eclipse露娜(服务版本1(4.4.1))我搜索只是为这个Java方法引用:

merge(DashboardConfigurationModel template, DashboardModel custom) 

它返回两个引用。为了适应方法签名,对merge()方法的这些调用之一通过了DashboardConfigurationModelDashboardModel。这是一场比赛!

merge()方法的其他引用传入StringMap。它在Eclipse中被标记为“潜在的匹配”,但在我看来,因为参数类型不匹配,所以它没有可能匹配。

我然后检查忽略潜在的匹配,再次搜索,这种噪音消失了。