From 5e71677db71c83cebf4ef7c44baac35e62b10816 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Mon, 30 Aug 2010 17:34:43 +0400 Subject: [PATCH 1/9] IDEA-58132: 'Extract interface' action should not be available in plain XML file --- .../refactoring/actions/AnonymousToInnerAction.java | 4 ++-- .../refactoring/actions/ChangeSignatureAction.java | 2 +- .../refactoring/actions/ConvertToInstanceMethodAction.java | 2 +- .../intellij/refactoring/actions/InvertBooleanAction.java | 2 +- .../com/intellij/refactoring/actions/MakeStaticAction.java | 2 +- .../intellij/refactoring/actions/TempWithQueryAction.java | 2 +- .../typeMigration/actions/ChangeTypeSignatureAction.java | 4 ++-- .../refactoring/actions/BasePlatformRefactoringAction.java | 7 +++++++ .../refactoring/actions/BaseRefactoringAction.java | 6 +++--- .../src/com/intellij/refactoring/actions/InlineAction.java | 3 ++- .../com/intellij/refactoring/actions/SafeDeleteAction.java | 4 ++-- .../extract/ExtractManagedDependenciesAction.java | 6 +++--- .../refactorings/introduce/IntroducePropertyAction.java | 6 +++--- 13 files changed, 29 insertions(+), 21 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/actions/AnonymousToInnerAction.java b/java/java-impl/src/com/intellij/refactoring/actions/AnonymousToInnerAction.java index eb86ca9eff1b..ef797c391279 100644 --- a/java/java-impl/src/com/intellij/refactoring/actions/AnonymousToInnerAction.java +++ b/java/java-impl/src/com/intellij/refactoring/actions/AnonymousToInnerAction.java @@ -34,7 +34,7 @@ public class AnonymousToInnerAction extends BaseRefactoringAction { return false; } - protected boolean isAvailableOnElementInEditorAndFile(final PsiElement element, final Editor editor, PsiFile file) { + protected boolean isAvailableOnElementInEditorAndFile(final PsiElement element, final Editor editor, PsiFile file, DataContext context) { final PsiElement targetElement = file.findElementAt(editor.getCaretModel().getOffset()); if (PsiTreeUtil.getParentOfType(targetElement, PsiAnonymousClass.class) != null) { return true; @@ -49,4 +49,4 @@ public class AnonymousToInnerAction extends BaseRefactoringAction { public RefactoringActionHandler getHandler(DataContext dataContext) { return new AnonymousToInnerHandler(); } -} \ No newline at end of file +} diff --git a/java/java-impl/src/com/intellij/refactoring/actions/ChangeSignatureAction.java b/java/java-impl/src/com/intellij/refactoring/actions/ChangeSignatureAction.java index a0612a770ea5..8e07299a687f 100644 --- a/java/java-impl/src/com/intellij/refactoring/actions/ChangeSignatureAction.java +++ b/java/java-impl/src/com/intellij/refactoring/actions/ChangeSignatureAction.java @@ -37,7 +37,7 @@ public class ChangeSignatureAction extends BaseRefactoringAction { return elements.length == 1 && (elements[0] instanceof PsiMethod || elements[0] instanceof PsiClass); } - protected boolean isAvailableOnElementInEditorAndFile(final PsiElement element, final Editor editor, PsiFile file) { + protected boolean isAvailableOnElementInEditorAndFile(final PsiElement element, final Editor editor, PsiFile file, DataContext context) { PsiElement targetMember = findTargetMember(file, editor); if (targetMember == null) return false; final ChangeSignatureHandler targetHandler = getChangeSignatureHandler(targetMember.getLanguage()); diff --git a/java/java-impl/src/com/intellij/refactoring/actions/ConvertToInstanceMethodAction.java b/java/java-impl/src/com/intellij/refactoring/actions/ConvertToInstanceMethodAction.java index 1374d091578d..d0f11ebc6a75 100644 --- a/java/java-impl/src/com/intellij/refactoring/actions/ConvertToInstanceMethodAction.java +++ b/java/java-impl/src/com/intellij/refactoring/actions/ConvertToInstanceMethodAction.java @@ -33,7 +33,7 @@ public class ConvertToInstanceMethodAction extends BaseRefactoringAction { return elements.length == 1 && elements[0] instanceof PsiMethod; } - protected boolean isAvailableOnElementInEditorAndFile(PsiElement element, final Editor editor, PsiFile file) { + protected boolean isAvailableOnElementInEditorAndFile(PsiElement element, final Editor editor, PsiFile file, DataContext context) { if (element instanceof PsiIdentifier) element = element.getParent(); return element instanceof PsiMethod && ((PsiMethod) element).hasModifierProperty(PsiModifier.STATIC); } diff --git a/java/java-impl/src/com/intellij/refactoring/actions/InvertBooleanAction.java b/java/java-impl/src/com/intellij/refactoring/actions/InvertBooleanAction.java index bbff15e1893a..7ad4645837d5 100644 --- a/java/java-impl/src/com/intellij/refactoring/actions/InvertBooleanAction.java +++ b/java/java-impl/src/com/intellij/refactoring/actions/InvertBooleanAction.java @@ -33,7 +33,7 @@ public class InvertBooleanAction extends BaseRefactoringAction { return elements.length == 1 && (elements[0] instanceof PsiMethod || elements[0] instanceof PsiVariable); } - protected boolean isAvailableOnElementInEditorAndFile(final PsiElement element, final Editor editor, PsiFile file) { + protected boolean isAvailableOnElementInEditorAndFile(final PsiElement element, final Editor editor, PsiFile file, DataContext context) { if (element instanceof PsiVariable) { return PsiType.BOOLEAN.equals(((PsiVariable) element).getType()); } diff --git a/java/java-impl/src/com/intellij/refactoring/actions/MakeStaticAction.java b/java/java-impl/src/com/intellij/refactoring/actions/MakeStaticAction.java index 78d52d95d12e..4514b13c2eab 100644 --- a/java/java-impl/src/com/intellij/refactoring/actions/MakeStaticAction.java +++ b/java/java-impl/src/com/intellij/refactoring/actions/MakeStaticAction.java @@ -39,7 +39,7 @@ public class MakeStaticAction extends BaseRefactoringAction { return (elements.length == 1) && (elements[0] instanceof PsiMethod) && !((PsiMethod)elements[0]).isConstructor(); } - protected boolean isAvailableOnElementInEditorAndFile(PsiElement element, final Editor editor, PsiFile file) { + protected boolean isAvailableOnElementInEditorAndFile(PsiElement element, final Editor editor, PsiFile file, DataContext context) { if (element instanceof PsiIdentifier) { element = element.getParent(); } diff --git a/java/java-impl/src/com/intellij/refactoring/actions/TempWithQueryAction.java b/java/java-impl/src/com/intellij/refactoring/actions/TempWithQueryAction.java index 85128310f0b7..6717bc14dd56 100644 --- a/java/java-impl/src/com/intellij/refactoring/actions/TempWithQueryAction.java +++ b/java/java-impl/src/com/intellij/refactoring/actions/TempWithQueryAction.java @@ -37,7 +37,7 @@ public class TempWithQueryAction extends BaseRefactoringAction{ return new TempWithQueryHandler(); } - protected boolean isAvailableOnElementInEditorAndFile(final PsiElement element, final Editor editor, PsiFile file) { + protected boolean isAvailableOnElementInEditorAndFile(final PsiElement element, final Editor editor, PsiFile file, DataContext context) { return element instanceof PsiLocalVariable && ((PsiLocalVariable) element).getInitializer() != null; } } \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/refactoring/typeMigration/actions/ChangeTypeSignatureAction.java b/java/java-impl/src/com/intellij/refactoring/typeMigration/actions/ChangeTypeSignatureAction.java index d17f82a69a08..7c03209ab5e3 100644 --- a/java/java-impl/src/com/intellij/refactoring/typeMigration/actions/ChangeTypeSignatureAction.java +++ b/java/java-impl/src/com/intellij/refactoring/typeMigration/actions/ChangeTypeSignatureAction.java @@ -34,7 +34,7 @@ public class ChangeTypeSignatureAction extends BaseRefactoringAction { return true; } - protected boolean isAvailableOnElementInEditorAndFile(final PsiElement element, final Editor editor, PsiFile file) { + protected boolean isAvailableOnElementInEditorAndFile(final PsiElement element, final Editor editor, PsiFile file, DataContext context) { final PsiElement psiElement = file.findElementAt(editor.getCaretModel().getOffset()); final PsiReferenceParameterList referenceParameterList = PsiTreeUtil.getParentOfType(psiElement, PsiReferenceParameterList.class); if (referenceParameterList != null) { @@ -46,4 +46,4 @@ public class ChangeTypeSignatureAction extends BaseRefactoringAction { public RefactoringActionHandler getHandler(DataContext dataContext) { return new ChangeTypeSignatureHandler(); } -} \ No newline at end of file +} diff --git a/platform/lang-impl/src/com/intellij/refactoring/actions/BasePlatformRefactoringAction.java b/platform/lang-impl/src/com/intellij/refactoring/actions/BasePlatformRefactoringAction.java index f006c5ec48c2..6ca1dcb2434b 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/actions/BasePlatformRefactoringAction.java +++ b/platform/lang-impl/src/com/intellij/refactoring/actions/BasePlatformRefactoringAction.java @@ -20,10 +20,12 @@ import com.intellij.lang.LanguageRefactoringSupport; import com.intellij.lang.refactoring.RefactoringSupportProvider; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.LangDataKeys; +import com.intellij.openapi.editor.Editor; import com.intellij.openapi.extensions.ExtensionPointListener; import com.intellij.openapi.extensions.PluginDescriptor; import com.intellij.openapi.util.Condition; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import com.intellij.refactoring.RefactoringActionHandler; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; @@ -77,6 +79,11 @@ public abstract class BasePlatformRefactoringAction extends BaseRefactoringActio return null; } + @Override + protected boolean isAvailableOnElementInEditorAndFile(PsiElement element, Editor editor, PsiFile file, DataContext context) { + return getHandler(context) != null; + } + protected boolean isAvailableForLanguage(final Language language) { List providers = LanguageRefactoringSupport.INSTANCE.allForLanguage(language); return ContainerUtil.find(providers, myCondition) != null; diff --git a/platform/lang-impl/src/com/intellij/refactoring/actions/BaseRefactoringAction.java b/platform/lang-impl/src/com/intellij/refactoring/actions/BaseRefactoringAction.java index 8c4f104a413e..5490debbab4c 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/actions/BaseRefactoringAction.java +++ b/platform/lang-impl/src/com/intellij/refactoring/actions/BaseRefactoringAction.java @@ -48,7 +48,7 @@ public abstract class BaseRefactoringAction extends AnAction { protected abstract boolean isEnabledOnElements(PsiElement[] elements); - protected boolean isAvailableOnElementInEditorAndFile(final PsiElement element, final Editor editor, PsiFile file) { + protected boolean isAvailableOnElementInEditorAndFile(final PsiElement element, final Editor editor, PsiFile file, DataContext context) { return true; } @@ -133,7 +133,7 @@ public abstract class BaseRefactoringAction extends AnAction { boolean isVisible = ContainerUtil.find(languages, myLanguageCondition) != null; if (isVisible) { - boolean isEnabled = isAvailableOnElementInEditorAndFile(element, editor, file); + boolean isEnabled = isAvailableOnElementInEditorAndFile(element, editor, file, dataContext); if (!isEnabled) { disableAction(e); } @@ -211,4 +211,4 @@ public abstract class BaseRefactoringAction extends AnAction { return filtered == null ? psiElements : filtered.toArray(new PsiElement[filtered.size()]); } -} \ No newline at end of file +} diff --git a/platform/lang-impl/src/com/intellij/refactoring/actions/InlineAction.java b/platform/lang-impl/src/com/intellij/refactoring/actions/InlineAction.java index 4c1293ae7b5e..cd9b9958e3d1 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/actions/InlineAction.java +++ b/platform/lang-impl/src/com/intellij/refactoring/actions/InlineAction.java @@ -25,6 +25,7 @@ import com.intellij.lang.Language; import com.intellij.lang.refactoring.InlineActionHandler; import com.intellij.lang.refactoring.InlineHandlers; import com.intellij.lang.refactoring.RefactoringSupportProvider; +import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.extensions.Extensions; import com.intellij.psi.PsiElement; @@ -46,7 +47,7 @@ public class InlineAction extends BasePlatformRefactoringAction { } @Override - protected boolean isAvailableOnElementInEditorAndFile(PsiElement element, Editor editor, PsiFile file) { + protected boolean isAvailableOnElementInEditorAndFile(PsiElement element, Editor editor, PsiFile file, DataContext context) { return hasInlineActionHandler(element, PsiUtilBase.getLanguageInEditor(editor, element.getProject()), editor); } diff --git a/platform/lang-impl/src/com/intellij/refactoring/actions/SafeDeleteAction.java b/platform/lang-impl/src/com/intellij/refactoring/actions/SafeDeleteAction.java index a78daf61ee3c..c701e7c66b99 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/actions/SafeDeleteAction.java +++ b/platform/lang-impl/src/com/intellij/refactoring/actions/SafeDeleteAction.java @@ -45,7 +45,7 @@ public class SafeDeleteAction extends BaseRefactoringAction { return true; } - protected boolean isAvailableOnElementInEditorAndFile(final PsiElement element, final Editor editor, PsiFile file) { + protected boolean isAvailableOnElementInEditorAndFile(final PsiElement element, final Editor editor, PsiFile file, DataContext context) { return SafeDeleteProcessor.validElement(element); } @@ -53,4 +53,4 @@ public class SafeDeleteAction extends BaseRefactoringAction { return new SafeDeleteHandler(); } -} \ No newline at end of file +} diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/refactorings/extract/ExtractManagedDependenciesAction.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/refactorings/extract/ExtractManagedDependenciesAction.java index 809d10c157a4..74a4282b8ea4 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/refactorings/extract/ExtractManagedDependenciesAction.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/refactorings/extract/ExtractManagedDependenciesAction.java @@ -72,8 +72,8 @@ public class ExtractManagedDependenciesAction extends BaseRefactoringAction { } @Override - protected boolean isAvailableOnElementInEditorAndFile(PsiElement element, Editor editor, PsiFile file) { - if (!super.isAvailableOnElementInEditorAndFile(element, editor, file)) return false; + protected boolean isAvailableOnElementInEditorAndFile(PsiElement element, Editor editor, PsiFile file, DataContext context) { + if (!super.isAvailableOnElementInEditorAndFile(element, editor, file, context)) return false; return findDependencyAndParent(file, editor) != null; } @@ -254,4 +254,4 @@ public class ExtractManagedDependenciesAction extends BaseRefactoringAction { myExtractExclusions = extractExclusions; } } -} \ No newline at end of file +} diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/refactorings/introduce/IntroducePropertyAction.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/refactorings/introduce/IntroducePropertyAction.java index 7697257d2dd7..cc72080108da 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/refactorings/introduce/IntroducePropertyAction.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/refactorings/introduce/IntroducePropertyAction.java @@ -75,8 +75,8 @@ public class IntroducePropertyAction extends BaseRefactoringAction { } @Override - protected boolean isAvailableOnElementInEditorAndFile(PsiElement element, Editor editor, PsiFile file) { - if (!super.isAvailableOnElementInEditorAndFile(element, editor, file)) return false; + protected boolean isAvailableOnElementInEditorAndFile(PsiElement element, Editor editor, PsiFile file, DataContext context) { + if (!super.isAvailableOnElementInEditorAndFile(element, editor, file, context)) return false; return getSelectedElementAndTextRange(editor, file) != null; } @@ -359,4 +359,4 @@ public class IntroducePropertyAction extends BaseRefactoringAction { } return isInsideProperty; } -} \ No newline at end of file +} From cd2f7c07a19c037a9d08109c2506eafc39970fb7 Mon Sep 17 00:00:00 2001 From: nik Date: Mon, 30 Aug 2010 17:36:55 +0400 Subject: [PATCH 2/9] obsolete extensions removed --- platform/platform-resources/src/META-INF/XmlPlugin.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/platform/platform-resources/src/META-INF/XmlPlugin.xml b/platform/platform-resources/src/META-INF/XmlPlugin.xml index 836f090855fa..d3033bc7c2b6 100644 --- a/platform/platform-resources/src/META-INF/XmlPlugin.xml +++ b/platform/platform-resources/src/META-INF/XmlPlugin.xml @@ -233,8 +233,6 @@ - - Date: Mon, 30 Aug 2010 17:39:20 +0400 Subject: [PATCH 3/9] beanClass/interface attribute of extension points corrected --- .../src/META-INF/LangExtensionPoints.xml | 18 +++++++++--------- .../src/META-INF/PlatformExtensionPoints.xml | 2 +- plugins/groovy/src/META-INF/plugin.xml | 2 +- xml/dom-impl/src/META-INF/DomPlugin.xml | 4 ++-- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml index 2ed07e36870f..ae46f5995216 100644 --- a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml @@ -250,7 +250,7 @@ - + @@ -260,9 +260,9 @@ - - - + + + @@ -304,7 +304,7 @@ - + @@ -343,7 +343,7 @@ - + @@ -380,9 +380,9 @@ interface="com.intellij.openapi.roots.ui.configuration.ModuleConfigurationEditorProvider" area="IDEA_MODULE"/> - - - + + + diff --git a/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml b/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml index 2faa663043a6..9a0c7693a1ec 100644 --- a/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml @@ -60,7 +60,7 @@ interface="com.intellij.projectImport.ProjectOpenProcessor"/> + beanClass="com.intellij.codeInsight.hint.TooltipLinkHandlerEP"/> diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml index e0101e05f9db..18956c5299cb 100644 --- a/plugins/groovy/src/META-INF/plugin.xml +++ b/plugins/groovy/src/META-INF/plugin.xml @@ -38,7 +38,7 @@ - + diff --git a/xml/dom-impl/src/META-INF/DomPlugin.xml b/xml/dom-impl/src/META-INF/DomPlugin.xml index d4be4f6708f5..8d2f13e7ee10 100644 --- a/xml/dom-impl/src/META-INF/DomPlugin.xml +++ b/xml/dom-impl/src/META-INF/DomPlugin.xml @@ -4,10 +4,10 @@ interface="com.intellij.util.xml.DomFileDescription"/> + beanClass="com.intellij.util.xml.impl.DomImplementationClassEP"/> + beanClass="com.intellij.util.xml.reflect.DomExtenderEP"/> From 12c8b5eb8f436e0ba8e7d3e2e3c72f4cd9a1aeb5 Mon Sep 17 00:00:00 2001 From: nik Date: Mon, 30 Aug 2010 17:41:16 +0400 Subject: [PATCH 4/9] unused extension point removed --- platform/lang-api/src/com/intellij/psi/PsiIncludeManager.java | 2 ++ .../platform-resources/src/META-INF/LangExtensionPoints.xml | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/platform/lang-api/src/com/intellij/psi/PsiIncludeManager.java b/platform/lang-api/src/com/intellij/psi/PsiIncludeManager.java index 259a70814e6a..df4075c67a3b 100644 --- a/platform/lang-api/src/com/intellij/psi/PsiIncludeManager.java +++ b/platform/lang-api/src/com/intellij/psi/PsiIncludeManager.java @@ -24,6 +24,8 @@ import org.jetbrains.annotations.Nullable; /** * @author mike + * + * @deprecated use {@link com.intellij.psi.impl.include.FileIncludeManager} instead */ public interface PsiIncludeManager { ExtensionPointName EP_NAME = new ExtensionPointName("com.intellij.psi.includeHandler"); diff --git a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml index ae46f5995216..f590d90b873f 100644 --- a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml @@ -277,7 +277,6 @@ beanClass="com.intellij.lang.LanguageExtensionPoint"/> - From 61bc8216430008c9dca42a5c4aeacd6f5f5843e4 Mon Sep 17 00:00:00 2001 From: Alexey Pegov Date: Mon, 30 Aug 2010 17:47:46 +0400 Subject: [PATCH 5/9] IDEA-56857 Search term hidden in keymap preferences + IDEA-56640 OSX inspection filter highlights white on white + minor simplecoloredcomponent fixes --- .../openapi/editor/markup/EffectType.java | 3 +- .../intellij/ui/SimpleColoredComponent.java | 34 ++++++++++++++----- .../com/intellij/ui/SimpleTextAttributes.java | 19 ++++++++++- .../intellij/ide/ui/search/SearchUtil.java | 13 +++---- .../util/src/com/intellij/util/ui/UIUtil.java | 14 ++++++++ 5 files changed, 66 insertions(+), 17 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/editor/markup/EffectType.java b/platform/platform-api/src/com/intellij/openapi/editor/markup/EffectType.java index 48c48d122f82..eaf8ef34428a 100644 --- a/platform/platform-api/src/com/intellij/openapi/editor/markup/EffectType.java +++ b/platform/platform-api/src/com/intellij/openapi/editor/markup/EffectType.java @@ -21,5 +21,6 @@ public enum EffectType { BOXED, STRIKEOUT, BOLD_LINE_UNDERSCORE, - BOLD_DOTTED_LINE + BOLD_DOTTED_LINE, + SEARCH_MATCH } diff --git a/platform/platform-api/src/com/intellij/ui/SimpleColoredComponent.java b/platform/platform-api/src/com/intellij/ui/SimpleColoredComponent.java index df3dfab3fe58..6b2ffa474ebc 100644 --- a/platform/platform-api/src/com/intellij/ui/SimpleColoredComponent.java +++ b/platform/platform-api/src/com/intellij/ui/SimpleColoredComponent.java @@ -31,6 +31,7 @@ import javax.swing.*; import javax.swing.border.Border; import java.awt.*; import java.util.ArrayList; +import java.util.List; import java.util.Locale; import java.util.Map; @@ -284,8 +285,8 @@ public class SimpleColoredComponent extends JComponent implements Accessible { for (int i = 0; i < myAttributes.size(); i++) { SimpleTextAttributes attributes = myAttributes.get(i); - if (font.getStyle() != attributes.getStyle()) { // derive font only if it is necessary - font = font.deriveFont(attributes.getStyle()); + if (font.getStyle() != attributes.getFontStyle()) { // derive font only if it is necessary + font = font.deriveFont(attributes.getFontStyle()); } final FontMetrics metrics = getFontMetrics(font); width += metrics.stringWidth(myFragments.get(i)); @@ -332,8 +333,8 @@ public class SimpleColoredComponent extends JComponent implements Accessible { for (int i = 0; i < myAttributes.size(); i++) { SimpleTextAttributes attributes = myAttributes.get(i); - if (font.getStyle() != attributes.getStyle()) { // derive font only if it is necessary - font = font.deriveFont(attributes.getStyle()); + if (font.getStyle() != attributes.getFontStyle()) { // derive font only if it is necessary + font = font.deriveFont(attributes.getFontStyle()); } final FontMetrics metrics = getFontMetrics(font); final int curWidth = metrics.stringWidth(myFragments.get(i)); @@ -401,16 +402,18 @@ public class SimpleColoredComponent extends JComponent implements Accessible { int textStart = xOffset; xOffset += myBorder.getBorderInsets(this).left; + final List searchMatches = new ArrayList(); + // Paint text UIUtil.applyRenderingHints(g); for (int i = 0; i < myFragments.size(); i++) { final SimpleTextAttributes attributes = myAttributes.get(i); - Font font = getFont(); - if (font.getStyle() != attributes.getStyle()) { // derive font only if it is necessary - font = font.deriveFont(attributes.getStyle()); + Font font = g.getFont(); + if (font.getStyle() != attributes.getFontStyle()) { // derive font only if it is necessary + font = font.deriveFont(attributes.getFontStyle()); } g.setFont(font); - final FontMetrics metrics = getFontMetrics(font); + final FontMetrics metrics = g.getFontMetrics(font); final String fragment = myFragments.get(i); final int fragmentWidth = metrics.stringWidth(fragment); @@ -431,7 +434,8 @@ public class SimpleColoredComponent extends JComponent implements Accessible { g.setColor(color); final int textBaseline = (getHeight() - metrics.getHeight()) / 2 + metrics.getAscent(); - g.drawString(fragment, xOffset, textBaseline); + + if (!attributes.isSearchMatch()) g.drawString(fragment, xOffset, textBaseline); // 1. Strikeout effect if (attributes.isStrikeout()) { @@ -461,6 +465,10 @@ public class SimpleColoredComponent extends JComponent implements Accessible { UIUtil.drawBoldDottedLine((Graphics2D)g, xOffset, xOffset + fragmentWidth, dottedAt, bgColor, lineColor, isOpaque()); } + if (attributes.isSearchMatch()) { + searchMatches.add(new Object[] {xOffset, xOffset + fragmentWidth, textBaseline, fragment, g.getFont()}); + } + final Integer fixedWidth = myAligns.get(i); if (fixedWidth != null && fragmentWidth < fixedWidth.intValue()) { //if (fixedWidth != null) { @@ -479,6 +487,14 @@ public class SimpleColoredComponent extends JComponent implements Accessible { myBorder.paintBorder(this, g, textStart, 0, getWidth() - textStart, getHeight()); } } + + // draw search matches after all + for (final Object[] info: searchMatches) { + UIUtil.drawSearchMatch((Graphics2D)g, (Integer) info[0], (Integer) info[1], getHeight()); + g.setFont((Font) info[4]); + g.setColor(new Color(50, 50, 50)); + g.drawString((String) info[3], (Integer) info[0], (Integer) info[2]); + } } private static void checkCanPaint(Graphics g) { diff --git a/platform/platform-api/src/com/intellij/ui/SimpleTextAttributes.java b/platform/platform-api/src/com/intellij/ui/SimpleTextAttributes.java index d0c8368d9964..b0c8596518ae 100644 --- a/platform/platform-api/src/com/intellij/ui/SimpleTextAttributes.java +++ b/platform/platform-api/src/com/intellij/ui/SimpleTextAttributes.java @@ -34,6 +34,7 @@ public final class SimpleTextAttributes { public static final int STYLE_WAVED = STYLE_STRIKEOUT << 1; public static final int STYLE_UNDERLINE = STYLE_WAVED << 1; public static final int STYLE_BOLD_DOTTED_LINE = STYLE_UNDERLINE << 1; + public static final int STYLE_SEARCH_MATCH = STYLE_BOLD_DOTTED_LINE << 1; private final Color myBgColor; private final Color myFgColor; @@ -68,9 +69,10 @@ public final class SimpleTextAttributes { } public SimpleTextAttributes(final Color bgColor, final Color fgColor, final Color waveColor, final int style) { - if((~(STYLE_PLAIN | STYLE_BOLD | STYLE_ITALIC | STYLE_STRIKEOUT | STYLE_WAVED | STYLE_UNDERLINE | STYLE_BOLD_DOTTED_LINE) & style) != 0){ + if((~(STYLE_PLAIN | STYLE_BOLD | STYLE_ITALIC | STYLE_STRIKEOUT | STYLE_WAVED | STYLE_UNDERLINE | STYLE_BOLD_DOTTED_LINE | STYLE_SEARCH_MATCH) & style) != 0){ throw new IllegalArgumentException("wrong style: "+style); } + myFgColor = fgColor; myWaveColor = waveColor; myStyle = style; @@ -130,6 +132,10 @@ public final class SimpleTextAttributes { return (myStyle & STYLE_BOLD_DOTTED_LINE) != 0; } + public boolean isSearchMatch() { + return (myStyle & STYLE_SEARCH_MATCH) != 0; + } + public static SimpleTextAttributes fromTextAttributes(TextAttributes attributes) { if (attributes == null) return REGULAR_ATTRIBUTES; @@ -151,6 +157,9 @@ public final class SimpleTextAttributes { else if (effectType == EffectType.BOLD_DOTTED_LINE) { style |= STYLE_UNDERLINE; } + else if (effectType == EffectType.SEARCH_MATCH) { + style |= STYLE_SEARCH_MATCH; + } else{ // not supported } @@ -158,6 +167,10 @@ public final class SimpleTextAttributes { return new SimpleTextAttributes(attributes.getBackgroundColor(), foregroundColor, attributes.getEffectColor(), style); } + public int getFontStyle() { + return myStyle & FONT_MASK; + } + public TextAttributes toTextAttributes() { Color effectColor; EffectType effectType; @@ -176,6 +189,10 @@ public final class SimpleTextAttributes { effectColor = myWaveColor; effectType = EffectType.BOLD_DOTTED_LINE; } + else if (isSearchMatch()) { + effectColor = myWaveColor; + effectType = EffectType.SEARCH_MATCH; + } else{ effectColor = null; effectType = null; diff --git a/platform/platform-impl/src/com/intellij/ide/ui/search/SearchUtil.java b/platform/platform-impl/src/com/intellij/ide/ui/search/SearchUtil.java index 5d21a20cd18c..9f4c225b4c8f 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/search/SearchUtil.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/search/SearchUtil.java @@ -32,7 +32,6 @@ import com.intellij.ui.components.JBList; import com.intellij.util.Alarm; import com.intellij.util.Consumer; import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -408,13 +407,15 @@ public class SearchUtil { int idx = 0; for (String word : selectedWords) { text = text.substring(idx); - textRenderer.append(text.substring(0, text.indexOf(word)), new SimpleTextAttributes(background, foreground, null, style)); + final String before = text.substring(0, text.indexOf(word)); + if (before.length() > 0) textRenderer.append(before, new SimpleTextAttributes(background, foreground, null, style)); idx = text.indexOf(word) + word.length(); - textRenderer.append(text.substring(idx - word.length(), idx), new SimpleTextAttributes(UIUtil.getTreeSelectionBackground(), - UIUtil.getTreeSelectionForeground(), null, - style)); + textRenderer.append(text.substring(idx - word.length(), idx), new SimpleTextAttributes(background, + foreground, null, + style | SimpleTextAttributes.STYLE_SEARCH_MATCH)); } - textRenderer.append(text.substring(idx, text.length()), new SimpleTextAttributes(background, foreground, null, style)); + final String after = text.substring(idx, text.length()); + if (after.length() > 0) textRenderer.append(after, new SimpleTextAttributes(background, foreground, null, style)); } } diff --git a/platform/util/src/com/intellij/util/ui/UIUtil.java b/platform/util/src/com/intellij/util/ui/UIUtil.java index 2ab9103f8391..c533a460f0f0 100644 --- a/platform/util/src/com/intellij/util/ui/UIUtil.java +++ b/platform/util/src/com/intellij/util/ui/UIUtil.java @@ -721,6 +721,20 @@ public class UIUtil { } } + public static void drawSearchMatch(final Graphics2D g, + final int startX, + final int endX, + final int height) { + g.setColor(new Color(100, 100, 100, 50)); + g.fillRoundRect(startX - 2, 2, endX - startX + 4, height - 4, 4, 4); + + g.setPaint(new GradientPaint(startX, 2, new Color(255, 234, 162), startX, height - 5, new Color(255, 208, 66))); + g.fillRoundRect(startX - 2, 2, endX - startX + 3, height - 5, 6, 6); + + g.setColor(new Color(170, 170, 170, 200)); + g.drawRoundRect(startX - 2, 2, endX - startX + 3, height - 5, 4, 4); + } + private static void drawBoringDottedLine(final Graphics2D g, final int startX, final int endX, From 8225722dd70a44253f0e43ca00b0a6ea9de64857 Mon Sep 17 00:00:00 2001 From: "Kirill.Safonov" Date: Mon, 30 Aug 2010 16:41:18 +0400 Subject: [PATCH 6/9] trace injected prefix/suffix when asserting (EA-21115) --- .../src/com/intellij/injected/editor/DocumentWindowImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/injected/editor/DocumentWindowImpl.java b/platform/lang-impl/src/com/intellij/injected/editor/DocumentWindowImpl.java index 960741983379..fea09517897f 100644 --- a/platform/lang-impl/src/com/intellij/injected/editor/DocumentWindowImpl.java +++ b/platform/lang-impl/src/com/intellij/injected/editor/DocumentWindowImpl.java @@ -207,8 +207,8 @@ public class DocumentWindowImpl extends UserDataHolderBase implements Disposable } public void insertString(final int offset, @NotNull CharSequence s) { - LOG.assertTrue(offset >= myShreds.get(0).prefix.length()); - LOG.assertTrue(offset <= getTextLength() - myShreds.get(myShreds.size() - 1).suffix.length()); + LOG.assertTrue(offset >= myShreds.get(0).prefix.length(), myShreds.get(0).prefix); + LOG.assertTrue(offset <= getTextLength() - myShreds.get(myShreds.size() - 1).suffix.length(), myShreds.get(myShreds.size() - 1).suffix); if (isOneLine()) { s = StringUtil.replace(s.toString(), "\n", ""); } From ed555b050ba25c10131402314ac1fb3952e60246 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Mon, 30 Aug 2010 18:29:10 +0400 Subject: [PATCH 7/9] CodeInsightTestFixture.testAction() fixed to work well with injection-agnostic actions --- .../fixtures/impl/CodeInsightTestFixtureImpl.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java index 545bbf52ab6d..08c8d94d92a6 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java @@ -29,7 +29,7 @@ import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; import com.intellij.codeInsight.daemon.DaemonCodeAnalyzerSettings; import com.intellij.codeInsight.daemon.HighlightDisplayKey; import com.intellij.codeInsight.daemon.impl.*; -import com.intellij.codeInsight.highlighting.HighlightUsagesHandler; +import com.intellij.codeInsight.highlighting.actions.HighlightUsagesAction; import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.codeInsight.intention.impl.ShowIntentionActionsHandler; import com.intellij.codeInsight.lookup.LookupElement; @@ -621,7 +621,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig public Presentation testAction(AnAction action) { DataContext context = DataManager.getInstance().getDataContext(getEditor().getComponent()); TestActionEvent e = new TestActionEvent(context, action); - action.update(e); + action.beforeActionPerformedUpdate(e); if (e.getPresentation().isVisible() && e.getPresentation().isVisible()) { action.actionPerformed(e); } @@ -653,8 +653,11 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig public RangeHighlighter[] testHighlightUsages(final String... files) { configureByFiles(files); + testAction(new HighlightUsagesAction()); final Editor editor = getEditor(); - HighlightUsagesHandler.invoke(getProject(), editor, getFile()); + //final Editor editor = PlatformDataKeys.EDITOR.getData(DataManager.getInstance().getDataContext()); + //assert editor != null; + //HighlightUsagesHandler.invoke(getProject(), editor, getFile()); return editor.getMarkupModel().getAllHighlighters(); } From 3943eb1f3833c96392538fe671c05d7718a81039 Mon Sep 17 00:00:00 2001 From: "Rustam.Vishnyakov" Date: Mon, 30 Aug 2010 18:33:48 +0400 Subject: [PATCH 8/9] A fix for Groovy formatter tests (using getField() instead of getDeclaredField() from CodeStyleSettings). --- .../groovy/lang/formatter/GroovyCodeStyleFormatterTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/formatter/GroovyCodeStyleFormatterTest.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/formatter/GroovyCodeStyleFormatterTest.java index 981311c3407a..06eede2b3675 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/formatter/GroovyCodeStyleFormatterTest.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/formatter/GroovyCodeStyleFormatterTest.java @@ -46,7 +46,7 @@ public class GroovyCodeStyleFormatterTest extends GroovyFormatterTestCase { final String[] strings = matcher.group(1).split("="); String name = strings[0]; final CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject()); - final Field field = CodeStyleSettings.class.getDeclaredField(name); + final Field field = CodeStyleSettings.class.getField(name); final String value = strings[1]; if ("true".equals(value) || "false".equals(value)) { field.set(settings, Boolean.parseBoolean(value)); @@ -55,7 +55,7 @@ public class GroovyCodeStyleFormatterTest extends GroovyFormatterTestCase { field.set(settings, Integer.parseInt(value)); } catch (NumberFormatException e) { - field.set(settings, CodeStyleSettings.class.getDeclaredField(value).get(value)); + field.set(settings, CodeStyleSettings.class.getField(value).get(value)); } } input = input.substring(matcher.end()); From 0192c169fd9a6038a781cab7c6c422800abe1157 Mon Sep 17 00:00:00 2001 From: Alexey Pegov Date: Mon, 30 Aug 2010 19:07:14 +0400 Subject: [PATCH 9/9] fix debugger expression combobox history --- .../com/intellij/debugger/ui/DebuggerExpressionComboBox.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerExpressionComboBox.java b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerExpressionComboBox.java index f14587391352..5cce68db4767 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerExpressionComboBox.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerExpressionComboBox.java @@ -81,6 +81,7 @@ public class DebuggerExpressionComboBox extends DebuggerEditorImpl { myComboBox.setSelectedIndex(0); } + myComboBox.getEditor().setItem(item); myItem = item; } @@ -158,6 +159,7 @@ public class DebuggerExpressionComboBox extends DebuggerEditorImpl { setText(new TextWithImportsImpl(CodeFragmentKind.EXPRESSION, "")); myItem = createText(""); + setEnabled(true); } public JComponent getPreferredFocusedComponent() {