diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/NonSerializableWithSerialVersionUIDFieldInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/NonSerializableWithSerialVersionUIDFieldInspection.java index ec53c74602a1..d742866a3d81 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/NonSerializableWithSerialVersionUIDFieldInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/NonSerializableWithSerialVersionUIDFieldInspection.java @@ -25,11 +25,11 @@ public class NonSerializableWithSerialVersionUIDFieldInspection extends ClassIns } public BaseInspectionVisitor createVisitor(InspectionManager inspectionManager, boolean onTheFly) { - return new SerializableDefinesSerialVersionUIDVisitor(this, inspectionManager, onTheFly); + return new NonSerializableWithSerialVersionUIDVisitor(this, inspectionManager, onTheFly); } - private static class SerializableDefinesSerialVersionUIDVisitor extends BaseInspectionVisitor { - private SerializableDefinesSerialVersionUIDVisitor(BaseInspection inspection, + private static class NonSerializableWithSerialVersionUIDVisitor extends BaseInspectionVisitor { + private NonSerializableWithSerialVersionUIDVisitor(BaseInspection inspection, InspectionManager inspectionManager, boolean isOnTheFly) { super(inspection, inspectionManager, isOnTheFly); } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/ReadObjectInitializationInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/ReadObjectInitializationInspection.java index 6226b9489ac3..64ff806bcbb9 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/ReadObjectInitializationInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/ReadObjectInitializationInspection.java @@ -63,7 +63,7 @@ public class ReadObjectInitializationInspection extends FieldInspection { return true; } final PsiCodeBlock body = method.getBody(); - return InitializationUtils.blockMustAssignVariable(field, body); + return InitializationUtils.blockMustAssignVariableOrFail(field, body); } } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerialVersionUIDNotStaticFinalInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerialVersionUIDNotStaticFinalInspection.java index db7f64586dd8..59e8c9ba0067 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerialVersionUIDNotStaticFinalInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerialVersionUIDNotStaticFinalInspection.java @@ -1,20 +1,17 @@ package com.siyeh.ig.serialization; import com.intellij.codeInspection.InspectionManager; -import com.intellij.codeInspection.ProblemDescriptor; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.project.Project; import com.intellij.psi.*; -import com.intellij.util.IncorrectOperationException; -import com.siyeh.ig.*; +import com.siyeh.ig.BaseInspection; +import com.siyeh.ig.BaseInspectionVisitor; +import com.siyeh.ig.ClassInspection; +import com.siyeh.ig.GroupNames; import com.siyeh.ig.psiutils.SerializationUtils; public class SerialVersionUIDNotStaticFinalInspection extends ClassInspection { - private static final Logger s_logger = Logger.getInstance("SerialVersionUIDNotStaticFinalInspection"); - private final MakeStaticFinalFix fix = new MakeStaticFinalFix(); public String getDisplayName() { - return "'serialVersionUID' field not declared 'static final'"; + return "'serialVersionUID' field not declared 'private static final long'"; } public String getGroupDisplayName() { @@ -22,39 +19,13 @@ public class SerialVersionUIDNotStaticFinalInspection extends ClassInspection { } public String buildErrorString(PsiElement location) { - return "#ref field of a Serializable class is not declared 'static' and 'final' #loc "; + return "#ref field of a Serializable class is not declared 'private static final long' #loc "; } public BaseInspectionVisitor createVisitor(InspectionManager inspectionManager, boolean onTheFly) { return new SerializableDefinesSerialVersionUIDVisitor(this, inspectionManager, onTheFly); } - public InspectionGadgetsFix buildFix(PsiElement location) { - return fix; - } - - private static class MakeStaticFinalFix extends InspectionGadgetsFix { - public String getName() { - return "Make 'static final'"; - } - - public void applyFix(Project project, ProblemDescriptor descriptor) { - try { - final PsiElement fieldNameToken = descriptor.getPsiElement(); - final PsiField field = (PsiField) fieldNameToken.getParent(); - final PsiModifierList modifiers = field.getModifierList(); - if (!modifiers.hasModifierProperty(PsiModifier.STATIC)) { - modifiers.setModifierProperty(PsiModifier.STATIC, true); - } - if (!modifiers.hasModifierProperty(PsiModifier.FINAL)) { - modifiers.setModifierProperty(PsiModifier.FINAL, true); - } - } catch (IncorrectOperationException e) { - s_logger.error(e); - } - } - } - private static class SerializableDefinesSerialVersionUIDVisitor extends BaseInspectionVisitor { private SerializableDefinesSerialVersionUIDVisitor(BaseInspection inspection, InspectionManager inspectionManager, boolean isOnTheFly) { @@ -74,8 +45,14 @@ public class SerialVersionUIDNotStaticFinalInspection extends ClassInspection { final PsiField field = fields[i]; if (isSerialVersionUID(field)) { if (!field.hasModifierProperty(PsiModifier.STATIC) || + !field.hasModifierProperty(PsiModifier.PRIVATE) || !field.hasModifierProperty(PsiModifier.FINAL)) { registerFieldError(field); + } else { + final PsiType type = field.getType(); + if (PsiType.LONG.equals(type)) { + registerFieldError(field); + } } } } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableHasSerialVersionUIDFieldInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableHasSerialVersionUIDFieldInspection.java index e07b96698158..41d6cc0da080 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableHasSerialVersionUIDFieldInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/serialization/SerializableHasSerialVersionUIDFieldInspection.java @@ -1,13 +1,11 @@ package com.siyeh.ig.serialization; import com.intellij.codeInspection.InspectionManager; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiField; -import com.siyeh.ig.BaseInspection; -import com.siyeh.ig.BaseInspectionVisitor; -import com.siyeh.ig.ClassInspection; -import com.siyeh.ig.GroupNames; +import com.intellij.codeInspection.ProblemDescriptor; +import com.intellij.psi.*; +import com.intellij.util.IncorrectOperationException; +import com.intellij.openapi.project.Project; +import com.siyeh.ig.*; import com.siyeh.ig.psiutils.SerializationUtils; import com.siyeh.ig.ui.SingleCheckboxOptionsPanel; @@ -15,6 +13,7 @@ import javax.swing.*; public class SerializableHasSerialVersionUIDFieldInspection extends ClassInspection { public boolean m_ignoreSerializableDueToInheritance = true; + private final AddSerialVersionUIDFix fix = new AddSerialVersionUIDFix(); public String getDisplayName() { return "Serializable class without serialVersionUID"; @@ -28,6 +27,30 @@ public class SerializableHasSerialVersionUIDFieldInspection extends ClassInspect return "#ref doesn't define a serialVersionUID field #loc"; } + protected InspectionGadgetsFix buildFix(PsiElement location) { + return fix; + } + + private static class AddSerialVersionUIDFix extends InspectionGadgetsFix { + public String getName() { + return "Add serialVersionUIDField"; + } + + public void applyFix(Project project, ProblemDescriptor problemDescriptor) { + final PsiElement classIdentifier = problemDescriptor.getPsiElement(); + final PsiElement aClass = classIdentifier.getParent(); + try { + final PsiManager psiManager = aClass.getManager(); + final PsiElementFactory elementFactory = psiManager.getElementFactory(); + final long serialVersionUID = 1; + final PsiField field = elementFactory.createFieldFromText("private static final long serialVersionUID = "+ serialVersionUID+"L;", aClass); + aClass.add(field); + } catch (IncorrectOperationException e) { + e.printStackTrace(); + } + } + } + public JComponent createOptionsPanel() { return new SingleCheckboxOptionsPanel("Ignore classes serializable due to inheritance", this, "m_ignoreSerializableDueToInheritance");