完成这个功能的代码在org.eclipse.jdt.internal.ui.text.java.ParameterGuesser
中。
// add 'this'
if (currentType != null && !(fEnclosingElement instanceof IMethod && Flags.isStatic(((IMethod) fEnclosingElement).getFlags()))) {
String fullyQualifiedName= currentType.getFullyQualifiedName('.');
if (fullyQualifiedName.equals(expectedType)) {
ImageDescriptor desc= new JavaElementImageDescriptor(JavaPluginImages.DESC_FIELD_PUBLIC, JavaElementImageDescriptor.FINAL | JavaElementImageDescriptor.STATIC, JavaElementImageProvider.SMALL_SIZE);
res.add(new Variable(fullyQualifiedName, "this", Variable.LITERALS, false, res.size(), new char[] {'.'}, desc)); //$NON-NLS-1$
}
}
那段代码中关键的部分是
JavaElementImageDescriptor.FINAL | JavaElementImageDescriptor.STATIC
在JavaElementImageDescriptor
中,标志很难编码显示静态和final覆盖图像。因此,这些总是为this
显示。
至于为什么选择这样做,代码没有给出任何原因。
this
视为静态的逻辑原因是什么? - user7291698有两个原因。1)this
不能被重新分配,2)你在构造函数中而不是普通方法中。
final
的原因,而不是使用static
的原因。至于你的第二个观点:实际上,我在初始化程序中,而不是在构造函数中。但无论如何,这都不重要,因为内容辅助在初始化程序、构造函数和普通方法中显示相同的行为。 - user7291698