From 5e792f7395ec3ac97bb20233048ce411c5bba77b Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 22 Feb 2011 13:20:21 +0100 Subject: [PATCH] remove code duplication: introduce and use RefactoringElementAdapter --- .../execution/junit/RefactoringListeners.java | 22 +++++------- .../listeners/RefactoringElementAdapter.java | 36 +++++++++++++++++++ ...factoringScopeElementListenerProvider.java | 14 ++------ .../android/run/AndroidRunConfiguration.java | 9 ++--- .../intellij/execution/junit/TestMethod.java | 15 +++----- .../configuration/TestNGConfiguration.java | 15 +++----- .../PaletteRefactoringListenerProvider.java | 9 ++--- 7 files changed, 61 insertions(+), 59 deletions(-) create mode 100644 platform/lang-api/src/com/intellij/refactoring/listeners/RefactoringElementAdapter.java diff --git a/java/execution/impl/src/com/intellij/execution/junit/RefactoringListeners.java b/java/execution/impl/src/com/intellij/execution/junit/RefactoringListeners.java index 7e88f7ea46ea..fd2518cb3a5f 100644 --- a/java/execution/impl/src/com/intellij/execution/junit/RefactoringListeners.java +++ b/java/execution/impl/src/com/intellij/execution/junit/RefactoringListeners.java @@ -22,6 +22,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.refactoring.listeners.RefactoringElementAdapter; import com.intellij.refactoring.listeners.RefactoringElementListener; import org.jetbrains.annotations.NotNull; @@ -85,7 +86,7 @@ public class RefactoringListeners { } } - private static abstract class RenameElement implements RefactoringElementListener { + private static abstract class RenameElement extends RefactoringElementAdapter { private final Accessor myAccessor; private final String myPath; @@ -94,22 +95,15 @@ public class RefactoringListeners { myPath = path; } - public void elementMoved(@NotNull final PsiElement newElement) { - setName((T)newElement); - } - - public void elementRenamed(@NotNull final PsiElement newElement) { - setName((T)newElement); - } - - private void setName(@NotNull T newElement) { - String qualifiedName = getQualifiedName(newElement); + public void elementRenamedOrMoved(@NotNull final PsiElement newElement) { + T newElement1 = (T)newElement; + String qualifiedName = getQualifiedName(newElement1); if (myPath.length() > 0) { qualifiedName = qualifiedName + "." + myPath; - newElement = findNewElement(newElement, qualifiedName); + newElement1 = findNewElement(newElement1, qualifiedName); } - if (newElement != null) { - myAccessor.setPsiElement(newElement); + if (newElement1 != null) { + myAccessor.setPsiElement(newElement1); } else { myAccessor.setName(qualifiedName); diff --git a/platform/lang-api/src/com/intellij/refactoring/listeners/RefactoringElementAdapter.java b/platform/lang-api/src/com/intellij/refactoring/listeners/RefactoringElementAdapter.java new file mode 100644 index 000000000000..11cba838d421 --- /dev/null +++ b/platform/lang-api/src/com/intellij/refactoring/listeners/RefactoringElementAdapter.java @@ -0,0 +1,36 @@ +/* + * Copyright 2000-2011 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.listeners; + +import com.intellij.psi.PsiElement; +import org.jetbrains.annotations.NotNull; + +/** + * @author yole + */ +public abstract class RefactoringElementAdapter implements RefactoringElementListener { + @Override + public final void elementMoved(@NotNull PsiElement newElement) { + elementRenamedOrMoved(newElement); + } + + protected abstract void elementRenamedOrMoved(@NotNull PsiElement newElement); + + @Override + public final void elementRenamed(@NotNull PsiElement newElement) { + elementRenamedOrMoved(newElement); + } +} diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/ui/RefactoringScopeElementListenerProvider.java b/platform/lang-impl/src/com/intellij/packageDependencies/ui/RefactoringScopeElementListenerProvider.java index 505ed9dbb175..940cbe6d37c8 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/ui/RefactoringScopeElementListenerProvider.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/ui/RefactoringScopeElementListenerProvider.java @@ -20,6 +20,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiQualifiedNamedElement; import com.intellij.psi.search.scope.packageSet.*; +import com.intellij.refactoring.listeners.RefactoringElementAdapter; import com.intellij.refactoring.listeners.RefactoringElementListener; import com.intellij.refactoring.listeners.RefactoringElementListenerComposite; import com.intellij.refactoring.listeners.RefactoringElementListenerProvider; @@ -80,18 +81,9 @@ public class RefactoringScopeElementListenerProvider implements RefactoringEleme if (composite == null) { composite = new RefactoringElementListenerComposite(); } - composite.addListener(new RefactoringElementListener() { + composite.addListener(new RefactoringElementAdapter() { @Override - public void elementMoved(@NotNull PsiElement newElement) { - setName(newElement); - } - - @Override - public void elementRenamed(@NotNull PsiElement newElement) { - setName(newElement); - } - - private void setName(@NotNull PsiElement newElement) { + public void elementRenamedOrMoved(@NotNull PsiElement newElement) { LOG.assertTrue(newElement instanceof PsiQualifiedNamedElement); try { final String newPattern = text.replace(descriptor.getOldQName(), ((PsiQualifiedNamedElement)newElement).getQualifiedName()); diff --git a/plugins/android/src/org/jetbrains/android/run/AndroidRunConfiguration.java b/plugins/android/src/org/jetbrains/android/run/AndroidRunConfiguration.java index 64dd0fc2cb42..5c8b414c6f0b 100644 --- a/plugins/android/src/org/jetbrains/android/run/AndroidRunConfiguration.java +++ b/plugins/android/src/org/jetbrains/android/run/AndroidRunConfiguration.java @@ -35,6 +35,7 @@ import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.search.ProjectScope; +import com.intellij.refactoring.listeners.RefactoringElementAdapter; import com.intellij.refactoring.listeners.RefactoringElementListener; import org.jetbrains.android.dom.manifest.Manifest; import org.jetbrains.android.facet.AndroidFacet; @@ -115,12 +116,8 @@ public class AndroidRunConfiguration extends AndroidRunConfigurationBase impleme @Nullable public RefactoringElementListener getRefactoringElementListener(PsiElement element) { if (element instanceof PsiClass && Comparing.strEqual(((PsiClass)element).getQualifiedName(), ACTIVITY_CLASS, true)) { - return new RefactoringElementListener() { - public void elementMoved(@NotNull PsiElement newElement) { - ACTIVITY_CLASS = ((PsiClass)newElement).getQualifiedName(); - } - - public void elementRenamed(@NotNull PsiElement newElement) { + return new RefactoringElementAdapter() { + public void elementRenamedOrMoved(@NotNull PsiElement newElement) { ACTIVITY_CLASS = ((PsiClass)newElement).getQualifiedName(); } }; diff --git a/plugins/junit/src/com/intellij/execution/junit/TestMethod.java b/plugins/junit/src/com/intellij/execution/junit/TestMethod.java index 5ad9dbf38108..63a2ec4e13ac 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestMethod.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestMethod.java @@ -26,6 +26,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiPackage; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.refactoring.listeners.RefactoringElementAdapter; import com.intellij.refactoring.listeners.RefactoringElementListener; import com.intellij.rt.execution.junit.JUnitStarter; import org.jetbrains.annotations.NotNull; @@ -78,18 +79,10 @@ class TestMethod extends TestObject { final PsiMethod method = (PsiMethod)element; if (!method.getName().equals(configuration.getPersistentData().getMethodName())) return null; if (!method.getContainingClass().equals(configuration.myClass.getPsiElement())) return null; - return new RefactoringElementListener() { - public void elementMoved(@NotNull final PsiElement newElement) { - setMethod(configuration, (PsiMethod)newElement); - } - - public void elementRenamed(@NotNull final PsiElement newElement) { - setMethod(configuration, (PsiMethod)newElement); - } - - private void setMethod(final JUnitConfiguration configuration, final PsiMethod psiMethod) { + return new RefactoringElementAdapter() { + public void elementRenamedOrMoved(@NotNull final PsiElement newElement) { final boolean generatedName = configuration.isGeneratedName(); - configuration.getPersistentData().setTestMethod(PsiLocation.fromPsiElement(psiMethod)); + configuration.getPersistentData().setTestMethod(PsiLocation.fromPsiElement((PsiMethod)newElement)); if (generatedName) configuration.setGeneratedName(); } }; diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java index a12c01192498..1678e3670bfb 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java @@ -39,6 +39,7 @@ import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.refactoring.listeners.RefactoringElementAdapter; import com.intellij.refactoring.listeners.RefactoringElementListener; import com.theoryinpractice.testng.model.TestData; import com.theoryinpractice.testng.model.TestType; @@ -395,18 +396,10 @@ public class TestNGConfiguration extends ModuleBasedConfiguration