diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureDetector.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureDetector.java index 3e3ace28c951..6e13dc014c19 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureDetector.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureDetector.java @@ -38,7 +38,7 @@ import java.util.HashSet; * User: anna * Date: Sep 6, 2010 */ -public class JavaChangeSignatureDetector implements ChangeSignatureGestureDetectorExtension { +public class JavaChangeSignatureDetector implements LanguageChangeSignatureDetector { private static final Logger LOG = Logger.getInstance("#" + JavaChangeSignatureDetector.class.getName()); @Override diff --git a/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureDetector.java b/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureDetector.java index 135d9af86569..456f38681c54 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureDetector.java +++ b/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureDetector.java @@ -23,7 +23,6 @@ import com.intellij.openapi.editor.event.DocumentAdapter; import com.intellij.openapi.editor.event.DocumentEvent; import com.intellij.openapi.editor.event.EditorFactoryEvent; import com.intellij.openapi.editor.event.EditorFactoryListener; -import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.psi.*; @@ -51,53 +50,32 @@ public class ChangeSignatureGestureDetector extends PsiTreeChangeAdapter impleme return project.getComponent(ChangeSignatureGestureDetector.class); } - @Nullable - protected static ChangeInfo createCurrentChangeInfo(@NotNull PsiElement element, @Nullable ChangeInfo changeInfo) { - for (ChangeSignatureGestureDetectorExtension detectorExtension : Extensions - .getExtensions(ChangeSignatureGestureDetectorExtension.EP_NAME)) { - final ChangeInfo newChangeInfo = detectorExtension.createCurrentChangeSignature(element, changeInfo); - if (newChangeInfo != null) return newChangeInfo; - } - return null; - } - - - - public boolean isChangeSignatureAvailable(PsiElement element) { + public boolean isChangeSignatureAvailable(@NotNull PsiElement element) { final MyDocumentChangeAdapter adapter = myListenerMap.get(element.getContainingFile()); if (adapter != null && adapter.getCurrentInfo() != null) { - for (ChangeSignatureGestureDetectorExtension extension : Extensions - .getExtensions(ChangeSignatureGestureDetectorExtension.EP_NAME)) { - if (extension.isChangeSignatureAvailable(element, adapter.getCurrentInfo())) { - return true; - } - } + final LanguageChangeSignatureDetector detector = LanguageChangeSignatureDetectors.INSTANCE.forLanguage(element.getLanguage()); + LOG.assertTrue(detector != null); + return detector.isChangeSignatureAvailable(element, adapter.getCurrentInfo()); } return false; } @Nullable - public static TextRange getHighlightingRange(PsiElement element) { - for (ChangeSignatureGestureDetectorExtension extension : Extensions - .getExtensions(ChangeSignatureGestureDetectorExtension.EP_NAME)) { - final TextRange range = extension.getHighlightingRange(element); - if (range != null) return range; - } - return null; + public static TextRange getHighlightingRange(@NotNull PsiElement element) { + final LanguageChangeSignatureDetector detector = LanguageChangeSignatureDetectors.INSTANCE.forLanguage(element.getLanguage()); + LOG.assertTrue(detector != null); + return detector.getHighlightingRange(element); } public void changeSignature(PsiFile file) { try { myDeaf = true; final MyDocumentChangeAdapter changeBean = myListenerMap.get(file); - - for (ChangeSignatureGestureDetectorExtension detectorExtension : Extensions - .getExtensions(ChangeSignatureGestureDetectorExtension.EP_NAME)) { - if (detectorExtension.showDialog(changeBean.getCurrentInfo(), changeBean.getInitialText())) { - changeBean.setInitialText(null); - changeBean.setCurrentInfo(null); - return; - } + final ChangeInfo currentInfo = changeBean.getCurrentInfo(); + final LanguageChangeSignatureDetector detector = LanguageChangeSignatureDetectors.INSTANCE.forLanguage(currentInfo.getLanguage()); + if (detector.showDialog(currentInfo, changeBean.getInitialText())) { + changeBean.setInitialText(null); + changeBean.setCurrentInfo(null); } } finally { @@ -138,7 +116,7 @@ public class ChangeSignatureGestureDetector extends PsiTreeChangeAdapter impleme if (file != null) { final MyDocumentChangeAdapter changeBean = myListenerMap.get(file); if (changeBean != null && changeBean.getInitialText() != null) { - final ChangeInfo info = createCurrentChangeInfo(event.getChild(), changeBean.getCurrentInfo()); + final ChangeInfo info = LanguageChangeSignatureDetectors.createCurrentChangeInfo(event.getChild(), changeBean.getCurrentInfo()); changeBean.setCurrentInfo(info); if (info == null) { changeBean.setInitialText(null); @@ -199,7 +177,7 @@ public class ChangeSignatureGestureDetector extends PsiTreeChangeAdapter impleme if (file != null) { final PsiElement element = file.findElementAt(e.getOffset()); if (element != null) { - final ChangeInfo info = createCurrentChangeInfo(element, myCurrentInfo); + final ChangeInfo info = LanguageChangeSignatureDetectors.createCurrentChangeInfo(element, myCurrentInfo); if (info != null) { myInitialText = document.getText(); myCurrentInfo = info; @@ -210,4 +188,5 @@ public class ChangeSignatureGestureDetector extends PsiTreeChangeAdapter impleme } } } + } diff --git a/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureVisistor.java b/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureVisistor.java index ce62b69103af..9210ed136e9c 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureVisistor.java +++ b/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureVisistor.java @@ -21,6 +21,7 @@ import com.intellij.codeInsight.daemon.impl.HighlightVisitor; import com.intellij.codeInsight.daemon.impl.analysis.HighlightInfoHolder; import com.intellij.codeInsight.daemon.impl.quickfix.QuickFixAction; import com.intellij.lang.annotation.HighlightSeverity; +import com.intellij.openapi.application.ex.ApplicationManagerEx; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.markup.EffectType; import com.intellij.openapi.editor.markup.TextAttributes; @@ -41,7 +42,7 @@ public class ChangeSignatureGestureVisistor implements HighlightVisitor { @Override public boolean suitableForFile(PsiFile file) { - return true; + return file != null && ApplicationManagerEx.getApplicationEx().isInternal() && LanguageChangeSignatureDetectors.isSuitableForLanguage(file.getLanguage()); } @Override diff --git a/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureDetectorExtension.java b/platform/lang-impl/src/com/intellij/refactoring/changeSignature/LanguageChangeSignatureDetector.java similarity index 83% rename from platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureDetectorExtension.java rename to platform/lang-impl/src/com/intellij/refactoring/changeSignature/LanguageChangeSignatureDetector.java index b82090f64ac0..3084336b0947 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureGestureDetectorExtension.java +++ b/platform/lang-impl/src/com/intellij/refactoring/changeSignature/LanguageChangeSignatureDetector.java @@ -15,7 +15,6 @@ */ package com.intellij.refactoring.changeSignature; -import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; @@ -25,8 +24,8 @@ import org.jetbrains.annotations.Nullable; * User: anna * Date: Sep 6, 2010 */ -public interface ChangeSignatureGestureDetectorExtension { - ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.changeSignatureDetector"); +public interface LanguageChangeSignatureDetector { + @Nullable ChangeInfo createCurrentChangeSignature(final @NotNull PsiElement element, diff --git a/platform/lang-impl/src/com/intellij/refactoring/changeSignature/LanguageChangeSignatureDetectors.java b/platform/lang-impl/src/com/intellij/refactoring/changeSignature/LanguageChangeSignatureDetectors.java new file mode 100644 index 000000000000..990ab277170d --- /dev/null +++ b/platform/lang-impl/src/com/intellij/refactoring/changeSignature/LanguageChangeSignatureDetectors.java @@ -0,0 +1,44 @@ +/* + * Copyright 2000-2010 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.changeSignature; + +import com.intellij.lang.Language; +import com.intellij.lang.LanguageExtension; +import com.intellij.psi.PsiElement; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** +* User: anna +* Date: Sep 9, 2010 +*/ +class LanguageChangeSignatureDetectors extends LanguageExtension { + public static final LanguageChangeSignatureDetectors INSTANCE = new LanguageChangeSignatureDetectors(); + + LanguageChangeSignatureDetectors() { + super("com.intellij.changeSignatureDetector"); + } + + @Nullable + protected static ChangeInfo createCurrentChangeInfo(@NotNull PsiElement element, @Nullable ChangeInfo changeInfo) { + final LanguageChangeSignatureDetector detector = INSTANCE.forLanguage(element.getLanguage()); + return detector != null ? detector.createCurrentChangeSignature(element, changeInfo) : null; + } + + public static boolean isSuitableForLanguage(Language lang) { + return INSTANCE.forLanguage(lang) != null; + } +} diff --git a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml index 67970a85faae..64edd81f952f 100644 --- a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml @@ -444,7 +444,8 @@ - + diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml index aa4adeb0c576..3c227f3cad34 100644 --- a/resources/src/META-INF/IdeaPlugin.xml +++ b/resources/src/META-INF/IdeaPlugin.xml @@ -321,7 +321,7 @@ - +