mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
(no message)
This commit is contained in:
@@ -18,6 +18,11 @@ class CanBeStaticVisitor extends PsiRecursiveElementVisitor {
|
||||
m_canBeStatic = false;
|
||||
}
|
||||
}
|
||||
else if (element instanceof PsiVariable) {
|
||||
//can happen with initializers of inner classes referencing
|
||||
//local variables or parameters from outer class
|
||||
m_canBeStatic = false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean canBeStatic() {
|
||||
|
||||
+34
-26
@@ -10,83 +10,91 @@ import com.siyeh.ig.*;
|
||||
import com.siyeh.ig.psiutils.ClassUtils;
|
||||
import com.siyeh.ig.psiutils.SideEffectChecker;
|
||||
|
||||
public class FieldMayBeStaticInspection extends FieldInspection {
|
||||
private static final Logger s_logger = Logger.getInstance("FieldMayBeStaticInspection");
|
||||
public class FieldMayBeStaticInspection extends FieldInspection{
|
||||
private static final Logger s_logger =
|
||||
Logger.getInstance("FieldMayBeStaticInspection");
|
||||
private final MakeStaticFix fix = new MakeStaticFix();
|
||||
|
||||
public String getDisplayName() {
|
||||
public String getDisplayName(){
|
||||
return "Field may be 'static'";
|
||||
}
|
||||
|
||||
public String getGroupDisplayName() {
|
||||
public String getGroupDisplayName(){
|
||||
return GroupNames.PERFORMANCE_GROUP_NAME;
|
||||
}
|
||||
|
||||
public String buildErrorString(PsiElement location) {
|
||||
public String buildErrorString(PsiElement location){
|
||||
return "Field #ref may be 'static' #loc";
|
||||
}
|
||||
|
||||
public BaseInspectionVisitor createVisitor(InspectionManager inspectionManager, boolean onTheFly) {
|
||||
public BaseInspectionVisitor createVisitor(InspectionManager inspectionManager,
|
||||
boolean onTheFly){
|
||||
return new FieldMayBeStaticVisitor(this, inspectionManager, onTheFly);
|
||||
}
|
||||
|
||||
public InspectionGadgetsFix buildFix(PsiElement location) {
|
||||
public InspectionGadgetsFix buildFix(PsiElement location){
|
||||
return fix;
|
||||
}
|
||||
|
||||
private static class MakeStaticFix extends InspectionGadgetsFix {
|
||||
public String getName() {
|
||||
private static class MakeStaticFix extends InspectionGadgetsFix{
|
||||
public String getName(){
|
||||
return "Make static";
|
||||
}
|
||||
|
||||
public void applyFix(Project project, ProblemDescriptor descriptor) {
|
||||
if(isQuickFixOnReadOnlyFile(project, descriptor)) return;
|
||||
final PsiJavaToken m_fieldNameToken = (PsiJavaToken) descriptor.getPsiElement();
|
||||
try {
|
||||
public void applyFix(Project project, ProblemDescriptor descriptor){
|
||||
if(isQuickFixOnReadOnlyFile(project, descriptor)){
|
||||
return;
|
||||
}
|
||||
final PsiJavaToken m_fieldNameToken =
|
||||
(PsiJavaToken) descriptor.getPsiElement();
|
||||
try{
|
||||
final PsiField field = (PsiField) m_fieldNameToken.getParent();
|
||||
final PsiModifierList modifiers = field.getModifierList();
|
||||
modifiers.setModifierProperty(PsiModifier.STATIC, true);
|
||||
} catch (IncorrectOperationException e) {
|
||||
} catch(IncorrectOperationException e){
|
||||
s_logger.error(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class FieldMayBeStaticVisitor extends BaseInspectionVisitor {
|
||||
private FieldMayBeStaticVisitor(BaseInspection inspection, InspectionManager inspectionManager, boolean isOnTheFly) {
|
||||
private static class FieldMayBeStaticVisitor extends BaseInspectionVisitor{
|
||||
private FieldMayBeStaticVisitor(BaseInspection inspection,
|
||||
InspectionManager inspectionManager,
|
||||
boolean isOnTheFly){
|
||||
super(inspection, inspectionManager, isOnTheFly);
|
||||
}
|
||||
|
||||
public void visitField(PsiField field) {
|
||||
if (field.hasModifierProperty(PsiModifier.STATIC)) {
|
||||
public void visitField(PsiField field){
|
||||
if(field.hasModifierProperty(PsiModifier.STATIC)){
|
||||
return;
|
||||
}
|
||||
if (!field.hasModifierProperty(PsiModifier.FINAL)) {
|
||||
if(!field.hasModifierProperty(PsiModifier.FINAL)){
|
||||
return;
|
||||
}
|
||||
final PsiExpression initializer = field.getInitializer();
|
||||
if (initializer == null) {
|
||||
if(initializer == null){
|
||||
return;
|
||||
}
|
||||
if (SideEffectChecker.mayHaveSideEffects(initializer)) {
|
||||
if(SideEffectChecker.mayHaveSideEffects(initializer)){
|
||||
return;
|
||||
}
|
||||
if (!canBeStatic(initializer)) {
|
||||
if(!canBeStatic(initializer)){
|
||||
return;
|
||||
}
|
||||
final PsiType type = field.getType();
|
||||
if (type == null) {
|
||||
if(type == null){
|
||||
return;
|
||||
}
|
||||
|
||||
if (!ClassUtils.isImmutable(type)) {
|
||||
if(!ClassUtils.isImmutable(type)){
|
||||
return;
|
||||
}
|
||||
registerFieldError(field);
|
||||
}
|
||||
|
||||
private static boolean canBeStatic(PsiExpression initializer) {
|
||||
final CanBeStaticVisitor canBeStaticVisitor = new CanBeStaticVisitor();
|
||||
private static boolean canBeStatic(PsiExpression initializer){
|
||||
final CanBeStaticVisitor canBeStaticVisitor =
|
||||
new CanBeStaticVisitor();
|
||||
initializer.accept(canBeStaticVisitor);
|
||||
return canBeStaticVisitor.canBeStatic();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user