"Find Usages": add tests for Kotlin usages of Java declarations
This commit is contained in:
@@ -478,7 +478,8 @@ public class GenerateTests {
|
||||
"idea/tests/",
|
||||
"JetFindUsagesTest",
|
||||
AbstractJetFindUsagesTest.class,
|
||||
testModelWithPattern("idea/testData/findUsages", "^(.+)\\.0\\.kt$", "doTest")
|
||||
testModelWithPattern("idea/testData/findUsages/kotlin", "^(.+)\\.0\\.kt$", "doTest"),
|
||||
testModelWithPattern("idea/testData/findUsages/java", "^(.+)\\.0\\.java$", "doTest")
|
||||
);
|
||||
|
||||
generateTest(
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
// PSI_ELEMENT: com.intellij.psi.PsiClass
|
||||
// OPTIONS: usages
|
||||
public class <caret>A {
|
||||
public String bar = "bar";
|
||||
public static String BAR = "BAR";
|
||||
|
||||
public void foo() {
|
||||
|
||||
}
|
||||
|
||||
public static void foos() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
public class X(bar: String? = A.BAR): A() {
|
||||
var next: A? = A()
|
||||
val myBar: String? = A.BAR
|
||||
|
||||
{
|
||||
A.BAR = ""
|
||||
A.foos()
|
||||
}
|
||||
|
||||
fun foo(a: A) {
|
||||
val aa: A = a
|
||||
aa.bar = ""
|
||||
}
|
||||
|
||||
fun getNext(): A? {
|
||||
return next
|
||||
}
|
||||
|
||||
public override fun foo() {
|
||||
super<A>.foo()
|
||||
}
|
||||
|
||||
class object: A() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
object O: A() {
|
||||
|
||||
}
|
||||
|
||||
fun X.bar(a: A = A()) {
|
||||
|
||||
}
|
||||
|
||||
fun Any.toA(): A? {
|
||||
return if (this is A) this as A else null
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
Class/object property type (2: 15) var next: A? = A()
|
||||
Function return types (15: 20) fun getNext(): A? {
|
||||
Function return types (36: 16) fun Any.toA(): A? {
|
||||
Instantiation (2: 20) var next: A? = A()
|
||||
Instantiation (32: 18) fun X.bar(a: A = A()) {
|
||||
Local variable type (11: 17) val aa: A = a
|
||||
Parameter type (10: 16) fun foo(a: A) {
|
||||
Parameter type (32: 14) fun X.bar(a: A = A()) {
|
||||
Super type qualifier (20: 15) super<A>.foo()
|
||||
Supertype (1: 39) public class X(bar: String? = A.BAR): A() {
|
||||
Supertype (23: 19) class object: A() {
|
||||
Supertype (28: 11) object O: A() {
|
||||
Target type of 'as' operation (37: 35) return if (this is A) this as A else null
|
||||
Target type of 'is' operation (37: 24) return if (this is A) this as A else null
|
||||
Unclassified usage (1: 31) public class X(bar: String? = A.BAR): A() {
|
||||
Unclassified usage (3: 26) val myBar: String? = A.BAR
|
||||
Unclassified usage (6: 9) A.BAR = ""
|
||||
Unclassified usage (7: 9) A.foos()
|
||||
@@ -0,0 +1,14 @@
|
||||
// PSI_ELEMENT: com.intellij.psi.PsiClass
|
||||
// OPTIONS: fieldUsages
|
||||
public class <caret>A {
|
||||
public String bar = "bar";
|
||||
public static String BAR = "BAR";
|
||||
|
||||
public void foo() {
|
||||
|
||||
}
|
||||
|
||||
public static void foos() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
public class X(bar: String? = A.BAR): A() {
|
||||
var next: A? = A()
|
||||
val myBar: String? = A.BAR
|
||||
|
||||
{
|
||||
A.BAR = ""
|
||||
A.foos()
|
||||
}
|
||||
|
||||
fun foo(a: A) {
|
||||
val aa: A = a
|
||||
aa.bar = ""
|
||||
}
|
||||
|
||||
fun getNext(): A? {
|
||||
return next
|
||||
}
|
||||
|
||||
public override fun foo() {
|
||||
super<A>.foo()
|
||||
}
|
||||
|
||||
class object: A() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
object O: A() {
|
||||
|
||||
}
|
||||
|
||||
fun X.bar(a: A = A()) {
|
||||
|
||||
}
|
||||
|
||||
fun Any.toA(): A? {
|
||||
return if (this is A) this as A else null
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
Value read (1: 33) public class X(bar: String? = A.BAR): A() {
|
||||
Value read (3: 28) val myBar: String? = A.BAR
|
||||
Value write (12: 12) aa.bar = ""
|
||||
Value write (6: 11) A.BAR = ""
|
||||
@@ -0,0 +1,14 @@
|
||||
// PSI_ELEMENT: com.intellij.psi.PsiClass
|
||||
// OPTIONS: methodUsages
|
||||
public class <caret>A {
|
||||
public String bar = "bar";
|
||||
public static String BAR = "BAR";
|
||||
|
||||
public void foo() {
|
||||
|
||||
}
|
||||
|
||||
public static void foos() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
public class X(bar: String? = A.BAR): A() {
|
||||
var next: A? = A()
|
||||
val myBar: String? = A.BAR
|
||||
|
||||
{
|
||||
A.BAR = ""
|
||||
A.foos()
|
||||
}
|
||||
|
||||
fun foo(a: A) {
|
||||
val aa: A = a
|
||||
aa.bar = ""
|
||||
}
|
||||
|
||||
fun getNext(): A? {
|
||||
return next
|
||||
}
|
||||
|
||||
public override fun foo() {
|
||||
super<A>.foo()
|
||||
}
|
||||
|
||||
class object: A() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
object O: A() {
|
||||
|
||||
}
|
||||
|
||||
fun X.bar(a: A = A()) {
|
||||
|
||||
}
|
||||
|
||||
fun Any.toA(): A? {
|
||||
return if (this is A) this as A else null
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
Function call (20: 18) super<A>.foo()
|
||||
Function call (7: 11) A.foos()
|
||||
@@ -0,0 +1,5 @@
|
||||
// PSI_ELEMENT: com.intellij.psi.PsiClass
|
||||
// OPTIONS: derivedClasses
|
||||
public class <caret>A {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
public open class X: A()
|
||||
|
||||
public trait T: A
|
||||
|
||||
public open class Y: X()
|
||||
|
||||
public class Z: Y(), T
|
||||
@@ -0,0 +1,3 @@
|
||||
Unclassified usage (1: 19) public open class X: A()
|
||||
Unclassified usage (5: 19) public open class Y: X()
|
||||
Unclassified usage (7: 14) public class Z: Y(), T
|
||||
@@ -0,0 +1,5 @@
|
||||
// PSI_ELEMENT: com.intellij.psi.PsiClass
|
||||
// OPTIONS: derivedInterfaces
|
||||
public interface <caret>A {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
public open class X: A
|
||||
|
||||
public trait T: A
|
||||
|
||||
public open class Y: X()
|
||||
|
||||
public class Z: Y(), T
|
||||
@@ -0,0 +1 @@
|
||||
Unclassified usage (3: 14) public trait T: A
|
||||
@@ -0,0 +1,5 @@
|
||||
// PSI_ELEMENT: com.intellij.psi.PsiClass
|
||||
// OPTIONS: implementingClasses
|
||||
public interface <caret>A {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
public open class X: A
|
||||
|
||||
public trait T: A
|
||||
|
||||
public open class Y: X()
|
||||
|
||||
public class Z: Y(), T
|
||||
@@ -0,0 +1,4 @@
|
||||
Unclassified usage (1: 19) public open class X: A
|
||||
Unclassified usage (5: 19) public open class Y: X()
|
||||
Unclassified usage (7: 14) public class Z: Y(), T
|
||||
Unclassified usage (7: 14) public class Z: Y(), T
|
||||
@@ -0,0 +1,5 @@
|
||||
// PSI_ELEMENT: com.intellij.psi.PsiField
|
||||
// OPTIONS: readAccess
|
||||
public class A {
|
||||
public String <caret>foo = "foo";
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
fun test() {
|
||||
val a = A()
|
||||
a.foo = "bar"
|
||||
println(a.foo)
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
Value read (4: 15) println(a.foo)
|
||||
Value write (3: 7) a.foo = "bar"
|
||||
@@ -0,0 +1,14 @@
|
||||
// PSI_ELEMENT: com.intellij.psi.PsiMethod
|
||||
// OPTIONS: overrides
|
||||
public class A {
|
||||
public void <caret>foo() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class B extends A {
|
||||
@Override
|
||||
public void foo() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
public open class X: A() {
|
||||
public override fun foo() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class Y: X() {
|
||||
public override fun foo() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class Z: B() {
|
||||
public override fun foo() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
Unclassified usage (11: 17) public void foo() {
|
||||
Unclassified usage (14: 25) public override fun foo() {
|
||||
Unclassified usage (2: 25) public override fun foo() {
|
||||
Unclassified usage (8: 25) public override fun foo() {
|
||||
@@ -0,0 +1,14 @@
|
||||
// PSI_ELEMENT: com.intellij.psi.PsiMethod
|
||||
// OPTIONS: usages
|
||||
class A {
|
||||
public void <caret>foo() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
class B extends A {
|
||||
@Override
|
||||
public void foo() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fun test() {
|
||||
A().foo()
|
||||
B().foo()
|
||||
|
||||
val a = A::foo
|
||||
val b = B::foo
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
Callable reference (5: 16) val a = A::foo
|
||||
Callable reference (6: 16) val b = B::foo
|
||||
Function call (2: 9) A().foo()
|
||||
Function call (3: 9) B().foo()
|
||||
@@ -22,16 +22,13 @@ import com.google.common.base.Predicates;
|
||||
import com.google.common.collect.Collections2;
|
||||
import com.google.common.collect.Ordering;
|
||||
import com.intellij.find.FindManager;
|
||||
import com.intellij.find.findUsages.FindUsagesHandler;
|
||||
import com.intellij.find.findUsages.FindUsagesOptions;
|
||||
import com.intellij.find.findUsages.JavaFindUsagesOptions;
|
||||
import com.intellij.find.findUsages.*;
|
||||
import com.intellij.find.impl.FindManagerImpl;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.PsiComment;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.testFramework.LightProjectDescriptor;
|
||||
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
|
||||
@@ -140,6 +137,63 @@ public abstract class AbstractJetFindUsagesTest extends LightCodeInsightFixtureT
|
||||
|
||||
return options;
|
||||
}
|
||||
},
|
||||
JAVA_CLASS {
|
||||
@NotNull
|
||||
@Override
|
||||
public FindUsagesOptions parse(@NotNull String text, @NotNull Project project) {
|
||||
KotlinClassFindUsagesOptions options = new KotlinClassFindUsagesOptions(project);
|
||||
options.isUsages = false;
|
||||
options.setSearchConstructorUsages(false);
|
||||
for (String s : InTextDirectivesUtils.findListWithPrefixes(text, "// OPTIONS: ")) {
|
||||
if (parseCommonOptions(options, s)) continue;
|
||||
|
||||
if (s.equals("derivedInterfaces")) {
|
||||
options.isDerivedInterfaces = true;
|
||||
}
|
||||
else if (s.equals("derivedClasses")) {
|
||||
options.isDerivedClasses = true;
|
||||
}
|
||||
else if (s.equals("implementingClasses")) {
|
||||
options.isImplementingClasses = true;
|
||||
}
|
||||
else if (s.equals("methodUsages")) {
|
||||
options.isMethodsUsages = true;
|
||||
}
|
||||
else if (s.equals("fieldUsages")) {
|
||||
options.isFieldsUsages = true;
|
||||
}
|
||||
else fail("Invalid option: " + s);
|
||||
}
|
||||
|
||||
return options;
|
||||
}
|
||||
},
|
||||
JAVA_METHOD {
|
||||
@NotNull
|
||||
@Override
|
||||
public FindUsagesOptions parse(@NotNull String text, @NotNull Project project) {
|
||||
JavaMethodFindUsagesOptions options = new JavaMethodFindUsagesOptions(project);
|
||||
options.isUsages = false;
|
||||
for (String s : InTextDirectivesUtils.findListWithPrefixes(text, "// OPTIONS: ")) {
|
||||
if (parseCommonOptions(options, s)) continue;
|
||||
|
||||
if (s.equals("overrides")) {
|
||||
options.isOverridingMethods = true;
|
||||
options.isImplementingMethods = true;
|
||||
}
|
||||
else fail("Invalid option: " + s);
|
||||
}
|
||||
|
||||
return options;
|
||||
}
|
||||
},
|
||||
JAVA_FIELD {
|
||||
@NotNull
|
||||
@Override
|
||||
public FindUsagesOptions parse(@NotNull String text, @NotNull Project project) {
|
||||
return new JavaVariableFindUsagesOptions(project);
|
||||
}
|
||||
};
|
||||
|
||||
protected static boolean parseCommonOptions(JavaFindUsagesOptions options, String s) {
|
||||
@@ -170,6 +224,15 @@ public abstract class AbstractJetFindUsagesTest extends LightCodeInsightFixtureT
|
||||
if (klass == JetClass.class) {
|
||||
return CLASS;
|
||||
}
|
||||
if (klass == PsiMethod.class) {
|
||||
return JAVA_METHOD;
|
||||
}
|
||||
if (klass == PsiClass.class) {
|
||||
return JAVA_CLASS;
|
||||
}
|
||||
if (klass == PsiField.class) {
|
||||
return JAVA_FIELD;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -30,13 +30,8 @@ import org.jetbrains.jet.findUsages.AbstractJetFindUsagesTest;
|
||||
|
||||
/** This class is generated by {@link org.jetbrains.jet.generators.tests.GenerateTests}. DO NOT MODIFY MANUALLY */
|
||||
@SuppressWarnings("all")
|
||||
@TestMetadata("idea/testData/findUsages")
|
||||
@InnerTestClasses({JetFindUsagesTest.Kotlin.class})
|
||||
@InnerTestClasses({JetFindUsagesTest.Kotlin.class, JetFindUsagesTest.Java.class})
|
||||
public class JetFindUsagesTest extends AbstractJetFindUsagesTest {
|
||||
public void testAllFilesPresentInFindUsages() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages"), Pattern.compile("^(.+)\\.0\\.kt$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/findUsages/kotlin")
|
||||
@InnerTestClasses({Kotlin.FindClassUsages.class, Kotlin.FindFunctionUsages.class, Kotlin.FindObjectUsages.class, Kotlin.FindPropertyUsages.class, Kotlin.FindWithFilteringImports.class, Kotlin.UnresolvedAnnotation.class})
|
||||
public static class Kotlin extends AbstractJetFindUsagesTest {
|
||||
@@ -380,10 +375,96 @@ public class JetFindUsagesTest extends AbstractJetFindUsagesTest {
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/findUsages/java")
|
||||
@InnerTestClasses({Java.FindJavaClassUsages.class, Java.FindJavaFieldUsages.class, Java.FindJavaMethodUsages.class})
|
||||
public static class Java extends AbstractJetFindUsagesTest {
|
||||
public void testAllFilesPresentInJava() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages/java"), Pattern.compile("^(.+)\\.0\\.java$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/findUsages/java/findJavaClassUsages")
|
||||
public static class FindJavaClassUsages extends AbstractJetFindUsagesTest {
|
||||
public void testAllFilesPresentInFindJavaClassUsages() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages/java/findJavaClassUsages"), Pattern.compile("^(.+)\\.0\\.java$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("JKClassAllUsages.0.java")
|
||||
public void testJKClassAllUsages() throws Exception {
|
||||
doTest("idea/testData/findUsages/java/findJavaClassUsages/JKClassAllUsages.0.java");
|
||||
}
|
||||
|
||||
@TestMetadata("JKClassFieldsUsages.0.java")
|
||||
public void testJKClassFieldsUsages() throws Exception {
|
||||
doTest("idea/testData/findUsages/java/findJavaClassUsages/JKClassFieldsUsages.0.java");
|
||||
}
|
||||
|
||||
@TestMetadata("JKClassMethodsUsages.0.java")
|
||||
public void testJKClassMethodsUsages() throws Exception {
|
||||
doTest("idea/testData/findUsages/java/findJavaClassUsages/JKClassMethodsUsages.0.java");
|
||||
}
|
||||
|
||||
@TestMetadata("JKDerivedClasses1.0.java")
|
||||
public void testJKDerivedClasses1() throws Exception {
|
||||
doTest("idea/testData/findUsages/java/findJavaClassUsages/JKDerivedClasses1.0.java");
|
||||
}
|
||||
|
||||
@TestMetadata("JKDerivedClasses2.0.java")
|
||||
public void testJKDerivedClasses2() throws Exception {
|
||||
doTest("idea/testData/findUsages/java/findJavaClassUsages/JKDerivedClasses2.0.java");
|
||||
}
|
||||
|
||||
@TestMetadata("JKDerivedClasses3.0.java")
|
||||
public void testJKDerivedClasses3() throws Exception {
|
||||
doTest("idea/testData/findUsages/java/findJavaClassUsages/JKDerivedClasses3.0.java");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/findUsages/java/findJavaFieldUsages")
|
||||
public static class FindJavaFieldUsages extends AbstractJetFindUsagesTest {
|
||||
public void testAllFilesPresentInFindJavaFieldUsages() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages/java/findJavaFieldUsages"), Pattern.compile("^(.+)\\.0\\.java$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("JKFieldUsages.0.java")
|
||||
public void testJKFieldUsages() throws Exception {
|
||||
doTest("idea/testData/findUsages/java/findJavaFieldUsages/JKFieldUsages.0.java");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/findUsages/java/findJavaMethodUsages")
|
||||
public static class FindJavaMethodUsages extends AbstractJetFindUsagesTest {
|
||||
public void testAllFilesPresentInFindJavaMethodUsages() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages/java/findJavaMethodUsages"), Pattern.compile("^(.+)\\.0\\.java$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("JKMethodOverrides.0.java")
|
||||
public void testJKMethodOverrides() throws Exception {
|
||||
doTest("idea/testData/findUsages/java/findJavaMethodUsages/JKMethodOverrides.0.java");
|
||||
}
|
||||
|
||||
@TestMetadata("JKMethodUsages.0.java")
|
||||
public void testJKMethodUsages() throws Exception {
|
||||
doTest("idea/testData/findUsages/java/findJavaMethodUsages/JKMethodUsages.0.java");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static Test innerSuite() {
|
||||
TestSuite suite = new TestSuite("Java");
|
||||
suite.addTestSuite(Java.class);
|
||||
suite.addTestSuite(FindJavaClassUsages.class);
|
||||
suite.addTestSuite(FindJavaFieldUsages.class);
|
||||
suite.addTestSuite(FindJavaMethodUsages.class);
|
||||
return suite;
|
||||
}
|
||||
}
|
||||
|
||||
public static Test suite() {
|
||||
TestSuite suite = new TestSuite("JetFindUsagesTest");
|
||||
suite.addTestSuite(JetFindUsagesTest.class);
|
||||
suite.addTest(Kotlin.innerSuite());
|
||||
suite.addTest(Java.innerSuite());
|
||||
return suite;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user