From 76c81aa3f0a8c50bbaab74992f30666a04f36a2b Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 8 Aug 2013 17:02:41 +0400 Subject: [PATCH] Add support of extension search --- .../jet/generators/tests/GenerateTests.java | 2 +- .../KotlinFindFunctionUsagesHandler.java | 13 +- .../plugin/search/KotlinExtensionSearch.java | 151 +++++++++++ .../Client.kt | 2 +- .../Server.kt | 23 +- .../results.txt | 6 + .../kotlinOverloadUsages/results.txt | 4 - .../jet/findUsages/JetFindUsagesTest.java | 235 ------------------ 8 files changed, 192 insertions(+), 244 deletions(-) create mode 100644 idea/src/org/jetbrains/jet/plugin/search/KotlinExtensionSearch.java rename idea/testData/findUsages/findMethodUsages/{kotlinOverloadUsages => kotlinExtensionAndOverloadUsages}/Client.kt (90%) rename idea/testData/findUsages/findMethodUsages/{kotlinOverloadUsages => kotlinExtensionAndOverloadUsages}/Server.kt (54%) create mode 100644 idea/testData/findUsages/findMethodUsages/kotlinExtensionAndOverloadUsages/results.txt delete mode 100644 idea/testData/findUsages/findMethodUsages/kotlinOverloadUsages/results.txt delete mode 100644 idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTest.java diff --git a/generators/org/jetbrains/jet/generators/tests/GenerateTests.java b/generators/org/jetbrains/jet/generators/tests/GenerateTests.java index 763233fed39..d62108b3ab2 100644 --- a/generators/org/jetbrains/jet/generators/tests/GenerateTests.java +++ b/generators/org/jetbrains/jet/generators/tests/GenerateTests.java @@ -464,7 +464,7 @@ public class GenerateTests { "idea/testData/findUsages/findMethodUsages/javaAndKotlinOverrides", "Server.kt", "testFindMethodJavaUsages" ), testModelWithFileName( - "idea/testData/findUsages/findMethodUsages/kotlinOverloadUsages", "Server.kt", "testFindMethodKotlinUsages" + "idea/testData/findUsages/findMethodUsages/kotlinExtensionAndOverloadUsages", "Server.kt", "testFindMethodKotlinUsages" ), testModelWithFileName( "idea/testData/findUsages/findPropertyUsages/javaPropertyUsages", "Server.kt", "testFindPropertyJavaUsages" diff --git a/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindFunctionUsagesHandler.java b/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindFunctionUsagesHandler.java index 3ffeb2604e7..a0513392c0a 100644 --- a/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindFunctionUsagesHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/findUsages/handlers/KotlinFindFunctionUsagesHandler.java @@ -37,6 +37,7 @@ import org.jetbrains.jet.lang.psi.JetNamedFunction; import org.jetbrains.jet.plugin.findUsages.KotlinFindUsagesHandlerFactory; import org.jetbrains.jet.plugin.findUsages.dialogs.KotlinFindMethodUsagesDialog; import org.jetbrains.jet.plugin.findUsages.options.KotlinMethodFindUsagesOptions; +import org.jetbrains.jet.plugin.search.KotlinExtensionSearch; import java.util.Collection; @@ -123,12 +124,22 @@ public class KotlinFindFunctionUsagesHandler extends KotlinFindUsagesHandler { + public static final KotlinExtensionSearch INSTANCE = new KotlinExtensionSearch(); + + public static class SearchParameters { + private final PsiMethod method; + private final SearchScope searchScope; + private final SearchRequestCollector optimizer = new SearchRequestCollector(new SearchSession()); + + public SearchParameters(@NotNull PsiMethod method, @NotNull SearchScope searchScope) { + this.searchScope = searchScope; + this.method = method; + } + + public PsiMethod getMethod() { + return method; + } + + public SearchScope getSearchScope() { + return searchScope; + } + + public SearchRequestCollector getOptimizer() { + return optimizer; + } + } + + private static class ExtensionTextOccurenceProcessor extends RequestResultProcessor { + private final SearchParameters parameters; + + private ExtensionTextOccurenceProcessor(SearchParameters parameters, @NotNull Object... equality) { + super(equality); + this.parameters = parameters; + } + + private void processElement( + @NotNull PsiReference ref, + @Nullable PsiElement refTarget, + @NotNull Processor consumer + ) { + if (!(refTarget instanceof JetSimpleNameExpression)) return; + + BindingContext bindingContext = + AnalyzerFacadeWithCache.analyzeFileWithCache((JetFile) refTarget.getContainingFile()).getBindingContext(); + DeclarationDescriptor descriptor = bindingContext.get(BindingContext.REFERENCE_TARGET, (JetSimpleNameExpression) refTarget); + + if (!(descriptor instanceof FunctionDescriptor)) return; + + FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor; + ReceiverParameterDescriptor receiverParameterDescriptor = functionDescriptor.getReceiverParameter(); + + if (receiverParameterDescriptor == null) return; + JetType receiverType = receiverParameterDescriptor.getType(); + + ClassifierDescriptor receiverDescriptor = receiverType.getConstructor().getDeclarationDescriptor(); + if (!(receiverDescriptor instanceof ClassDescriptor)) return; + + PsiElement originalMethod = parameters.getMethod(); + if (originalMethod instanceof JetClsMethod) { + originalMethod = ((JetClsMethod) originalMethod).getOrigin(); + } + + DeclarationDescriptor declarationDescriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, originalMethod); + if (declarationDescriptor == null) return; + + DeclarationDescriptor containingDescriptor = declarationDescriptor.getContainingDeclaration(); + if (!(containingDescriptor instanceof ClassDescriptor)) return; + + if (DescriptorUtils.isSubclass((ClassDescriptor) containingDescriptor, (ClassDescriptor) receiverDescriptor)) { + consumer.process(ref); + } + } + + @Override + public boolean processTextOccurrence( + @NotNull PsiElement element, + int offsetInElement, + @NotNull Processor consumer + ) { + List references = PsiReferenceService.getService().getReferences( + element, PsiReferenceService.Hints.NO_HINTS + ); + for (PsiReference ref : references) { + if (ReferenceRange.containsOffsetInElement(ref, offsetInElement)) { + processElement(ref, ref.getElement(), consumer); + } + } + + return true; + } + } + + private KotlinExtensionSearch() { + registerExecutor( + new QueryExecutorBase() { + @Override + public void processQuery(@NotNull final SearchParameters p, @NotNull Processor consumer) { + ApplicationManager.getApplication().runReadAction(new Runnable() { + @Override + public void run() { + p.getOptimizer().searchWord( + p.getMethod().getName(), + p.getSearchScope(), + UsageSearchContext.IN_CODE, + true, + new ExtensionTextOccurenceProcessor(p) + ); + } + }); + } + } + ); + } + + public static Query search(@NotNull PsiMethod method, @NotNull SearchScope scope) { + return search(new SearchParameters(method, scope)); + } + + public static Query search(SearchParameters parameters) { + Query result = INSTANCE.createQuery(parameters); + SearchRequestCollector requests = parameters.getOptimizer(); + return uniqueResults(new MergeQuery(result, new SearchRequestQuery(parameters.getMethod().getProject(), requests))); + } + + private static UniqueResultsQuery uniqueResults(@NotNull Query composite) { + return new UniqueResultsQuery( + composite, ContainerUtil.canonicalStrategy(), ReferenceDescriptor.MAPPER + ); + } +} diff --git a/idea/testData/findUsages/findMethodUsages/kotlinOverloadUsages/Client.kt b/idea/testData/findUsages/findMethodUsages/kotlinExtensionAndOverloadUsages/Client.kt similarity index 90% rename from idea/testData/findUsages/findMethodUsages/kotlinOverloadUsages/Client.kt rename to idea/testData/findUsages/findMethodUsages/kotlinExtensionAndOverloadUsages/Client.kt index e45aaebf15f..ed54142f76a 100644 --- a/idea/testData/findUsages/findMethodUsages/kotlinOverloadUsages/Client.kt +++ b/idea/testData/findUsages/findMethodUsages/kotlinExtensionAndOverloadUsages/Client.kt @@ -4,7 +4,7 @@ open class B: A() { } open fun baz(a: A) { - a.foo("", 0) + foo("", 0) } open fun baz(a: A) { diff --git a/idea/testData/findUsages/findMethodUsages/kotlinOverloadUsages/Server.kt b/idea/testData/findUsages/findMethodUsages/kotlinExtensionAndOverloadUsages/Server.kt similarity index 54% rename from idea/testData/findUsages/findMethodUsages/kotlinOverloadUsages/Server.kt rename to idea/testData/findUsages/findMethodUsages/kotlinExtensionAndOverloadUsages/Server.kt index a77dac1af0b..f4f8f01780f 100644 --- a/idea/testData/findUsages/findMethodUsages/kotlinOverloadUsages/Server.kt +++ b/idea/testData/findUsages/findMethodUsages/kotlinExtensionAndOverloadUsages/Server.kt @@ -1,5 +1,16 @@ // OPTIONS: overloadUsages -open class A { +trait X { +} + +fun X.foo(a: Number, b: Number) { + println("$a$b") +} + +fun bar(x: X) { + x.foo(1, 2) +} + +open class A: X { open fun foo(t: T) { println(t) } @@ -14,7 +25,11 @@ fun A.foo(t: T, x: String) { println(x) } -fun A.foo(s: String, n: Number) { +fun bar(a: A) { + a.foo(1, "") +} + +fun B.foo(s: String, n: Number) { fun A.foo(t: T, x: String) { foo(t) println(x) @@ -22,4 +37,8 @@ fun A.foo(s: String, n: Number) { foo(s) println(n) +} + +fun bar(b: B) { + b.foo("", 0) } \ No newline at end of file diff --git a/idea/testData/findUsages/findMethodUsages/kotlinExtensionAndOverloadUsages/results.txt b/idea/testData/findUsages/findMethodUsages/kotlinExtensionAndOverloadUsages/results.txt new file mode 100644 index 00000000000..4166f9275d0 --- /dev/null +++ b/idea/testData/findUsages/findMethodUsages/kotlinExtensionAndOverloadUsages/results.txt @@ -0,0 +1,6 @@ +Function call (10: 7) x.foo(1, 2) +Function call (11: 11) a.foo(0, "") +Function call (24: 5) foo(t) +Function call (29: 7) a.foo(1, "") +Function call (34: 9) foo(t) +Function call (3: 18) super.foo(t) \ No newline at end of file diff --git a/idea/testData/findUsages/findMethodUsages/kotlinOverloadUsages/results.txt b/idea/testData/findUsages/findMethodUsages/kotlinOverloadUsages/results.txt deleted file mode 100644 index b435f2d9064..00000000000 --- a/idea/testData/findUsages/findMethodUsages/kotlinOverloadUsages/results.txt +++ /dev/null @@ -1,4 +0,0 @@ -Function call (13: 5) foo(t) -Function call (19: 9) foo(t) -Function call (23: 5) foo(s) -Function call (3: 18) super.foo(t) \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTest.java b/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTest.java deleted file mode 100644 index 379077486d0..00000000000 --- a/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTest.java +++ /dev/null @@ -1,235 +0,0 @@ -/* - * Copyright 2010-2013 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.findUsages; - -import junit.framework.Assert; -import junit.framework.Test; -import junit.framework.TestSuite; - -import java.io.File; -import java.util.regex.Pattern; -import org.jetbrains.jet.JetTestUtils; -import org.jetbrains.jet.test.InnerTestClasses; -import org.jetbrains.jet.test.TestMetadata; - -import org.jetbrains.jet.findUsages.AbstractJetFindUsagesTest; - -/** This class is generated by {@link org.jetbrains.jet.generators.tests.GenerateTests}. DO NOT MODIFY MANUALLY */ -@SuppressWarnings("all") -@InnerTestClasses({JetFindUsagesTest.JavaClassUsages.class, JetFindUsagesTest.KotlinClassUsages1.class, JetFindUsagesTest.KotlinClassUsages2.class, JetFindUsagesTest.KotlinClassUsages3.class, JetFindUsagesTest.JavaObjectUsages.class, JetFindUsagesTest.KotlinObjectUsages.class, JetFindUsagesTest.JavaMethodUsages.class, JetFindUsagesTest.KotlinMethodUsages.class, JetFindUsagesTest.JavaAndKotlinOverrides.class, JetFindUsagesTest.KotlinOverloadUsages.class, JetFindUsagesTest.JavaPropertyUsages.class, JetFindUsagesTest.KotlinPropertyUsages.class, JetFindUsagesTest.FindWithFilteringImports.class, JetFindUsagesTest.UnresolvedAnnotation.class}) -public class JetFindUsagesTest extends AbstractJetFindUsagesTest { - @TestMetadata("idea/testData/findUsages/findClassUsages/javaClassUsages") - public static class JavaClassUsages extends AbstractJetFindUsagesTest { - @TestMetadata("Server.kt") - public void test() throws Exception { - testFindClassJavaUsages("idea/testData/findUsages/findClassUsages/javaClassUsages/Server.kt"); - } - - public void testAllFilesPresentInJavaClassUsages() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages/findClassUsages/javaClassUsages"), Pattern.compile("^(.*)Server.kt$"), true); - } - - } - - @TestMetadata("idea/testData/findUsages/findClassUsages/kotlinClassUsages1") - public static class KotlinClassUsages1 extends AbstractJetFindUsagesTest { - @TestMetadata("Server.kt") - public void test() throws Exception { - testFindClassKotlinUsages("idea/testData/findUsages/findClassUsages/kotlinClassUsages1/Server.kt"); - } - - public void testAllFilesPresentInKotlinClassUsages1() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages/findClassUsages/kotlinClassUsages1"), Pattern.compile("^(.*)Server.kt$"), true); - } - - } - - @TestMetadata("idea/testData/findUsages/findClassUsages/kotlinClassUsages2") - public static class KotlinClassUsages2 extends AbstractJetFindUsagesTest { - @TestMetadata("Server.kt") - public void test() throws Exception { - testFindClassKotlinUsages("idea/testData/findUsages/findClassUsages/kotlinClassUsages2/Server.kt"); - } - - public void testAllFilesPresentInKotlinClassUsages2() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages/findClassUsages/kotlinClassUsages2"), Pattern.compile("^(.*)Server.kt$"), true); - } - - } - - @TestMetadata("idea/testData/findUsages/findClassUsages/kotlinClassUsages3") - public static class KotlinClassUsages3 extends AbstractJetFindUsagesTest { - @TestMetadata("Server.kt") - public void test() throws Exception { - testFindClassKotlinUsages("idea/testData/findUsages/findClassUsages/kotlinClassUsages3/Server.kt"); - } - - public void testAllFilesPresentInKotlinClassUsages3() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages/findClassUsages/kotlinClassUsages3"), Pattern.compile("^(.*)Server.kt$"), true); - } - - } - - @TestMetadata("idea/testData/findUsages/findObjectUsages/javaObjectUsages") - public static class JavaObjectUsages extends AbstractJetFindUsagesTest { - @TestMetadata("Server.kt") - public void test() throws Exception { - testFindObjectJavaUsages("idea/testData/findUsages/findObjectUsages/javaObjectUsages/Server.kt"); - } - - public void testAllFilesPresentInJavaObjectUsages() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages/findObjectUsages/javaObjectUsages"), Pattern.compile("^(.*)Server.kt$"), true); - } - - } - - @TestMetadata("idea/testData/findUsages/findObjectUsages/kotlinObjectUsages") - public static class KotlinObjectUsages extends AbstractJetFindUsagesTest { - @TestMetadata("Server.kt") - public void test() throws Exception { - testFindObjectKotlinUsages("idea/testData/findUsages/findObjectUsages/kotlinObjectUsages/Server.kt"); - } - - public void testAllFilesPresentInKotlinObjectUsages() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages/findObjectUsages/kotlinObjectUsages"), Pattern.compile("^(.*)Server.kt$"), true); - } - - } - - @TestMetadata("idea/testData/findUsages/findMethodUsages/javaMethodUsages") - public static class JavaMethodUsages extends AbstractJetFindUsagesTest { - @TestMetadata("Server.kt") - public void test() throws Exception { - testFindMethodJavaUsages("idea/testData/findUsages/findMethodUsages/javaMethodUsages/Server.kt"); - } - - public void testAllFilesPresentInJavaMethodUsages() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages/findMethodUsages/javaMethodUsages"), Pattern.compile("^(.*)Server.kt$"), true); - } - - } - - @TestMetadata("idea/testData/findUsages/findMethodUsages/kotlinMethodUsages") - public static class KotlinMethodUsages extends AbstractJetFindUsagesTest { - @TestMetadata("Server.kt") - public void test() throws Exception { - testFindMethodKotlinUsages("idea/testData/findUsages/findMethodUsages/kotlinMethodUsages/Server.kt"); - } - - public void testAllFilesPresentInKotlinMethodUsages() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages/findMethodUsages/kotlinMethodUsages"), Pattern.compile("^(.*)Server.kt$"), true); - } - - } - - @TestMetadata("idea/testData/findUsages/findMethodUsages/javaAndKotlinOverrides") - public static class JavaAndKotlinOverrides extends AbstractJetFindUsagesTest { - @TestMetadata("Server.kt") - public void test() throws Exception { - testFindMethodJavaUsages("idea/testData/findUsages/findMethodUsages/javaAndKotlinOverrides/Server.kt"); - } - - public void testAllFilesPresentInJavaAndKotlinOverrides() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages/findMethodUsages/javaAndKotlinOverrides"), Pattern.compile("^(.*)Server.kt$"), true); - } - - } - - @TestMetadata("idea/testData/findUsages/findMethodUsages/kotlinOverloadUsages") - public static class KotlinOverloadUsages extends AbstractJetFindUsagesTest { - @TestMetadata("Server.kt") - public void test() throws Exception { - testFindMethodKotlinUsages("idea/testData/findUsages/findMethodUsages/kotlinOverloadUsages/Server.kt"); - } - - public void testAllFilesPresentInKotlinOverloadUsages() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages/findMethodUsages/kotlinOverloadUsages"), Pattern.compile("^(.*)Server.kt$"), true); - } - - } - - @TestMetadata("idea/testData/findUsages/findPropertyUsages/javaPropertyUsages") - public static class JavaPropertyUsages extends AbstractJetFindUsagesTest { - @TestMetadata("Server.kt") - public void test() throws Exception { - testFindPropertyJavaUsages("idea/testData/findUsages/findPropertyUsages/javaPropertyUsages/Server.kt"); - } - - public void testAllFilesPresentInJavaPropertyUsages() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages/findPropertyUsages/javaPropertyUsages"), Pattern.compile("^(.*)Server.kt$"), true); - } - - } - - @TestMetadata("idea/testData/findUsages/findPropertyUsages/kotlinPropertyUsages") - public static class KotlinPropertyUsages extends AbstractJetFindUsagesTest { - @TestMetadata("Server.kt") - public void test() throws Exception { - testFindPropertyKotlinUsages("idea/testData/findUsages/findPropertyUsages/kotlinPropertyUsages/Server.kt"); - } - - public void testAllFilesPresentInKotlinPropertyUsages() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages/findPropertyUsages/kotlinPropertyUsages"), Pattern.compile("^(.*)Server.kt$"), true); - } - - } - - @TestMetadata("idea/testData/findUsages/findWithFilteringImports") - public static class FindWithFilteringImports extends AbstractJetFindUsagesTest { - @TestMetadata("Server.kt") - public void test() throws Exception { - testFindWithFilteringImports("idea/testData/findUsages/findWithFilteringImports/Server.kt"); - } - - public void testAllFilesPresentInFindWithFilteringImports() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages/findWithFilteringImports"), Pattern.compile("^(.*)Server.kt$"), true); - } - - } - - @TestMetadata("idea/testData/findUsages/unresolvedAnnotation") - public static class UnresolvedAnnotation extends AbstractJetFindUsagesTest { - @TestMetadata("Server.kt") - public void test() throws Exception { - testFindUsagesUnresolvedAnnotation("idea/testData/findUsages/unresolvedAnnotation/Server.kt"); - } - - public void testAllFilesPresentInUnresolvedAnnotation() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/findUsages/unresolvedAnnotation"), Pattern.compile("^(.*)Server.kt$"), true); - } - - } - - public static Test suite() { - TestSuite suite = new TestSuite("JetFindUsagesTest"); - suite.addTestSuite(JavaClassUsages.class); - suite.addTestSuite(KotlinClassUsages1.class); - suite.addTestSuite(KotlinClassUsages2.class); - suite.addTestSuite(KotlinClassUsages3.class); - suite.addTestSuite(JavaObjectUsages.class); - suite.addTestSuite(KotlinObjectUsages.class); - suite.addTestSuite(JavaMethodUsages.class); - suite.addTestSuite(KotlinMethodUsages.class); - suite.addTestSuite(JavaAndKotlinOverrides.class); - suite.addTestSuite(KotlinOverloadUsages.class); - suite.addTestSuite(JavaPropertyUsages.class); - suite.addTestSuite(KotlinPropertyUsages.class); - suite.addTestSuite(FindWithFilteringImports.class); - suite.addTestSuite(UnresolvedAnnotation.class); - return suite; - } -}