我正在为PhpStorm开发一个插件,在某些时候,它尝试从method
访问getContainingClass()
。当班级名称不存在时,此方法应返回null
。
为了便于解释,我的visitPhpMethod()
就是这样:
final PhpClass methodClass = method.getContainingClass();
if (methodClass == null) {
return null;
}
我的问题是以return null
编程方式( from unit test )的代码覆盖率来证明它不是死代码。从运行我的插件的PhpStorm的真实实例中,当我只删除类名时,我可以访问此代码:
原始代码,无法访问return null
:
class ThisIsMyClass { function x(){} }
修改了没有类名的代码,访问return null
:
class { function x(){} }
但是当我从单元测试中运行修改后的代码时,它会给出:
class<error descr="Expected: class name"> </error>{ function x(){} }
由此,我的visitPhpMethod()
未被触发(,而在实际的PhpStorm应用程序中它)。这样,就不可能覆盖这部分代码(但我喜欢)。
我最好的尝试:而不是依靠testHighlight()
,我输入了功能代码(具有类名),然后以编程方式删除了类名(然后是&#34;预期的班级名称&#34;错误不再发生)。最后,我以编程方式运行visitPhpMethod()
。
不幸的是,getContainingClass()
而不是返回null
(我希望这样做),它只返回一个没有名字的PhpClass
个实例(和它应该对我不起作用。)
此尝试的代码可以是seen here。
我也尝试在Intellij社区发布same problem,但没有运气。
答案 0 :(得分:0)
好的,我发现了我的问题。
实际上,问题不在getContaingClass()
上。从null
调用时,它确实无法返回visitPhpMethod()
。我在另一个尝试从包含类中getNameIdentifier()
的方法中发现了我的问题,在这种情况下,它实际上是不存在的,我只是尝试从@NotNull
方法返回它。