From a89d18d0f0ac6dab56f3f6044a8ba613b936a006 Mon Sep 17 00:00:00 2001 From: anna Date: Sun, 27 Feb 2011 16:50:28 +0100 Subject: [PATCH] safe varags: enable add safe varargs on constructor --- .../impl/analysis/GenericsHighlightUtil.java | 2 +- .../PossibleHeapPollutionVarargsInspection.java | 2 +- .../advHighlighting7/SafeVarargsApplicability.java | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java index 2d272ee14ae3..f0630bbc36d4 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java @@ -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"); } diff --git a/java/java-impl/src/com/intellij/codeInspection/PossibleHeapPollutionVarargsInspection.java b/java/java-impl/src/com/intellij/codeInspection/PossibleHeapPollutionVarargsInspection.java index 3f2bcded07ad..45cf2f5aba52 100644 --- a/java/java-impl/src/com/intellij/codeInspection/PossibleHeapPollutionVarargsInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/PossibleHeapPollutionVarargsInspection.java @@ -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); } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SafeVarargsApplicability.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SafeVarargsApplicability.java index a943b24de2f7..8530de7aa3bf 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SafeVarargsApplicability.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/SafeVarargsApplicability.java @@ -45,3 +45,17 @@ public class SafeVarargsTests { public static void foo2(List... t){} } + +abstract class AClass { + @SafeVarargs + AClass(T... d){ + System.out.println(d); + } +} + +class ABClass extends AClass { + @SafeVarargs + ABClass(T... d){ + super(d); + } +} \ No newline at end of file