From 26be69646be1d3aa6ea4ed3653b0e02c3d7f8fa9 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Fri, 15 Aug 2014 17:10:37 +0200 Subject: [PATCH] EA-59436 (IOE: PsiJavaParserFacadeImpl.createExpressionFromText) --- .../impl/BaseMoveInitializerToMethodAction.java | 16 +++------------- .../afterArrayInitializer.java | 8 ++++++++ .../beforeArrayInitializer.java | 7 +++++++ 3 files changed, 18 insertions(+), 13 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/afterArrayInitializer.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeArrayInitializer.java diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/BaseMoveInitializerToMethodAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/BaseMoveInitializerToMethodAction.java index 4756a5b25a47..5ccdc398684f 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/BaseMoveInitializerToMethodAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/BaseMoveInitializerToMethodAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,6 +29,7 @@ import com.intellij.psi.*; import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.util.RefactoringChangeUtil; +import com.intellij.refactoring.util.RefactoringUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -126,9 +127,7 @@ public abstract class BaseMoveInitializerToMethodAction extends PsiElementBaseIn final PsiExpressionStatement statement = (PsiExpressionStatement)factory.createStatementFromText(field.getName() + " = y;", codeBlock); PsiExpression initializer = field.getInitializer(); - if (initializer instanceof PsiArrayInitializerExpression) { - initializer = arrayInitializerToNewExpression((PsiArrayInitializerExpression)initializer, factory, codeBlock); - } + initializer = RefactoringUtil.convertInitializerToNormalExpression(initializer, field.getType()); final PsiAssignmentExpression expression = (PsiAssignmentExpression)statement.getExpression(); expression.getRExpression().replace(initializer); @@ -158,15 +157,6 @@ public abstract class BaseMoveInitializerToMethodAction extends PsiElementBaseIn return false; } - private static PsiExpression arrayInitializerToNewExpression(@NotNull PsiArrayInitializerExpression initializer, - @NotNull PsiElementFactory factory, - @NotNull PsiElement context) { - final PsiType type = initializer.getType(); - final PsiNewExpression newExpression = (PsiNewExpression)factory.createExpressionFromText("new " + type.getCanonicalText() + "{}", context); - newExpression.getArrayInitializer().replace(initializer); - return newExpression; - } - private static boolean containsReference(final @NotNull PsiElement element, final @NotNull PsiField field) { final Ref result = new Ref(Boolean.FALSE); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/afterArrayInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/afterArrayInitializer.java new file mode 100644 index 000000000000..c063aef37715 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/afterArrayInitializer.java @@ -0,0 +1,8 @@ +// "Move initializer to constructor" "true" +class X { + final String s; + + X() { + s = {}; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeArrayInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeArrayInitializer.java new file mode 100644 index 000000000000..fdc8c7b3e22f --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/moveInitializerToConstructor/beforeArrayInitializer.java @@ -0,0 +1,7 @@ +// "Move initializer to constructor" "true" +class X { + final String s = {}; + + X() { + } +} \ No newline at end of file