IDEA-86879 (Inspection "Unused declaration" should not apply to the public constructors of Externalizable classes.)

This commit is contained in:
Bas Leijdekkers
2012-10-18 15:01:53 +02:00
parent 0578957100
commit b5bdf4dbec
@@ -270,6 +270,15 @@ public class UnusedDeclarationInspection extends FilteringInspectionTool {
}
}
private static boolean isExternalizableNoParameterConstructor(PsiMethod method, RefClass refClass) {
if (!method.isConstructor()) return false;
if (!method.hasModifierProperty(PsiModifier.PUBLIC)) return false;
final PsiParameterList parameterList = method.getParameterList();
if (parameterList.getParametersCount() != 0) return false;
final PsiClass aClass = method.getContainingClass();
return aClass == null || isExternalizable(aClass, refClass);
}
private static boolean isSerializationImplicitlyUsedField(PsiField field) {
@NonNls final String name = field.getName();
if (!HighlightUtil.SERIAL_VERSION_UID_FIELD_NAME.equals(name) && !"serialPersistentFields".equals(name)) return false;
@@ -330,6 +339,15 @@ public class UnusedDeclarationInspection extends FilteringInspectionTool {
return false;
}
private static boolean isExternalizable(PsiClass aClass, RefClass refClass) {
final GlobalSearchScope scope = aClass.getResolveScope();
final PsiClass externalizableClass = JavaPsiFacade.getInstance(aClass.getProject()).findClass("java.io.Externalizable", scope);
if (externalizableClass == null) {
return false;
}
return isSerializable(aClass, refClass, externalizableClass);
}
private static boolean isSerializable(PsiClass aClass, RefClass refClass, PsiClass serializableClass) {
if (aClass == null) return false;
if (aClass.isInheritor(serializableClass, true)) return true;
@@ -600,7 +618,7 @@ public class UnusedDeclarationInspection extends FilteringInspectionTool {
private static boolean isSerializablePatternMethod(PsiMethod psiMethod, RefClass refClass) {
return isReadObjectMethod(psiMethod, refClass) || isWriteObjectMethod(psiMethod, refClass) || isReadResolveMethod(psiMethod, refClass) ||
isWriteReplaceMethod(psiMethod, refClass);
isWriteReplaceMethod(psiMethod, refClass) || isExternalizableNoParameterConstructor(psiMethod, refClass);
}
private void enqueueMethodUsages(final RefMethod refMethod) {