From 07a086daced6f2798442b3a8af91d9d52453796c Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 6 Jun 2017 18:57:02 +0300 Subject: [PATCH] don't suggest inaccessible functional interfaces (IDEA-174008) --- .../FunctionalInterfaceSuggester.java | 3 +++ ...oreNoSuggestionForInaccessibleInterface.java | 17 +++++++++++++++++ .../IntroduceFunctionalVariableTest.java | 11 +++++++++++ 3 files changed, 31 insertions(+) create mode 100644 java/java-tests/testData/refactoring/introduceFunctionalVariable/beforeNoSuggestionForInaccessibleInterface.java diff --git a/java/java-impl/src/com/intellij/codeInsight/FunctionalInterfaceSuggester.java b/java/java-impl/src/com/intellij/codeInsight/FunctionalInterfaceSuggester.java index be15abead8b3..1308058d413a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/FunctionalInterfaceSuggester.java +++ b/java/java-impl/src/com/intellij/codeInsight/FunctionalInterfaceSuggester.java @@ -76,6 +76,9 @@ public class FunctionalInterfaceSuggester { } return suggestFunctionalInterfaces(method, aClass -> { + if (!JavaPsiFacade.getInstance(method.getProject()).getResolveHelper().isAccessible(aClass, method, null)) { + return null; + } final PsiMethod interfaceMethod = LambdaUtil.getFunctionalInterfaceMethod(aClass); if (interfaceMethod != null) { final PsiParameter[] parameters = method.getParameterList().getParameters(); diff --git a/java/java-tests/testData/refactoring/introduceFunctionalVariable/beforeNoSuggestionForInaccessibleInterface.java b/java/java-tests/testData/refactoring/introduceFunctionalVariable/beforeNoSuggestionForInaccessibleInterface.java new file mode 100644 index 000000000000..f9b3cad32a45 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceFunctionalVariable/beforeNoSuggestionForInaccessibleInterface.java @@ -0,0 +1,17 @@ +class A { + void assignment(double v, int x, int y) { + String result; + + result = format("digit %f", v, x, y ); + + System.out.println(result); + } + +} + +class B { + @FunctionalInterface + private interface DII { + String doIt(double d, int x, int y); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceFunctionalVariableTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceFunctionalVariableTest.java index 21aaaa4c4269..a608f3868816 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceFunctionalVariableTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceFunctionalVariableTest.java @@ -20,6 +20,7 @@ import com.intellij.pom.java.LanguageLevel; import com.intellij.refactoring.extractMethod.ExtractMethodProcessor; import com.intellij.refactoring.extractMethod.InputVariables; import com.intellij.refactoring.introduceVariable.IntroduceFunctionalVariableHandler; +import com.intellij.refactoring.util.CommonRefactoringUtil; import com.intellij.testFramework.MapDataContext; import com.intellij.testFramework.TestDataPath; import org.jetbrains.annotations.NotNull; @@ -62,6 +63,16 @@ public class IntroduceFunctionalVariableTest extends LightRefactoringTestCase { doTest(0); } + public void testNoSuggestionForInaccessibleInterface() throws Exception { + try { + doTest(); + fail("Should be shown a error hint"); + } + catch (CommonRefactoringUtil.RefactoringErrorHintException e) { + assertEquals("No applicable functional interfaces found", e.getMessage()); + } + } + private void doTest(int... disableParams) { boolean enabled = true; try {