summaryrefslogtreecommitdiff
path: root/java/java-impl/src/com/intellij/refactoring
diff options
context:
space:
mode:
Diffstat (limited to 'java/java-impl/src/com/intellij/refactoring')
-rw-r--r--java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java28
-rw-r--r--java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperclassHandler.java22
-rw-r--r--java/java-impl/src/com/intellij/refactoring/inline/InlineConstantFieldHandler.java22
-rw-r--r--java/java-impl/src/com/intellij/refactoring/inline/InlineParameterHandler.java2
-rw-r--r--java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousClassHandler.java11
-rw-r--r--java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodStaticProcessor.java15
-rw-r--r--java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHandler.java23
-rw-r--r--java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpProcessor.java51
-rw-r--r--java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownProcessor.java26
-rw-r--r--java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesImpl.java17
-rw-r--r--java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java6
-rw-r--r--java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerClassJavaUsagesHandler.java58
-rw-r--r--java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerClassUsagesHandler.java28
-rw-r--r--java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerProcessor.java36
-rw-r--r--java/java-impl/src/com/intellij/refactoring/turnRefsToSuper/TurnRefsToSuperProcessorBase.java16
-rw-r--r--java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationProcessor.java36
-rw-r--r--java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java2
17 files changed, 285 insertions, 114 deletions
diff --git a/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java b/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java
index b551616c93dc..49064514be38 100644
--- a/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java
+++ b/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java
@@ -332,7 +332,7 @@ public class CopyClassesHandler extends CopyHandlerDelegateBase {
for (final PsiClass[] psiClasses : fileToClasses.values()) {
if (psiClasses != null) {
for (PsiClass aClass : psiClasses) {
- if (aClass instanceof SyntheticElement) {
+ if (isSynthetic(aClass)) {
continue;
}
oldToNewMap.put(aClass, null);
@@ -349,7 +349,7 @@ public class CopyClassesHandler extends CopyHandlerDelegateBase {
final PsiFile createdFile = copy(psiFile, targetDirectory, copyClassName, map == null ? null : map.get(psiFile), choice);
if (createdFile == null) return null;
for (final PsiClass destination : ((PsiClassOwner)createdFile).getClasses()) {
- if (destination instanceof SyntheticElement) {
+ if (isSynthetic(destination)) {
continue;
}
PsiClass source = findByName(sources, destination.getName());
@@ -408,6 +408,10 @@ public class CopyClassesHandler extends CopyHandlerDelegateBase {
return newElement != null ? newElement : createdFiles.size() > 0 ? createdFiles.get(0) : null;
}
+ protected static boolean isSynthetic(PsiClass aClass) {
+ return aClass instanceof SyntheticElement || !aClass.isPhysical();
+ }
+
private static PsiFile copy(@NotNull PsiFile file, PsiDirectory directory, String name, String relativePath, int[] choice) {
final String fileName = getNewFileName(file, name);
if (relativePath != null && !relativePath.isEmpty()) {
@@ -420,9 +424,10 @@ public class CopyClassesHandler extends CopyHandlerDelegateBase {
private static String getNewFileName(PsiFile file, String name) {
if (name != null) {
if (file instanceof PsiClassOwner) {
- final PsiClass[] classes = ((PsiClassOwner)file).getClasses();
- if (classes.length > 0 && !(classes[0] instanceof SyntheticElement)) {
- return name + "." + file.getViewProvider().getVirtualFile().getExtension();
+ for (final PsiClass psiClass : ((PsiClassOwner)file).getClasses()) {
+ if (!isSynthetic(psiClass)) {
+ return name + "." + file.getViewProvider().getVirtualFile().getExtension();
+ }
}
}
return name;
@@ -530,15 +535,14 @@ public class CopyClassesHandler extends CopyHandlerDelegateBase {
if (element instanceof PsiCompiledElement) return null;
if (element instanceof PsiClassOwner) {
PsiClass[] classes = ((PsiClassOwner)element).getClasses();
- if (classes.length > 0) {
- for (final PsiClass aClass : classes) {
- if (aClass instanceof SyntheticElement) {
- return null;
- }
+ ArrayList<PsiClass> buffer = new ArrayList<PsiClass>();
+ for (final PsiClass aClass : classes) {
+ if (isSynthetic(aClass)) {
+ return null;
}
-
- return classes;
+ buffer.add(aClass);
}
+ return buffer.toArray(new PsiClass[buffer.size()]);
}
return element instanceof PsiClass ? new PsiClass[]{(PsiClass)element} : null;
}
diff --git a/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperclassHandler.java b/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperclassHandler.java
index b8f24bc16f1f..b3e43eb93938 100644
--- a/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperclassHandler.java
+++ b/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperclassHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 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.
@@ -59,6 +59,7 @@ public class ExtractSuperclassHandler implements RefactoringActionHandler, Extra
private Project myProject;
+ @Override
public void invoke(@NotNull Project project, Editor editor, PsiFile file, DataContext dataContext) {
editor.getScrollingModel().scrollToCaret(ScrollType.MAKE_VISIBLE);
int offset = editor.getCaretModel().getOffset();
@@ -77,6 +78,7 @@ public class ExtractSuperclassHandler implements RefactoringActionHandler, Extra
}
}
+ @Override
public void invoke(@NotNull final Project project, @NotNull PsiElement[] elements, DataContext dataContext) {
if (elements.length != 1) return;
@@ -101,6 +103,7 @@ public class ExtractSuperclassHandler implements RefactoringActionHandler, Extra
final List<MemberInfo> memberInfos = MemberInfo.extractClassMembers(mySubclass, new MemberInfo.Filter<PsiMember>() {
+ @Override
public boolean includeMember(PsiMember element) {
return true;
}
@@ -112,8 +115,10 @@ public class ExtractSuperclassHandler implements RefactoringActionHandler, Extra
if (!dialog.isOK() || !dialog.isExtractSuperclass()) return;
CommandProcessor.getInstance().executeCommand(myProject, new Runnable() {
+ @Override
public void run() {
final Runnable action = new Runnable() {
+ @Override
public void run() {
doRefactoring(project, mySubclass, dialog);
}
@@ -124,6 +129,7 @@ public class ExtractSuperclassHandler implements RefactoringActionHandler, Extra
}
+ @Override
public boolean checkConflicts(final ExtractSuperclassDialog dialog) {
final MemberInfo[] infos = ArrayUtil.toObjectArray(dialog.getSelectedMemberInfos(), MemberInfo.class);
final PsiDirectory targetDirectory = dialog.getTargetDirectory();
@@ -136,9 +142,17 @@ public class ExtractSuperclassHandler implements RefactoringActionHandler, Extra
}
final MultiMap<PsiElement,String> conflicts = new MultiMap<PsiElement, String>();
if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() {
+ @Override
public void run() {
- final PsiClass superClass = mySubclass.getExtendsListTypes().length > 0 || mySubclass instanceof PsiAnonymousClass ? mySubclass.getSuperClass() : null;
- conflicts.putAllValues(PullUpConflictsUtil.checkConflicts(infos, mySubclass, superClass, targetPackage, targetDirectory, dialog.getContainmentVerifier(), false));
+ ApplicationManager.getApplication().runReadAction(new Runnable() {
+ @Override
+ public void run() {
+ final PsiClass superClass =
+ mySubclass.getExtendsListTypes().length > 0 || mySubclass instanceof PsiAnonymousClass ? mySubclass.getSuperClass() : null;
+ conflicts.putAllValues(PullUpConflictsUtil.checkConflicts(infos, mySubclass, superClass, targetPackage, targetDirectory,
+ dialog.getContainmentVerifier(), false));
+ }
+ });
}
}, RefactoringBundle.message("detecting.possible.conflicts"), true, myProject)) return false;
ExtractSuperClassUtil.checkSuperAccessible(targetDirectory, conflicts, mySubclass);
@@ -168,6 +182,7 @@ public class ExtractSuperclassHandler implements RefactoringActionHandler, Extra
final SmartPsiElementPointer<PsiClass> classPointer = SmartPointerManager.getInstance(project).createSmartPsiElementPointer(subclass);
final SmartPsiElementPointer<PsiClass> interfacePointer = SmartPointerManager.getInstance(project).createSmartPsiElementPointer(superclass);
final Runnable turnRefsToSuperRunnable = new Runnable() {
+ @Override
public void run() {
ExtractClassUtil.askAndTurnRefsToSuper(project, classPointer, interfacePointer);
}
@@ -185,6 +200,7 @@ public class ExtractSuperclassHandler implements RefactoringActionHandler, Extra
return RefactoringBundle.message("extract.superclass.command.name", newName, DescriptiveNameUtil.getDescriptiveName(subclass));
}
+ @Override
public boolean isEnabledOnElements(PsiElement[] elements) {
return elements.length == 1 && elements[0] instanceof PsiClass && !((PsiClass) elements[0]).isInterface()
&&!((PsiClass)elements[0]).isEnum();
diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineConstantFieldHandler.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineConstantFieldHandler.java
index b82953534b8c..ddfb057460ab 100644
--- a/java/java-impl/src/com/intellij/refactoring/inline/InlineConstantFieldHandler.java
+++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineConstantFieldHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 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.
@@ -17,6 +17,7 @@ package com.intellij.refactoring.inline;
import com.intellij.codeInsight.TargetElementUtilBase;
import com.intellij.lang.StdLanguages;
+import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.project.Project;
@@ -35,10 +36,12 @@ import com.intellij.refactoring.util.CommonRefactoringUtil;
public class InlineConstantFieldHandler extends JavaInlineActionHandler {
private static final String REFACTORING_NAME = RefactoringBundle.message("inline.field.title");
+ @Override
public boolean canInlineElement(PsiElement element) {
return element instanceof PsiField && StdLanguages.JAVA.equals(element.getLanguage());
}
+ @Override
public void inlineElement(Project project, Editor editor, PsiElement element) {
final PsiElement navigationElement = element.getNavigationElement();
final PsiField field = (PsiField)(navigationElement instanceof PsiField ? navigationElement : element);
@@ -66,13 +69,18 @@ public class InlineConstantFieldHandler extends JavaInlineActionHandler {
if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() {
@Override
public void run() {
- for (PsiReference reference : ReferencesSearch.search(field)) {
- final PsiElement referenceElement = reference.getElement();
- if (!(referenceElement instanceof PsiExpression && PsiUtil.isAccessedForReading((PsiExpression)referenceElement))) {
- hasWriteUsages.set(true);
- break;
+ ApplicationManager.getApplication().runReadAction(new Runnable() {
+ @Override
+ public void run() {
+ for (PsiReference reference : ReferencesSearch.search(field)) {
+ final PsiElement referenceElement = reference.getElement();
+ if (!(referenceElement instanceof PsiExpression && PsiUtil.isAccessedForReading((PsiExpression)referenceElement))) {
+ hasWriteUsages.set(true);
+ break;
+ }
+ }
}
- }
+ });
}
}, "Check if inline is possible...", true, project)) {
return;
diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterHandler.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterHandler.java
index 2b285553bc24..b8097d7376f6 100644
--- a/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterHandler.java
+++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterHandler.java
@@ -200,7 +200,7 @@ public class InlineParameterHandler extends JavaInlineActionHandler {
}
if (!ApplicationManager.getApplication().isUnitTestMode()) {
- String occurencesString = RefactoringBundle.message("occurences.string", occurrences.size());
+ String occurencesString = RefactoringBundle.message("occurrences.string", occurrences.size());
String question = RefactoringBundle.message("inline.parameter.confirmation", psiParameter.getName(),
constantExpression.getText()) + " " + occurencesString;
RefactoringMessageDialog dialog = new RefactoringMessageDialog(
diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousClassHandler.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousClassHandler.java
index e17326844249..8d7995fbf1b0 100644
--- a/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousClassHandler.java
+++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousClassHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 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.
@@ -91,7 +91,7 @@ public class InlineToAnonymousClassHandler extends JavaInlineActionHandler {
});
}
}, "Searching for class \"" + element.getQualifiedName() + "\" inheritors ...", true, element.getProject())) return false;
- return inheritors.size() == 0;
+ return inheritors.isEmpty();
}
@Override
@@ -124,7 +124,12 @@ public class InlineToAnonymousClassHandler extends JavaInlineActionHandler {
if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable(){
@Override
public void run() {
- errorMessage.set(getCannotInlineMessage(psiClass));
+ ApplicationManager.getApplication().runReadAction(new Runnable() {
+ @Override
+ public void run() {
+ errorMessage.set(getCannotInlineMessage(psiClass));
+ }
+ });
}
}, "Check if inline is possible...", true, project)) return;
if (errorMessage.get() != null) {
diff --git a/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodStaticProcessor.java b/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodStaticProcessor.java
index de5efa573d8a..64afbfa17e84 100644
--- a/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodStaticProcessor.java
+++ b/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodStaticProcessor.java
@@ -27,6 +27,7 @@ import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.refactoring.util.javadoc.MethodJavaDocHelper;
import com.intellij.usageView.UsageInfo;
import com.intellij.util.IncorrectOperationException;
+import com.intellij.util.containers.MultiMap;
import java.util.ArrayList;
import java.util.List;
@@ -41,6 +42,20 @@ public class MakeMethodStaticProcessor extends MakeMethodOrClassStaticProcessor<
super(project, method, settings);
}
+ @Override
+ protected MultiMap<PsiElement, String> getConflictDescriptions(UsageInfo[] usages) {
+ MultiMap<PsiElement, String> descriptions = super.getConflictDescriptions(usages);
+ if (mySettings.isMakeClassParameter()) {
+ for (UsageInfo usage : usages) {
+ PsiElement element = usage.getElement();
+ if (element instanceof PsiMethodReferenceExpression) {
+ descriptions.putValue(element, "Method reference will be corrupted");
+ }
+ }
+ }
+ return descriptions;
+ }
+
protected void changeSelfUsage(SelfUsageInfo usageInfo) throws IncorrectOperationException {
PsiElement parent = usageInfo.getElement().getParent();
LOG.assertTrue(parent instanceof PsiMethodCallExpression);
diff --git a/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHandler.java b/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHandler.java
index 2cbf7a0adcee..5a21d945fd79 100644
--- a/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHandler.java
+++ b/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 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.
@@ -26,6 +26,7 @@ package com.intellij.refactoring.memberPullUp;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
+import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.ScrollType;
@@ -55,6 +56,7 @@ public class JavaPullUpHandler implements RefactoringActionHandler, PullUpDialog
private PsiClass mySubclass;
private Project myProject;
+ @Override
public void invoke(@NotNull Project project, Editor editor, PsiFile file, DataContext dataContext) {
int offset = editor.getCaretModel().getOffset();
editor.getScrollingModel().scrollToCaret(ScrollType.MAKE_VISIBLE);
@@ -78,6 +80,7 @@ public class JavaPullUpHandler implements RefactoringActionHandler, PullUpDialog
}
}
+ @Override
public void invoke(@NotNull final Project project, @NotNull PsiElement[] elements, DataContext dataContext) {
if (elements.length != 1) return;
myProject = project;
@@ -130,6 +133,7 @@ public class JavaPullUpHandler implements RefactoringActionHandler, PullUpDialog
mySubclass = aClass;
MemberInfoStorage memberInfoStorage = new MemberInfoStorage(mySubclass, new MemberInfo.Filter<PsiMember>() {
+ @Override
public boolean includeMember(PsiMember element) {
return true;
}
@@ -152,6 +156,7 @@ public class JavaPullUpHandler implements RefactoringActionHandler, PullUpDialog
+ @Override
public boolean checkConflicts(final PullUpDialog dialog) {
final List<MemberInfo> infos = dialog.getSelectedMemberInfos();
final MemberInfo[] memberInfos = infos.toArray(new MemberInfo[infos.size()]);
@@ -159,11 +164,18 @@ public class JavaPullUpHandler implements RefactoringActionHandler, PullUpDialog
if (!checkWritable(superClass, memberInfos)) return false;
final MultiMap<PsiElement, String> conflicts = new MultiMap<PsiElement, String>();
if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() {
+ @Override
public void run() {
- final PsiDirectory targetDirectory = superClass.getContainingFile().getContainingDirectory();
- final PsiPackage targetPackage = targetDirectory != null ? JavaDirectoryService.getInstance().getPackage(targetDirectory) : null;
- conflicts
- .putAllValues(PullUpConflictsUtil.checkConflicts(memberInfos, mySubclass, superClass, targetPackage, targetDirectory, dialog.getContainmentVerifier()));
+ ApplicationManager.getApplication().runReadAction(new Runnable() {
+ @Override
+ public void run() {
+ final PsiDirectory targetDirectory = superClass.getContainingFile().getContainingDirectory();
+ final PsiPackage targetPackage = targetDirectory != null ? JavaDirectoryService.getInstance().getPackage(targetDirectory) : null;
+ conflicts
+ .putAllValues(PullUpConflictsUtil.checkConflicts(memberInfos, mySubclass, superClass, targetPackage, targetDirectory, dialog.getContainmentVerifier()));
+ }
+ });
+
}
}, RefactoringBundle.message("detecting.possible.conflicts"), true, myProject)) return false;
if (!conflicts.isEmpty()) {
@@ -185,6 +197,7 @@ public class JavaPullUpHandler implements RefactoringActionHandler, PullUpDialog
return true;
}
+ @Override
public boolean isEnabledOnElements(PsiElement[] elements) {
/*
if (elements.length == 1) {
diff --git a/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpProcessor.java b/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpProcessor.java
index 4531e391f838..353898cafe51 100644
--- a/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpProcessor.java
+++ b/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpProcessor.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 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.
@@ -68,7 +68,7 @@ public class PullUpProcessor extends BaseRefactoringProcessor implements PullUpD
private final DocCommentPolicy myJavaDocPolicy;
private Set<PsiMember> myMembersAfterMove = null;
private Set<PsiMember> myMovedMembers = null;
- private Map<Language, PullUpHelper<MemberInfo>> myProcessors = ContainerUtil.newHashMap();
+ private final Map<Language, PullUpHelper<MemberInfo>> myProcessors = ContainerUtil.newHashMap();
public PullUpProcessor(PsiClass sourceClass, PsiClass targetSuperClass, MemberInfo[] membersToMove, DocCommentPolicy javaDocPolicy) {
super(sourceClass.getProject());
@@ -78,11 +78,13 @@ public class PullUpProcessor extends BaseRefactoringProcessor implements PullUpD
myJavaDocPolicy = javaDocPolicy;
}
+ @Override
@NotNull
protected UsageViewDescriptor createUsageViewDescriptor(UsageInfo[] usages) {
return new PullUpUsageViewDescriptor();
}
+ @Override
@NotNull
protected UsageInfo[] findUsages() {
final List<UsageInfo> result = new ArrayList<UsageInfo>();
@@ -125,6 +127,7 @@ public class PullUpProcessor extends BaseRefactoringProcessor implements PullUpD
return data;
}
+ @Override
protected void performRefactoring(UsageInfo[] usages) {
moveMembersToBase();
moveFieldInitializations();
@@ -148,29 +151,35 @@ public class PullUpProcessor extends BaseRefactoringProcessor implements PullUpD
ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() {
@Override
public void run() {
- final Query<PsiClass> search = ClassInheritorsSearch.search(myTargetSuperClass);
- final Set<VirtualFile> hierarchyFiles = new HashSet<VirtualFile>();
- for (PsiClass aClass : search) {
- final PsiFile containingFile = aClass.getContainingFile();
- if (containingFile != null) {
- final VirtualFile virtualFile = containingFile.getVirtualFile();
- if (virtualFile != null) {
- hierarchyFiles.add(virtualFile);
+ ApplicationManager.getApplication().runReadAction(new Runnable() {
+ @Override
+ public void run() {
+ final Query<PsiClass> search = ClassInheritorsSearch.search(myTargetSuperClass);
+ final Set<VirtualFile> hierarchyFiles = new HashSet<VirtualFile>();
+ for (PsiClass aClass : search) {
+ final PsiFile containingFile = aClass.getContainingFile();
+ if (containingFile != null) {
+ final VirtualFile virtualFile = containingFile.getVirtualFile();
+ if (virtualFile != null) {
+ hierarchyFiles.add(virtualFile);
+ }
+ }
+ }
+ final Set<PsiMember> methodsToSearchDuplicates = new HashSet<PsiMember>();
+ for (PsiMember psiMember : myMembersAfterMove) {
+ if (psiMember instanceof PsiMethod && psiMember.isValid() && ((PsiMethod)psiMember).getBody() != null) {
+ methodsToSearchDuplicates.add(psiMember);
+ }
}
- }
- }
- final Set<PsiMember> methodsToSearchDuplicates = new HashSet<PsiMember>();
- for (PsiMember psiMember : myMembersAfterMove) {
- if (psiMember instanceof PsiMethod && psiMember.isValid() && ((PsiMethod)psiMember).getBody() != null) {
- methodsToSearchDuplicates.add(psiMember);
- }
- }
- MethodDuplicatesHandler.invokeOnScope(myProject, methodsToSearchDuplicates, new AnalysisScope(myProject, hierarchyFiles), true);
+ MethodDuplicatesHandler.invokeOnScope(myProject, methodsToSearchDuplicates, new AnalysisScope(myProject, hierarchyFiles), true);
+ }
+ });
}
}, MethodDuplicatesHandler.REFACTORING_NAME, true, myProject);
}
+ @Override
protected String getCommandName() {
return RefactoringBundle.message("pullUp.command", DescriptiveNameUtil.getDescriptiveName(mySourceClass));
}
@@ -303,19 +312,23 @@ public class PullUpProcessor extends BaseRefactoringProcessor implements PullUpD
}
private class PullUpUsageViewDescriptor implements UsageViewDescriptor {
+ @Override
public String getProcessedElementsHeader() {
return "Pull up members from";
}
+ @Override
@NotNull
public PsiElement[] getElements() {
return new PsiElement[]{mySourceClass};
}
+ @Override
public String getCodeReferencesText(int usagesCount, int filesCount) {
return "Class to pull up members to \"" + RefactoringUIUtil.getDescription(myTargetSuperClass, true) + "\"";
}
+ @Override
public String getCommentReferencesText(int usagesCount, int filesCount) {
return null;
}
diff --git a/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownProcessor.java b/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownProcessor.java
index ca3298bc97b2..bb09c69c9fcc 100644
--- a/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownProcessor.java
+++ b/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownProcessor.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 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.
@@ -19,6 +19,7 @@ import com.intellij.codeInsight.AnnotationUtil;
import com.intellij.codeInsight.ChangeContextUtil;
import com.intellij.codeInsight.intention.impl.CreateClassDialog;
import com.intellij.codeInsight.intention.impl.CreateSubclassAction;
+import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.project.Project;
@@ -72,10 +73,12 @@ public class PushDownProcessor extends BaseRefactoringProcessor {
myJavaDocPolicy = javaDocPolicy;
}
+ @Override
protected String getCommandName() {
return JavaPushDownHandler.REFACTORING_NAME;
}
+ @Override
@NotNull
protected UsageViewDescriptor createUsageViewDescriptor(UsageInfo[] usages) {
return new PushDownUsageViewDescriptor(myClass);
@@ -116,6 +119,7 @@ public class PushDownProcessor extends BaseRefactoringProcessor {
return data;
}
+ @Override
@NotNull
protected UsageInfo[] findUsages() {
final PsiClass[] inheritors = ClassInheritorsSearch.search(myClass, false).toArray(PsiClass.EMPTY_ARRAY);
@@ -147,6 +151,7 @@ public class PushDownProcessor extends BaseRefactoringProcessor {
return false;
}
+ @Override
protected boolean preprocessUsages(final Ref<UsageInfo[]> refUsages) {
final UsageInfo[] usagesIn = refUsages.get();
final PushDownConflicts pushDownConflicts = new PushDownConflicts(myClass, myMemberInfos);
@@ -177,13 +182,19 @@ public class PushDownProcessor extends BaseRefactoringProcessor {
}
}
Runnable runnable = new Runnable() {
+ @Override
public void run() {
- for (UsageInfo usage : usagesIn) {
- final PsiElement element = usage.getElement();
- if (element instanceof PsiClass) {
- pushDownConflicts.checkTargetClassConflicts((PsiClass)element, usagesIn.length > 1, element);
+ ApplicationManager.getApplication().runReadAction(new Runnable() {
+ @Override
+ public void run() {
+ for (UsageInfo usage : usagesIn) {
+ final PsiElement element = usage.getElement();
+ if (element instanceof PsiClass) {
+ pushDownConflicts.checkTargetClassConflicts((PsiClass)element, usagesIn.length > 1, element);
+ }
+ }
}
- }
+ });
}
};
@@ -204,6 +215,7 @@ public class PushDownProcessor extends BaseRefactoringProcessor {
return showConflicts(pushDownConflicts.getConflicts(), usagesIn);
}
+ @Override
protected void refreshElements(PsiElement[] elements) {
if(elements.length == 1 && elements[0] instanceof PsiClass) {
myClass = (PsiClass) elements[0];
@@ -213,6 +225,7 @@ public class PushDownProcessor extends BaseRefactoringProcessor {
}
}
+ @Override
protected void performRefactoring(UsageInfo[] usages) {
try {
encodeRefs();
@@ -509,6 +522,7 @@ public class PushDownProcessor extends BaseRefactoringProcessor {
decodeRefs(newMember, targetClass);
//rebind imports first
Collections.sort(refsToRebind, new Comparator<PsiReference>() {
+ @Override
public int compare(PsiReference o1, PsiReference o2) {
return PsiUtil.BY_POSITION.compare(o1.getElement(), o2.getElement());
}
diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesImpl.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesImpl.java
index 3e92a19373ab..844eb2dc0611 100644
--- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesImpl.java
+++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 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.
@@ -88,7 +88,7 @@ public class MoveClassesOrPackagesImpl {
if (element instanceof PsiDirectory) {
PsiPackage aPackage = JavaDirectoryService.getInstance().getPackage((PsiDirectory)element);
LOG.assertTrue(aPackage != null);
- if (aPackage.getQualifiedName().length() == 0) { //is default package
+ if (aPackage.getQualifiedName().isEmpty()) { //is default package
String message = RefactoringBundle.message("move.package.refactoring.cannot.be.applied.to.default.package");
CommonRefactoringUtil.showErrorMessage(RefactoringBundle.message("move.title"), message, HelpID.getMoveHelpID(element), project);
return null;
@@ -167,7 +167,7 @@ public class MoveClassesOrPackagesImpl {
message.append(RefactoringBundle.message("do.you.wish.to.continue"));
int ret =
Messages.showYesNoDialog(project, message.toString(), RefactoringBundle.message("warning.title"), Messages.getWarningIcon());
- if (ret != 0) {
+ if (ret != Messages.YES) {
return false;
}
}
@@ -323,8 +323,15 @@ public class MoveClassesOrPackagesImpl {
if (selectedTarget == null) return;
final MultiMap<PsiElement, String> conflicts = new MultiMap<PsiElement, String>();
final Runnable analyzeConflicts = new Runnable() {
+ @Override
public void run() {
- RefactoringConflictsUtil.analyzeModuleConflicts(project, Arrays.asList(directories), UsageInfo.EMPTY_ARRAY, selectedTarget, conflicts);
+ ApplicationManager.getApplication().runReadAction(new Runnable() {
+ @Override
+ public void run() {
+ RefactoringConflictsUtil
+ .analyzeModuleConflicts(project, Arrays.asList(directories), UsageInfo.EMPTY_ARRAY, selectedTarget, conflicts);
+ }
+ });
}
};
if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(analyzeConflicts, "Analyze Module Conflicts...", true, project)) {
@@ -345,8 +352,10 @@ public class MoveClassesOrPackagesImpl {
final Ref<IncorrectOperationException> ex = Ref.create(null);
final String commandDescription = RefactoringBundle.message("moving.directories.command");
Runnable runnable = new Runnable() {
+ @Override
public void run() {
ApplicationManager.getApplication().runWriteAction(new Runnable() {
+ @Override
public void run() {
LocalHistoryAction a = LocalHistory.getInstance().startAction(commandDescription);
try {
diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java
index f398dfdd115a..0e02b8f94e28 100644
--- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java
+++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java
@@ -23,7 +23,6 @@ import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.openapi.wm.WindowManager;
import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.PackageScope;
@@ -48,7 +47,6 @@ import com.intellij.refactoring.util.classRefs.ClassReferenceScanner;
import com.intellij.usageView.UsageInfo;
import com.intellij.usageView.UsageViewDescriptor;
import com.intellij.usageView.UsageViewUtil;
-import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.Processor;
import com.intellij.util.VisibilityUtil;
@@ -472,9 +470,7 @@ public class MoveClassesOrPackagesProcessor extends BaseRefactoringProcessor {
}
protected boolean isPreviewUsages(UsageInfo[] usages) {
- if (UsageViewUtil.hasNonCodeUsages(usages)) {
- WindowManager.getInstance().getStatusBar(myProject).setInfo(
- RefactoringBundle.message("occurrences.found.in.comments.strings.and.non.java.files"));
+ if (UsageViewUtil.reportNonRegularUsages(usages, myProject)) {
return true;
}
else {
diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerClassJavaUsagesHandler.java b/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerClassJavaUsagesHandler.java
new file mode 100644
index 000000000000..0589e6d8e187
--- /dev/null
+++ b/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerClassJavaUsagesHandler.java
@@ -0,0 +1,58 @@
+/*
+ * 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.refactoring.move.moveInner;
+
+import com.intellij.psi.*;
+import com.intellij.refactoring.util.RefactoringChangeUtil;
+import com.intellij.usageView.UsageInfo;
+import org.jetbrains.annotations.NotNull;
+
+public class MoveInnerClassJavaUsagesHandler implements MoveInnerClassUsagesHandler {
+ @Override
+ public void correctInnerClassUsage(@NotNull UsageInfo usage, @NotNull PsiClass outerClass) {
+ PsiElement refElement = usage.getElement();
+ if (refElement == null) return;
+
+ PsiManager manager = refElement.getManager();
+
+ PsiElement refParent = refElement.getParent();
+ if (refParent instanceof PsiNewExpression || refParent instanceof PsiAnonymousClass) {
+ PsiNewExpression newExpr = refParent instanceof PsiNewExpression
+ ? (PsiNewExpression)refParent
+ : (PsiNewExpression)refParent.getParent();
+
+ PsiExpressionList argList = newExpr.getArgumentList();
+
+ if (argList != null) { // can happen in incomplete code
+ if (newExpr.getQualifier() == null) {
+ PsiThisExpression thisExpr;
+ PsiClass parentClass = RefactoringChangeUtil.getThisClass(newExpr);
+ if (outerClass.equals(parentClass)) {
+ thisExpr = RefactoringChangeUtil.createThisExpression(manager, null);
+ }
+ else {
+ thisExpr = RefactoringChangeUtil.createThisExpression(manager, outerClass);
+ }
+ argList.addAfter(thisExpr, null);
+ }
+ else {
+ argList.addAfter(newExpr.getQualifier(), null);
+ newExpr.getQualifier().delete();
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerClassUsagesHandler.java b/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerClassUsagesHandler.java
new file mode 100644
index 000000000000..97946456d6fb
--- /dev/null
+++ b/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerClassUsagesHandler.java
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.refactoring.move.moveInner;
+
+import com.intellij.lang.LanguageExtension;
+import com.intellij.psi.PsiClass;
+import com.intellij.usageView.UsageInfo;
+import org.jetbrains.annotations.NotNull;
+
+public interface MoveInnerClassUsagesHandler {
+ LanguageExtension<MoveInnerClassUsagesHandler> EP_NAME =
+ new LanguageExtension<MoveInnerClassUsagesHandler>("com.intellij.refactoring.moveInnerClassUsagesHandler");
+
+ void correctInnerClassUsage(@NotNull UsageInfo usage, @NotNull PsiClass outerClass);
+} \ No newline at end of file
diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerProcessor.java
index d4239e578016..d56b8c02844e 100644
--- a/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerProcessor.java
+++ b/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerProcessor.java
@@ -214,35 +214,11 @@ public class MoveInnerProcessor extends BaseRefactoringProcessor {
// correct references in usages
for (UsageInfo usage : usages) {
- if (usage.isNonCodeUsage) continue;
- PsiElement refElement = usage.getElement();
- if (myParameterNameOuterClass != null) { // should pass outer as parameter
- PsiElement refParent = refElement.getParent();
- if (refParent instanceof PsiNewExpression || refParent instanceof PsiAnonymousClass) {
- PsiNewExpression newExpr = refParent instanceof PsiNewExpression
- ? (PsiNewExpression)refParent
- : (PsiNewExpression)refParent.getParent();
-
- PsiExpressionList argList = newExpr.getArgumentList();
-
- if (argList != null) { // can happen in incomplete code
- if (newExpr.getQualifier() == null) {
- PsiThisExpression thisExpr;
- PsiClass parentClass = RefactoringChangeUtil.getThisClass(newExpr);
- if (myOuterClass.equals(parentClass)) {
- thisExpr = RefactoringChangeUtil.createThisExpression(manager, null);
- }
- else {
- thisExpr = RefactoringChangeUtil.createThisExpression(manager, myOuterClass);
- }
- argList.addAfter(thisExpr, null);
- }
- else {
- argList.addAfter(newExpr.getQualifier(), null);
- newExpr.getQualifier().delete();
- }
- }
- }
+ if (usage.isNonCodeUsage || myParameterNameOuterClass == null) continue; // should pass outer as parameter
+
+ MoveInnerClassUsagesHandler usagesHandler = MoveInnerClassUsagesHandler.EP_NAME.forLanguage(usage.getElement().getLanguage());
+ if (usagesHandler != null) {
+ usagesHandler.correctInnerClassUsage(usage, myOuterClass);
}
}
@@ -554,4 +530,4 @@ public class MoveInnerProcessor extends BaseRefactoringProcessor {
public String getParameterName() {
return myParameterNameOuterClass;
}
-}
+} \ No newline at end of file
diff --git a/java/java-impl/src/com/intellij/refactoring/turnRefsToSuper/TurnRefsToSuperProcessorBase.java b/java/java-impl/src/com/intellij/refactoring/turnRefsToSuper/TurnRefsToSuperProcessorBase.java
index 1ed6de9ced09..b4142228f01f 100644
--- a/java/java-impl/src/com/intellij/refactoring/turnRefsToSuper/TurnRefsToSuperProcessorBase.java
+++ b/java/java-impl/src/com/intellij/refactoring/turnRefsToSuper/TurnRefsToSuperProcessorBase.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.
@@ -69,6 +69,7 @@ public abstract class TurnRefsToSuperProcessorBase extends BaseRefactoringProces
private final String mySuperClassName;
private final List<UsageInfo> myVariablesUsages = new ArrayList<UsageInfo>();
+ @Override
protected boolean preprocessUsages(Ref<UsageInfo[]> refUsages) {
UsageInfo[] usages = refUsages.get();
List<UsageInfo> filtered = new ArrayList<UsageInfo>();
@@ -93,8 +94,14 @@ public abstract class TurnRefsToSuperProcessorBase extends BaseRefactoringProces
}
Runnable runnable = new Runnable() {
+ @Override
public void run() {
- myVariableRenamer.findUsages(myVariablesUsages, false, false);
+ ApplicationManager.getApplication().runReadAction(new Runnable() {
+ @Override
+ public void run() {
+ myVariableRenamer.findUsages(myVariablesUsages, false, false);
+ }
+ });
}
};
@@ -338,6 +345,7 @@ public abstract class TurnRefsToSuperProcessorBase extends BaseRefactoringProces
if (substitutor == null) return;
final LocalSearchScope baseScope = new LocalSearchScope(ownerClass);
ReferencesSearch.search(typeParameter, baseScope).forEach(new Processor<PsiReference>() {
+ @Override
public boolean process(final PsiReference ref) {
final PsiElement element = ref.getElement();
final PsiElement parent = element.getParent();
@@ -708,6 +716,7 @@ public abstract class TurnRefsToSuperProcessorBase extends BaseRefactoringProces
}
class Colorer implements OneEndFunctor {
+ @Override
public Mark compute(Mark from, Mark edge, Mark to) {
VisitMark mark = new VisitMark((VisitMark)to);
@@ -737,6 +746,7 @@ public abstract class TurnRefsToSuperProcessorBase extends BaseRefactoringProces
private boolean myVisited;
private final PsiElement myElement;
+ @Override
public boolean coincidesWith(Mark x) {
return ((VisitMark)x).myVisited == myVisited;
}
@@ -773,10 +783,12 @@ public abstract class TurnRefsToSuperProcessorBase extends BaseRefactoringProces
myMark = new VisitMark(x);
}
+ @Override
public Mark getMark() {
return myMark;
}
+ @Override
public void setMark(Mark x) {
myMark = (VisitMark)x;
}
diff --git a/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationProcessor.java b/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationProcessor.java
index 609a981b7bf4..2998ec6b0f07 100644
--- a/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationProcessor.java
+++ b/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationProcessor.java
@@ -88,28 +88,32 @@ public class TypeMigrationProcessor extends BaseRefactoringProcessor {
final Editor editor,
final TypeMigrationRules rules,
final PsiElement root) {
+ final PsiFile containingFile = root.getContainingFile();
final TypeMigrationProcessor processor = new TypeMigrationProcessor(project, root, rules) {
@Override
public void performRefactoring(final UsageInfo[] usages) {
super.performRefactoring(usages);
- ApplicationManager.getApplication().invokeLater(new Runnable() {
- public void run() {
- final List<PsiElement> result = new ArrayList<PsiElement>();
- for (UsageInfo usage : usages) {
- final PsiElement element = usage.getElement();
- if (element instanceof PsiMethod) {
- result.add(((PsiMethod)element).getReturnTypeElement());
- }
- else if (element instanceof PsiVariable) {
- result.add(((PsiVariable)element).getTypeElement());
- }
- else if (element != null) {
- result.add(element);
+ if (editor != null) {
+ ApplicationManager.getApplication().invokeLater(new Runnable() {
+ public void run() {
+ final List<PsiElement> result = new ArrayList<PsiElement>();
+ for (UsageInfo usage : usages) {
+ final PsiElement element = usage.getElement();
+ if (element == null || containingFile != element.getContainingFile()) continue;
+ if (element instanceof PsiMethod) {
+ result.add(((PsiMethod)element).getReturnTypeElement());
+ }
+ else if (element instanceof PsiVariable) {
+ result.add(((PsiVariable)element).getTypeElement());
+ }
+ else {
+ result.add(element);
+ }
}
+ RefactoringUtil.highlightAllOccurrences(project, PsiUtilCore.toPsiElementArray(result), editor);
}
- if (editor != null) RefactoringUtil.highlightAllOccurrences(project, PsiUtilCore.toPsiElementArray(result), editor);
- }
- });
+ });
+ }
}
};
processor.run();
diff --git a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java
index ca01331d3e94..ed08349519a7 100644
--- a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java
+++ b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java
@@ -677,7 +677,7 @@ public class RefactoringUtil {
public static PsiExpression convertInitializerToNormalExpression(PsiExpression expression, PsiType forcedReturnType)
throws IncorrectOperationException {
- if (expression instanceof PsiArrayInitializerExpression) {
+ if (expression instanceof PsiArrayInitializerExpression && (forcedReturnType == null || forcedReturnType instanceof PsiArrayType)) {
return createNewExpressionFromArrayInitializer((PsiArrayInitializerExpression)expression, forcedReturnType);
}
return expression;