Eclipse '的含义;忽略潜在匹配';

Eclipse '的含义;忽略潜在匹配';,eclipse,preferences,Eclipse,Preferences,在“窗口>首选项>常规>搜索”下,有“忽略潜在匹配”选项 它有什么作用?不管我是否激活它,我都看不出有什么不同 这是一个仅对Java开发有意义的选项吗(我从来没有这样做过,但我使用Eclipse用C、Python和PHP开发过)?参见示例:根据您搜索的内容(类、方法等),搜索引擎可以找到匹配的实例(但不能确定) 这些实例被标记为“潜在匹配””: 具有不同数量参数的方法不是潜在匹配 (见附件) 潜在匹配是指解析失败的匹配(例如,方法绑定为空)。 如果用户搜索“foo(String)”(没有限定St

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

它有什么作用?不管我是否激活它,我都看不出有什么不同

这是一个仅对Java开发有意义的选项吗(我从来没有这样做过,但我使用Eclipse用C、Python和PHP开发过)?

参见示例:根据您搜索的内容(类、方法等),搜索引擎可以找到匹配的实例(但不能确定)

这些实例被标记为“
潜在匹配”
”:

具有不同数量参数的方法不是潜在匹配

(见附件)

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

对于
.class
文件的情况,我认为我们只能在缺少类型的情况下(请参阅)才有潜在的匹配,也就是说,如果.class文件被编译并且它引用的某些类型丢失了


潜在匹配错误行为的当前示例如下所示:

我有一个公共静态void方法
printIt(字符串名)

当我打开它的调用层次结构时,一些调用方丢失了

我猜调用方丢失了,因为java搜索将它们标记为潜在的,而不是与
printIt(String)
reference的精确匹配。
以下代码有时标记为潜在代码,有时标记为精确代码:

当搜索结果被标记为潜在时,调用方在调用层次结构中丢失

因此上面的
impl2.getName()
返回一个
字符串

报告了一些问题,我想这些问题会使匹配标记为潜在的:

结果表明:

编译器要求“
NameEnvironment
”获取任何依赖类型的类型信息。
搜索在
JavaSearchNameEnvironment
中有自己的
NameEnvironment
实现,它不寻找次要类型。
这很糟糕,令人惊讶的是,我们到目前为止还没有遇到这个问题

在Eclipse Luna(Service Release 1(4.4.1))中,我只搜索了对该Java方法的引用:

merge(DashboardConfigurationModel template, DashboardModel custom)
它返回两个引用。其中一个对
merge()
方法的调用传入了一个
DashboardConfigurationModel
和一个
DashboardModel
,这与方法签名相符。这是一场比赛

merge()
方法的另一个引用传入
字符串和
映射。它在Eclipse中被标记为“潜在匹配”,但在我看来,由于参数类型不匹配,所以匹配的可能性为零


然后,我选中了“忽略潜在匹配项”,再次进行搜索,噪音消失了。

我本来打算这样做,但那只是说“如果您只想查看精确匹配项,请选择此选项”。这并没有什么帮助;-)对我来说,这个单一的选择多年来一直是个谜!我已经用谷歌搜索过很多次了,它是内置的帮助(我相信,它和谷歌一样),但从来没有发现任何有用的东西。我只是添加了一个有问题的“潜在匹配”的例子,以及一个错误报告的参考,解释了为什么不同的参数编号不是“潜在匹配”的标准1.我想我知道事情的发展方向了。我一直在搜索一个接口的
getName()
,并在Spring框架中找到了完全不相关的类中的匹配项。投票并标记为“答案”。但真的,你让我不知所措!在这里倾泻出来的知识对我来说太多了。我完全被你写下来的速度和轻松所吓倒。在阅读了您提到的一些bug报告之后,我会从中记得,是的,这是一个java的东西-不,在它的当前状态下,人们通常不希望它被启用。谢谢!
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().
...
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
merge(DashboardConfigurationModel template, DashboardModel custom)