safe varags: enable add safe varargs on constructor

This commit is contained in:
anna
2011-02-27 16:50:28 +01:00
parent f4f467bf64
commit a89d18d0f0
3 changed files with 16 additions and 2 deletions
@@ -985,7 +985,7 @@ public class GenericsHighlightUtil {
if (!method.isVarArgs()) {
return HighlightInfo.createHighlightInfo(HighlightInfoType.ERROR, safeVarargsAnnotation, "@SafeVarargs is not allowed on methods with fixed arity");
}
if (!method.hasModifierProperty(PsiModifier.STATIC) && !method.hasModifierProperty(PsiModifier.FINAL)) {
if (!method.hasModifierProperty(PsiModifier.STATIC) && !method.hasModifierProperty(PsiModifier.FINAL) && !method.isConstructor()) {
return HighlightInfo.createHighlightInfo(HighlightInfoType.ERROR, safeVarargsAnnotation, "@SafeVarargs is not allowed on non-final instance methods");
}
@@ -87,7 +87,7 @@ public class PossibleHeapPollutionVarargsInspection extends BaseJavaLocalInspect
//if (containingClass == null || containingClass.isInterface()) return; do not add
holder.registerProblem(nameIdentifier, "Possible heap pollution from parameterized vararg type #loc",
//todo check if can be final or static
method.hasModifierProperty(PsiModifier.FINAL) || method.hasModifierProperty(PsiModifier.STATIC) ? new AnnotateAsSafeVarargsQuickFix() : null);
method.hasModifierProperty(PsiModifier.FINAL) || method.hasModifierProperty(PsiModifier.STATIC) || method.isConstructor() ? new AnnotateAsSafeVarargsQuickFix() : null);
}
}
@@ -45,3 +45,17 @@ public class SafeVarargsTests {
public static <T> void foo2(List<? extends T>... <warning descr="Parameter 't' is never used">t</warning>){}
}
abstract class AClass {
@SafeVarargs
<T> AClass(T... d){
System.out.println(d);
}
}
class ABClass extends AClass {
@SafeVarargs
<T> ABClass(T... d){
super(d);
}
}