groovy field can be used if it implicitly overrides getter or setter of base class

This commit is contained in:
Maxim.Medvedev
2012-07-29 20:35:48 +04:00
parent adf158fdb7
commit 429b2acb17
@@ -61,6 +61,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAccessorMethod;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod;
import org.jetbrains.plugins.groovy.lang.psi.api.toplevel.imports.GrImportStatement;
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
@@ -140,7 +141,7 @@ public class GroovyPostHighlightingPass extends TextEditorHighlightingPass {
unusedDeclarations.add(highlightInfo);
}
}
else if (element instanceof GrField && PostHighlightingPass.isFieldUnused((GrField)element, progress, usageHelper)) {
else if (element instanceof GrField && isFieldUnused((GrField)element, progress, usageHelper)) {
HighlightInfo highlightInfo =
PostHighlightingPass.createUnusedSymbolInfo(nameId, "Property " + name + " is unused", HighlightInfoType.UNUSED_SYMBOL);
QuickFixAction.registerQuickFixAction(highlightInfo, new SafeDeleteFix(element));
@@ -206,6 +207,26 @@ public class GroovyPostHighlightingPass extends TextEditorHighlightingPass {
}
private static boolean isFieldUnused(GrField field, ProgressIndicator progress, GlobalUsageHelper usageHelper) {
if (!PostHighlightingPass.isFieldUnused(field, progress, usageHelper)) return false;
final GrAccessorMethod[] getters = field.getGetters();
final GrAccessorMethod setter = field.getSetter();
for (GrAccessorMethod getter : getters) {
if (getter.findSuperMethods().length > 0) {
return false;
}
}
if (setter != null) {
if (setter.findSuperMethods().length > 0) {
return false;
}
}
return true;
}
private static boolean isOverriddenOrOverrides(PsiMethod method) {
boolean overrides = SuperMethodsSearch.search(method, null, true, false).findFirst() != null;
return overrides || OverridingMethodsSearch.search(method).findFirst() != null;