From 7b23eb76558e6fd06fbc4197dca74934d023d485 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 7 Jun 2012 15:56:00 +0200 Subject: [PATCH] show the type for new AnAction().registerCustomShortcutSet (IDEA-87048) --- .../folding/impl/JavaFoldingBuilder.java | 24 +++++++++++-------- .../folding/JavaFoldingTest.groovy | 7 ++++++ 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/folding/impl/JavaFoldingBuilder.java b/java/java-impl/src/com/intellij/codeInsight/folding/impl/JavaFoldingBuilder.java index deedb344493c..7a74b3b31fef 100644 --- a/java/java-impl/src/com/intellij/codeInsight/folding/impl/JavaFoldingBuilder.java +++ b/java/java-impl/src/com/intellij/codeInsight/folding/impl/JavaFoldingBuilder.java @@ -649,16 +649,7 @@ public class JavaFoldingBuilder extends CustomFoldingBuilder implements DumbAwar if (lastLineEnd > 0 && seq.charAt(lastLineEnd) == '\n') lastLineEnd--; if (lastLineEnd < firstLineStart) return false; - String type = ""; - if (!quick) { - ExpectedTypeInfo[] types = ExpectedTypesProvider.getExpectedTypes(expression, false); - if (types.length != 1 || !types[0].getType().equals(anonymousClass.getBaseClassType())) { - final String baseClassName = ObjectUtils.assertNotNull(anonymousClass.getBaseClassType().resolve()).getName(); - if (baseClassName != null) { - type = "(" + baseClassName + ") "; - } - } - } + String type = quick ? "" : getOptionalLambdaType(anonymousClass, expression); final String params = StringUtil.join(method.getParameterList().getParameters(), new Function() { @Override @@ -716,6 +707,19 @@ public class JavaFoldingBuilder extends CustomFoldingBuilder implements DumbAwar return isClosure; } + private static String getOptionalLambdaType(PsiAnonymousClass anonymousClass, PsiNewExpression expression) { + ExpectedTypeInfo[] types = ExpectedTypesProvider.getExpectedTypes(expression, false); + if (expression.getParent() instanceof PsiReferenceExpression || + types.length != 1 || + !types[0].getType().equals(anonymousClass.getBaseClassType())) { + final String baseClassName = ObjectUtils.assertNotNull(anonymousClass.getBaseClassType().resolve()).getName(); + if (baseClassName != null) { + return "(" + baseClassName + ") "; + } + } + return ""; + } + private static boolean seemsLikeLambda(@Nullable final PsiClass baseClass) { if (baseClass == null) return false; diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy index 30d4ff2fe02b..a362c06bff2f 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy @@ -221,6 +221,7 @@ class Test { myFixture.addClass('interface Runnable2 { void run(); }') myFixture.addClass('interface Runnable3 { void run(); }') myFixture.addClass('interface Runnable4 { void run(); }') + myFixture.addClass('abstract class MyAction { public abstract void run(); public void registerVeryCustomShortcutSet() {} }') def text = """\ class Test { void test() { @@ -244,6 +245,11 @@ class Test { System.out.println(); } }); + new MyAction() { + public void run() { + System.out.println(); + } + }.registerVeryCustomShortcutSet(); } void foo(Object o) {} @@ -257,6 +263,7 @@ class Test { assert foldingModel.getCollapsedRegionAtOffset(text.indexOf("Runnable2(")).placeholderText == '(Runnable2) () -> { ' assert foldingModel.getCollapsedRegionAtOffset(text.indexOf("Runnable3(")).placeholderText == '(Runnable3) () -> { ' assert foldingModel.getCollapsedRegionAtOffset(text.indexOf("Runnable4(")).placeholderText == '() -> { ' + assert foldingModel.getCollapsedRegionAtOffset(text.indexOf("MyAction(")).placeholderText == '(MyAction) () -> { ' } public void "test no closure folding when the method throws an unresolved exception"() {