diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java
index 31d03953f15b..3b9e2ab58312 100644
--- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java
+++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java
@@ -1807,7 +1807,7 @@ public class HighlightUtil extends HighlightUtilBase {
if (!arrayTypeFixChecked) {
final PsiType checkResult = JavaHighlightUtil.sameType(initializers);
- fix = checkResult != null ? new VariableArrayTypeFix(arrayInitializer, checkResult) : null;
+ fix = checkResult != null ? VariableArrayTypeFix.createFix(arrayInitializer, checkResult) : null;
arrayTypeFixChecked = true;
}
if (fix != null) {
diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/VariableArrayTypeFix.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/VariableArrayTypeFix.java
index c4257b06cdb2..b3034ae7b3bf 100644
--- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/VariableArrayTypeFix.java
+++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/VariableArrayTypeFix.java
@@ -36,24 +36,30 @@ public class VariableArrayTypeFix extends LocalQuickFixOnPsiElement {
private final String myName;
private final String myFamilyName;
- public VariableArrayTypeFix(@NotNull PsiArrayInitializerExpression initializer, @NotNull PsiType componentType) {
- super(getInitializer(initializer));
+ private VariableArrayTypeFix(@NotNull PsiArrayInitializerExpression initializer,
+ @NotNull PsiArrayType arrayType,
+ @NotNull PsiVariable variable) {
+ super(initializer);
+ myTargetType = arrayType;
+ PsiExpression myNewExpression = getNewExpressionLocal(initializer);
+ myName = myTargetType.equals(variable.getType()) && myNewExpression != null
+ ? QuickFixBundle.message("change.new.operator.type.text", getNewText(myNewExpression,initializer), myTargetType.getCanonicalText(), "")
+ : QuickFixBundle.message("fix.variable.type.text", formatType(variable), variable.getName(), myTargetType.getCanonicalText());
+ myFamilyName = QuickFixBundle.message(myTargetType.equals(variable.getType()) && myNewExpression != null ? "change.new.operator.type.family"
+ : "fix.variable.type.family");
+ }
+
+ @Nullable
+ public static VariableArrayTypeFix createFix(PsiArrayInitializerExpression initializer, @NotNull PsiType componentType) {
PsiArrayType arrayType = new PsiArrayType(componentType);
PsiArrayInitializerExpression arrayInitializer = initializer;
while (arrayInitializer.getParent() instanceof PsiArrayInitializerExpression) {
arrayInitializer = (PsiArrayInitializerExpression)arrayInitializer.getParent();
arrayType = new PsiArrayType(arrayType);
}
- myTargetType = arrayType;
-
- PsiExpression myNewExpression = getNewExpressionLocal(arrayInitializer);
- PsiVariable myVariable = getVariableLocal(arrayInitializer);
- myName = myVariable == null ? null : myTargetType.equals(myVariable.getType()) && myNewExpression != null ?
- QuickFixBundle.message("change.new.operator.type.text", getNewText(myNewExpression,arrayInitializer), myTargetType.getCanonicalText(), "") :
- QuickFixBundle.message("fix.variable.type.text", formatType(myVariable), myVariable.getName(), myTargetType.getCanonicalText());
- myFamilyName = myVariable == null ? null : myTargetType.equals(myVariable.getType()) && myNewExpression != null ?
- QuickFixBundle.message("change.new.operator.type.family") :
- QuickFixBundle.message("fix.variable.type.family");
+ PsiVariable variable = getVariableLocal(arrayInitializer);
+ if (variable == null) return null;
+ return new VariableArrayTypeFix(arrayInitializer, arrayType, variable);
}
private static String formatType(@NotNull PsiVariable variable) {
diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/uncheckedWarnings/UncheckedWarningLocalInspectionBase.java b/java/java-analysis-impl/src/com/intellij/codeInspection/uncheckedWarnings/UncheckedWarningLocalInspectionBase.java
index 82a3590fb259..373ec1721d2b 100644
--- a/java/java-analysis-impl/src/com/intellij/codeInspection/uncheckedWarnings/UncheckedWarningLocalInspectionBase.java
+++ b/java/java-analysis-impl/src/com/intellij/codeInspection/uncheckedWarnings/UncheckedWarningLocalInspectionBase.java
@@ -349,7 +349,7 @@ public class UncheckedWarningLocalInspectionBase extends BaseJavaBatchLocalInspe
JavaHighlightUtil.formatType(componentType));
if (!arrayTypeFixChecked) {
final PsiType checkResult = JavaHighlightUtil.sameType(initializers);
- fix = checkResult != null ? new VariableArrayTypeFix(arrayInitializer, checkResult) : null;
+ fix = checkResult != null ? VariableArrayTypeFix.createFix(arrayInitializer, checkResult) : null;
arrayTypeFixChecked = true;
}
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ArrayInitializerTypeCheckVariableType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ArrayInitializerTypeCheckVariableType.java
new file mode 100644
index 000000000000..a7a1a760a812
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ArrayInitializerTypeCheckVariableType.java
@@ -0,0 +1,13 @@
+import java.util.*;
+
+class FooClass {
+
+ {
+ Set[][] a = null;
+ a[0] = new Set[]{ fooBar(), fooBar()};
+ }
+
+ private List fooBar() {
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk7Test.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk7Test.java
index 1658752c857c..4160b1981481 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk7Test.java
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk7Test.java
@@ -182,6 +182,8 @@ public class LightAdvHighlightingJdk7Test extends LightDaemonAnalyzerTestCase {
public void testTryWithResourcesWithMultipleCloseInterfaces() { doTest(false, false);}
public void testIDEA138978() { doTest(false, false); }
+ public void testArrayInitializerTypeCheckVariableType() { doTest(false, false);}
+
public void testJavaUtilCollections_NoVerify() throws Exception {
PsiClass collectionsClass = getJavaFacade().findClass("java.util.Collections", GlobalSearchScope.moduleWithLibrariesScope(getModule()));
assertNotNull(collectionsClass);