IDEA-112141 Access to static import variable exceeds access rights

This commit is contained in:
Max Medvedev
2013-08-19 12:24:40 +04:00
parent a326ed613a
commit 75d0056122
3 changed files with 28 additions and 12 deletions
@@ -19,6 +19,7 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiFormatUtil;
import com.intellij.psi.util.PsiFormatUtilBase;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
@@ -64,6 +65,7 @@ public class GroovyAccessibilityInspection extends BaseInspection {
setter != null && PsiUtil.isAccessible(place, setter);
}
@NotNull
@Override
protected BaseInspectionVisitor buildVisitor() {
return new MyVisitor();
@@ -89,7 +91,7 @@ public class GroovyAccessibilityInspection extends BaseInspection {
}
@Override
protected GroovyFix[] buildFixes(PsiElement location) {
protected GroovyFix[] buildFixes(@NotNull PsiElement location) {
if (!(location instanceof GrReferenceElement || location instanceof GrConstructorCall)) {
location = location.getParent();
}
@@ -116,6 +118,7 @@ public class GroovyAccessibilityInspection extends BaseInspection {
Project project = refElement.getProject();
JavaPsiFacade facade = JavaPsiFacade.getInstance(project);
PsiModifierList modifierListCopy = facade.getElementFactory().createFieldFromText("int a;", null).getModifierList();
assert modifierListCopy != null;
modifierListCopy.setModifierProperty(PsiModifier.STATIC, modifierList.hasModifierProperty(PsiModifier.STATIC));
String minModifier = PsiModifier.PROTECTED;
if (refElement.hasModifierProperty(PsiModifier.PROTECTED)) {
@@ -188,11 +191,11 @@ public class GroovyAccessibilityInspection extends BaseInspection {
registerError(refElement,
PsiFormatUtil.formatMethod((PsiMethod)constructor, PsiSubstitutor.EMPTY,
PsiFormatUtil.SHOW_NAME |
PsiFormatUtil.SHOW_TYPE |
PsiFormatUtil.TYPE_AFTER |
PsiFormatUtil.SHOW_PARAMETERS,
PsiFormatUtil.SHOW_TYPE
PsiFormatUtilBase.SHOW_NAME |
PsiFormatUtilBase.SHOW_TYPE |
PsiFormatUtilBase.TYPE_AFTER |
PsiFormatUtilBase.SHOW_PARAMETERS,
PsiFormatUtilBase.SHOW_TYPE
));
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2009 JetBrains s.r.o.
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,7 +22,6 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.codeStyle.VariableKind;
import com.intellij.psi.util.PropertyUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
@@ -74,8 +73,7 @@ public class GroovyPropertyUtils {
@Nullable
public static PsiMethod findSetterForField(PsiField field) {
final PsiClass containingClass = field.getContainingClass();
final Project project = field.getProject();
final String propertyName = PropertyUtil.suggestPropertyName(project, field);
final String propertyName = field.getName();
final boolean isStatic = field.hasModifierProperty(PsiModifier.STATIC);
return findPropertySetter(containingClass, propertyName, isStatic, true);
}
@@ -83,8 +81,7 @@ public class GroovyPropertyUtils {
@Nullable
public static PsiMethod findGetterForField(PsiField field) {
final PsiClass containingClass = field.getContainingClass();
final Project project = field.getProject();
final String propertyName = PropertyUtil.suggestPropertyName(project, field);
final String propertyName = field.getName();
final boolean isStatic = field.hasModifierProperty(PsiModifier.STATIC);
return findPropertyGetter(containingClass, propertyName, isStatic, true);
}
@@ -207,6 +207,22 @@ print foo+<warning descr="Access to 'bar' exceeds its access rights">bar</warnin
''', GroovyAccessibilityInspection)
}
public void testStaticImportCapsProperty() {
myFixture.addFileToProject('Foo.groovy', '''\
class Foo {
static def FOO = 2
private static def BAR = 2
}
''')
testHighlighting('''\
import static Foo.FOO
import static Foo.<warning descr="Access to 'BAR' exceeds its access rights">BAR</warning>
print FOO + <warning descr="Access to 'BAR' exceeds its access rights">BAR</warning>
''', GroovyAccessibilityInspection)
}
public void testUntypedAccess() { doTest(new GroovyUntypedAccessInspection()) }
public void testMethodMayBeStaticForCategoryClasses() {