From 093d729bb53dac4d93c2892cdca368531cf30ef2 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Wed, 3 Apr 2019 10:08:14 +0700 Subject: [PATCH] IDEA-210108 Create new test window misses interface methods --- .../testIntegration/TestIntegrationUtils.java | 5 ++- .../TestIntegrationUtilsTest.java | 35 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testSrc/com/intellij/testIntegration/TestIntegrationUtilsTest.java diff --git a/java/java-impl/src/com/intellij/testIntegration/TestIntegrationUtils.java b/java/java-impl/src/com/intellij/testIntegration/TestIntegrationUtils.java index 0c6c9f009abb..9f27411253a9 100644 --- a/java/java-impl/src/com/intellij/testIntegration/TestIntegrationUtils.java +++ b/java/java-impl/src/com/intellij/testIntegration/TestIntegrationUtils.java @@ -127,7 +127,10 @@ public class TestIntegrationUtils { @Override public boolean includeMember(PsiMember member) { if (!(member instanceof PsiMethod)) return false; - if (member.hasModifierProperty(PsiModifier.PRIVATE) || member.hasModifierProperty(PsiModifier.ABSTRACT)) return false; + if (member.hasModifierProperty(PsiModifier.PRIVATE) || + (member.hasModifierProperty(PsiModifier.ABSTRACT) && member.getContainingClass() != clazz)) { + return false; + } return true; } }, false); diff --git a/java/java-tests/testSrc/com/intellij/testIntegration/TestIntegrationUtilsTest.java b/java/java-tests/testSrc/com/intellij/testIntegration/TestIntegrationUtilsTest.java new file mode 100644 index 000000000000..9ea56bfde4e3 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/testIntegration/TestIntegrationUtilsTest.java @@ -0,0 +1,35 @@ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.intellij.testIntegration; + +import com.intellij.ide.highlighter.JavaFileType; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiFileFactory; +import com.intellij.psi.PsiJavaFile; +import com.intellij.refactoring.classMembers.MemberInfoBase; +import com.intellij.refactoring.util.classMembers.MemberInfo; +import com.intellij.testFramework.LightPlatformTestCase; +import com.intellij.util.containers.ContainerUtil; +import org.intellij.lang.annotations.Language; + +import java.util.Arrays; +import java.util.List; + +public class TestIntegrationUtilsTest extends LightPlatformTestCase { + + public void testExtractClassMethods() { + doTest("class Foo {void bar() {} private void baz() {}}", false, "bar():void"); + doTest("class Foo extends Super {void bar() {}} class Super {void qux() {}}", false, "bar():void"); + doTest("class Foo extends Super {void bar() {}} class Super {void qux() {}}", true, "qux():void", "bar():void"); + doTest("class Foo implements I {void bar() {}} interface I {void qux();}", true, "bar():void"); + doTest("class Foo implements I {void bar() {}} interface I {default void qux() {}}", true, "qux():void", "bar():void"); + doTest("interface Foo extends I {void bar();} interface I {void qux();}", true, "bar():void"); + } + + private static void doTest(@Language("JAVA") String text, boolean inherited, String... expected) { + PsiJavaFile file = (PsiJavaFile)PsiFileFactory.getInstance(getProject()).createFileFromText("Test.java", JavaFileType.INSTANCE, text); + PsiClass firstClass = file.getClasses()[0]; + List infos = TestIntegrationUtils.extractClassMethods(firstClass, inherited); + List actual = ContainerUtil.map(infos, MemberInfoBase::getDisplayName); + assertEquals(Arrays.asList(expected), actual); + } +} \ No newline at end of file