(no message)

This commit is contained in:
Dave Griffith
2005-03-15 20:45:18 +03:00
parent a5820e02c1
commit a0f49df186
2 changed files with 39 additions and 26 deletions
@@ -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() {
@@ -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();
}