“忽略潜在匹配”的含义

时间:2012-08-09 08:12:57

标签: eclipse preferences

Window>下偏好>一般>搜索,有忽略潜在匹配

选项

它做什么?无论我是否激活它,我都没有看到差异。

它是一个只对Java开发有意义的选项(我从未做过,但我使用Eclipse开发C,Python和PHP)?

2 个答案:

答案 0 :(得分:5)

请参阅bug 127442示例:根据您搜索的内容(类,方法等),搜索引擎可以找到可能匹配的实例(但不能肯定地说。)

这些实例标记为“ POTENTIAL_MATCH ”:

  

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

(见bug 97322

  

潜在匹配是分辨率失败的匹配(例如方法绑定为空)。
  如果用户搜索“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”获取任何依赖类型的类型信息   搜索在NameEnvironment中拥有自己的JavaSearchNameEnvironment实施,并且不会查找辅助类型   这很糟糕,令人惊讶的是我们直到现在还没有遇到这个问题。

答案 1 :(得分:0)

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

merge(DashboardConfigurationModel template, DashboardModel custom)

它返回两个引用。其中一个对merge()方法的调用会传入DashboardConfigurationModelDashboardModel,这与方法签名相同。这是一场比赛!

merge()方法的另一个引用传入StringMap。它在Eclipse中被标记为"潜在的匹配"但在我看来,由于论证类型不匹配,因此没有可能成为匹配。

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