highlight inherited methods inside anonymous/inner classes (IDEA-134626)

This commit is contained in:
Anna Kozlova
2014-12-29 21:15:12 +01:00
parent 430a85ace8
commit 79b5f29665
2 changed files with 41 additions and 2 deletions
@@ -62,8 +62,13 @@ public class HighlightNamesUtil {
if (!isDeclaration) {
if (isCalledOnThis(elementToHighlight)) {
PsiClass enclosingClass = PsiTreeUtil.getParentOfType(elementToHighlight, PsiClass.class);
isInherited = enclosingClass != null && enclosingClass.isInheritor(method.getContainingClass(), true);
final PsiClass containingClass = method.getContainingClass();
PsiClass enclosingClass = containingClass == null ? null : PsiTreeUtil.getParentOfType(elementToHighlight, PsiClass.class);
while (enclosingClass != null) {
isInherited = enclosingClass.isInheritor(containingClass, true);
if (isInherited) break;
enclosingClass = PsiTreeUtil.getParentOfType(enclosingClass, PsiClass.class, true);
}
}
}
@@ -59,4 +59,38 @@ class <symbolName descr="null" type="CLASS_NAME">NoCtrClass</symbolName> {
class <symbolName descr="null" type="CLASS_NAME">Generic</symbolName><<symbolName descr="null" type="TYPE_PARAMETER_NAME">TT</symbolName> extends <symbolName descr="null" type="INTERFACE_NAME">Runnable</symbolName>> {
<symbolName descr="null" type="TYPE_PARAMETER_NAME">TT</symbolName> <symbolName descr="null" type="INSTANCE_FIELD">field</symbolName>;
}
class <symbolName descr="null" type="CLASS_NAME">InheritedSymbolNames</symbolName> {
private static class <symbolName descr="null" type="CLASS_NAME">A</symbolName> {
public <symbolName descr="null" type="CLASS_NAME">String</symbolName> <symbolName descr="null" type="METHOD_DECLARATION">getName</symbolName>() {
return "classA";
}
}
private static class <symbolName descr="null" type="CLASS_NAME">B</symbolName> extends <symbolName descr="null" type="CLASS_NAME">A</symbolName> {
{
new <symbolName descr="null" type="ANONYMOUS_CLASS_NAME">java.lang.Runnable</symbolName>() {
public void <symbolName descr="null" type="METHOD_DECLARATION">run</symbolName>() {
<symbolName descr="null" type="INHERITED_METHOD">getName</symbolName>();
}
};
<symbolName descr="null" type="INHERITED_METHOD">getName</symbolName>();
}
}
private static class <symbolName descr="null" type="CLASS_NAME">C</symbolName> extends <symbolName descr="null" type="CLASS_NAME">A</symbolName> {
{
new <symbolName descr="null" type="ANONYMOUS_CLASS_NAME">java.lang.Runnable</symbolName>() {
public void <symbolName descr="null" type="METHOD_DECLARATION">run</symbolName>() {
<symbolName descr="null" type="METHOD_CALL">getName</symbolName>();
}
};
<symbolName descr="null" type="METHOD_CALL">getName</symbolName>();
}
public <symbolName descr="null" type="CLASS_NAME">String</symbolName> <symbolName descr="null" type="METHOD_DECLARATION">getName</symbolName>() {
return "classC";
}
}
}