'Ignore potential matches'的含义



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

它有什么作用?无论我是否激活它,我都看不到区别。

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

有关示例,请参阅错误127442:根据您要搜索的内容(类,方法等),搜索引擎可以找到可能匹配的实例(但不能确定)。

这些实例标记为" POTENTIAL_MATCH ":

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

(请参阅错误 97322 )

潜在匹配是解析失败的匹配(例如,方法绑定为 null)。
如果用户搜索"foo(String)"(不带限定String),则"foo(java.lang.String)"和"foo(p.String)"都是完全匹配的。

对于.class文件的情况,我认为我们只能在缺少类型的情况下进行潜在的匹配(参见错误 196200),即如果.class文件被编译并且它引用的某些类型丢失。


在错误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:workspaceeclipse_runtimesjdtcall-hierarchy-bugsrcmainPublicInterface2.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"获取任何依赖类型的类型信息。
搜索在JavaSearchNameEnvironment中有自己的NameEnvironment实现,并且不查找辅助类型。
这很糟糕,令人惊讶的是,我们直到现在还没有遇到这个问题。

在 Eclipse Luna(服务版本 1 (4.4.1))中,我只搜索了对这个 Java 方法的引用:

merge(DashboardConfigurationModel template, DashboardModel custom)

它返回两个引用。其中一个对merge()方法的调用传入一个DashboardConfigurationModel和一个DashboardModel,以符合方法签名。这是一场比赛好吧!

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

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

相关内容

  • 没有找到相关文章

最新更新