diff --git a/generators/generators.iml b/generators/generators.iml index cf8978de311..7438945994b 100644 --- a/generators/generators.iml +++ b/generators/generators.iml @@ -30,5 +30,6 @@ + \ No newline at end of file diff --git a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index 69530231434..cf3033fbbb8 100644 --- a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -20,6 +20,7 @@ import junit.framework.TestCase import org.jetbrains.kotlin.AbstractDataFlowValueRenderingTest import org.jetbrains.kotlin.addImport.AbstractAddImportTest import org.jetbrains.kotlin.android.* +import org.jetbrains.kotlin.annotation.AbstractAnnotationProcessorBoxTest import org.jetbrains.kotlin.asJava.AbstractKotlinLightClassTest import org.jetbrains.kotlin.cfg.AbstractControlFlowTest import org.jetbrains.kotlin.cfg.AbstractDataFlowTest @@ -785,6 +786,12 @@ fun main(args: Array) { } } + testGroup("plugins/annotation-collector/test", "plugins/annotation-collector/testData") { + testClass(javaClass()) { + model("collectToFile", recursive = false, extension = null) + } + } + testGroup("plugins/android-idea-plugin/tests", "plugins/android-idea-plugin/testData") { testClass(javaClass()) { model("android/parserResultEquality", recursive = false, extension = null) diff --git a/plugins/annotation-collector/annotation-collector.iml b/plugins/annotation-collector/annotation-collector.iml index 8838ea8bb49..5d5a86f5f27 100644 --- a/plugins/annotation-collector/annotation-collector.iml +++ b/plugins/annotation-collector/annotation-collector.iml @@ -4,6 +4,7 @@ + @@ -12,5 +13,8 @@ + + + \ No newline at end of file diff --git a/plugins/annotation-collector/test/org/jetbrains/kotlin/annotation/AbstractAnnotationProcessorBoxTest.kt b/plugins/annotation-collector/test/org/jetbrains/kotlin/annotation/AbstractAnnotationProcessorBoxTest.kt new file mode 100644 index 00000000000..d1e7f4ffbc3 --- /dev/null +++ b/plugins/annotation-collector/test/org/jetbrains/kotlin/annotation/AbstractAnnotationProcessorBoxTest.kt @@ -0,0 +1,74 @@ +/* + * Copyright 2010-2015 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.kotlin.annotation + +import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment +import org.jetbrains.kotlin.codegen.CodegenTestCase +import org.jetbrains.kotlin.codegen.CodegenTestUtil +import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension +import org.jetbrains.kotlin.codegen.generated.AbstractBlackBoxCodegenTest +import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.diagnostics.DiagnosticSink +import org.jetbrains.kotlin.test.ConfigurationKind +import org.jetbrains.kotlin.test.JetTestUtils +import org.jetbrains.kotlin.test.TestJdkKind +import java.io.File +import java.io.StringWriter +import java.io.Writer +import org.junit.Assert.* + +public abstract class AbstractAnnotationProcessorBoxTest : CodegenTestCase() { + + public fun doTest(path: String) { + val fileName = path + getTestName(true) + ".kt" + val collectorExtension = createTestEnvironment() + loadFileByFullPath(fileName) + CodegenTestUtil.generateFiles(myEnvironment, myFiles) + + val actualAnnotations = collectorExtension.stringWriter.toString() + val expectedAnnotationsFile = File(path + "annotations.txt") + + JetTestUtils.assertEqualsToFile(expectedAnnotationsFile, actualAnnotations) + } + + override fun codegenTestBasePath(): String { + return "plugins/annotation-collector/testData/codegen/" + } + + fun createTestEnvironment(): AnnotationCollectorExtensionForTests { + val configuration = JetTestUtils.compilerConfigurationForTests(ConfigurationKind.ALL, TestJdkKind.MOCK_JDK) + val environment = KotlinCoreEnvironment.createForTests(getTestRootDisposable()!!, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES) + val project = environment.project + + val collectorExtension = AnnotationCollectorExtensionForTests() + ClassBuilderInterceptorExtension.registerExtension(project, collectorExtension) + + myEnvironment = environment + + return collectorExtension + } + + private class AnnotationCollectorExtensionForTests : AnnotationCollectorExtensionBase() { + val stringWriter = StringWriter() + + override fun getWriter(diagnostic: DiagnosticSink) = stringWriter + + override val annotationFilterList = listOf() + } + +} \ No newline at end of file diff --git a/plugins/annotation-collector/test/org/jetbrains/kotlin/annotation/AnnotationProcessorBoxTestGenerated.java b/plugins/annotation-collector/test/org/jetbrains/kotlin/annotation/AnnotationProcessorBoxTestGenerated.java new file mode 100644 index 00000000000..ee07e3ec1ba --- /dev/null +++ b/plugins/annotation-collector/test/org/jetbrains/kotlin/annotation/AnnotationProcessorBoxTestGenerated.java @@ -0,0 +1,79 @@ +/* + * Copyright 2010-2015 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.kotlin.annotation; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.JUnit3RunnerWithInners; +import org.jetbrains.kotlin.test.JetTestUtils; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.runner.RunWith; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("plugins/annotation-collector/testData/codegen/collectToFile") +@TestDataPath("$PROJECT_ROOT") +@RunWith(JUnit3RunnerWithInners.class) +public class AnnotationProcessorBoxTestGenerated extends AbstractAnnotationProcessorBoxTest { + public void testAllFilesPresentInCollectToFile() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("plugins/annotation-collector/testData/codegen/collectToFile"), Pattern.compile("^([^\\.]+)$"), false); + } + + @TestMetadata("classAnnotations") + public void testClassAnnotations() throws Exception { + String fileName = JetTestUtils.navigationMetadata("plugins/annotation-collector/testData/codegen/collectToFile/classAnnotations/"); + doTest(fileName); + } + + @TestMetadata("defaultPackage") + public void testDefaultPackage() throws Exception { + String fileName = JetTestUtils.navigationMetadata("plugins/annotation-collector/testData/codegen/collectToFile/defaultPackage/"); + doTest(fileName); + } + + @TestMetadata("fieldAnnotations") + public void testFieldAnnotations() throws Exception { + String fileName = JetTestUtils.navigationMetadata("plugins/annotation-collector/testData/codegen/collectToFile/fieldAnnotations/"); + doTest(fileName); + } + + @TestMetadata("localClasses") + public void testLocalClasses() throws Exception { + String fileName = JetTestUtils.navigationMetadata("plugins/annotation-collector/testData/codegen/collectToFile/localClasses/"); + doTest(fileName); + } + + @TestMetadata("methodAnnotations") + public void testMethodAnnotations() throws Exception { + String fileName = JetTestUtils.navigationMetadata("plugins/annotation-collector/testData/codegen/collectToFile/methodAnnotations/"); + doTest(fileName); + } + + @TestMetadata("nestedClasses") + public void testNestedClasses() throws Exception { + String fileName = JetTestUtils.navigationMetadata("plugins/annotation-collector/testData/codegen/collectToFile/nestedClasses/"); + doTest(fileName); + } + + @TestMetadata("simple") + public void testSimple() throws Exception { + String fileName = JetTestUtils.navigationMetadata("plugins/annotation-collector/testData/codegen/collectToFile/simple/"); + doTest(fileName); + } +} diff --git a/plugins/annotation-collector/testData/collectToFile/classAnnotations/annotations.txt b/plugins/annotation-collector/testData/collectToFile/classAnnotations/annotations.txt new file mode 100644 index 00000000000..835d0f6a322 --- /dev/null +++ b/plugins/annotation-collector/testData/collectToFile/classAnnotations/annotations.txt @@ -0,0 +1,4 @@ +a javax.inject.Named 0 +p org.test 0 +c 0 0/SomeClass +c 0 0/SomeObject diff --git a/plugins/annotation-collector/testData/collectToFile/classAnnotations/classAnnotations.kt b/plugins/annotation-collector/testData/collectToFile/classAnnotations/classAnnotations.kt new file mode 100644 index 00000000000..0c2a12e733b --- /dev/null +++ b/plugins/annotation-collector/testData/collectToFile/classAnnotations/classAnnotations.kt @@ -0,0 +1,9 @@ +package org.test + +import javax.inject.* + +Named("KotlinClass") +public class SomeClass + +Named("KotlinObject") +public object SomeObject \ No newline at end of file diff --git a/plugins/annotation-collector/testData/collectToFile/defaultPackage/annotations.txt b/plugins/annotation-collector/testData/collectToFile/defaultPackage/annotations.txt new file mode 100644 index 00000000000..12a11beb164 --- /dev/null +++ b/plugins/annotation-collector/testData/collectToFile/defaultPackage/annotations.txt @@ -0,0 +1,8 @@ +a javax.inject.Named 0 +c 0 SomeClass +a javax.inject.Inject 1 +f 1 SomeClass annotatedProperty +a org.jetbrains.annotations.Nullable 2 +f 2 SomeClass annotatedProperty +m 2 SomeClass getAnnotatedProperty +m 1 SomeClass annotatedFunction diff --git a/plugins/annotation-collector/testData/collectToFile/defaultPackage/defaultPackage.kt b/plugins/annotation-collector/testData/collectToFile/defaultPackage/defaultPackage.kt new file mode 100644 index 00000000000..6d25f77da96 --- /dev/null +++ b/plugins/annotation-collector/testData/collectToFile/defaultPackage/defaultPackage.kt @@ -0,0 +1,14 @@ +import javax.inject.* + +Named("KotlinClass") +public class SomeClass { + + Inject + public var annotatedProperty: String? = null + + Inject + public fun annotatedFunction() { + + } + +} \ No newline at end of file diff --git a/plugins/annotation-collector/testData/collectToFile/fieldAnnotations/annotations.txt b/plugins/annotation-collector/testData/collectToFile/fieldAnnotations/annotations.txt new file mode 100644 index 00000000000..93072144e40 --- /dev/null +++ b/plugins/annotation-collector/testData/collectToFile/fieldAnnotations/annotations.txt @@ -0,0 +1,7 @@ +a javax.inject.Inject 0 +p org.test 0 +f 0 0/SomeClass annotatedVal +a org.jetbrains.annotations.Nullable 1 +f 1 0/SomeClass annotatedVal +m 1 0/SomeClass getAnnotatedVal +f 0 0/SomeClass annotatedVar diff --git a/plugins/annotation-collector/testData/collectToFile/fieldAnnotations/fieldAnnotations.kt b/plugins/annotation-collector/testData/collectToFile/fieldAnnotations/fieldAnnotations.kt new file mode 100644 index 00000000000..a6782f1c414 --- /dev/null +++ b/plugins/annotation-collector/testData/collectToFile/fieldAnnotations/fieldAnnotations.kt @@ -0,0 +1,13 @@ +package org.test + +import javax.inject.* + +public class SomeClass { + + Inject + public val annotatedVal: String? = null + + Inject + public var annotatedVar: Int = 5 + +} \ No newline at end of file diff --git a/plugins/annotation-collector/testData/collectToFile/localClasses/annotations.txt b/plugins/annotation-collector/testData/collectToFile/localClasses/annotations.txt new file mode 100644 index 00000000000..52bd9d146cb --- /dev/null +++ b/plugins/annotation-collector/testData/collectToFile/localClasses/annotations.txt @@ -0,0 +1,9 @@ +a javax.inject.Named 0 +p org.test 0 +c 0 0/SomeClass$someFunction$LocalClass +a javax.inject.Inject 1 +f 1 0/SomeClass$someFunction$LocalClass annotatedProperty +a org.jetbrains.annotations.Nullable 2 +f 2 0/SomeClass$someFunction$LocalClass annotatedProperty +m 2 0/SomeClass$someFunction$LocalClass getAnnotatedProperty +m 1 0/SomeClass$someFunction$LocalClass annotatedFunction diff --git a/plugins/annotation-collector/testData/collectToFile/localClasses/localClasses.kt b/plugins/annotation-collector/testData/collectToFile/localClasses/localClasses.kt new file mode 100644 index 00000000000..9799946357b --- /dev/null +++ b/plugins/annotation-collector/testData/collectToFile/localClasses/localClasses.kt @@ -0,0 +1,22 @@ +package org.test + +import javax.inject.* + +public class SomeClass { + + public fun someFunction() { + [Named("LocalKotlinClass")] + class LocalClass { + + [Inject] + public var annotatedProperty: String? = null + + [Inject] + public fun annotatedFunction() { + + } + + } + } + +} \ No newline at end of file diff --git a/plugins/annotation-collector/testData/collectToFile/methodAnnotations/annotations.txt b/plugins/annotation-collector/testData/collectToFile/methodAnnotations/annotations.txt new file mode 100644 index 00000000000..0df56be2835 --- /dev/null +++ b/plugins/annotation-collector/testData/collectToFile/methodAnnotations/annotations.txt @@ -0,0 +1,5 @@ +a javax.inject.Inject 0 +p org.test 0 +m 0 0/SomeClass annotatedFunction +a javax.inject.Named 1 +m 1 0/SomeClass$annotatedFunction$1 invoke diff --git a/plugins/annotation-collector/testData/collectToFile/methodAnnotations/methodAnnotations.kt b/plugins/annotation-collector/testData/collectToFile/methodAnnotations/methodAnnotations.kt new file mode 100644 index 00000000000..899f22e0737 --- /dev/null +++ b/plugins/annotation-collector/testData/collectToFile/methodAnnotations/methodAnnotations.kt @@ -0,0 +1,17 @@ +package org.test + +import javax.inject.* + +public class SomeClass { + + Inject + public fun annotatedFunction() { + + [Named("LocalFunction")] + fun localFunction() { + + } + + } + +} \ No newline at end of file diff --git a/plugins/annotation-collector/testData/collectToFile/nestedClasses/annotations.txt b/plugins/annotation-collector/testData/collectToFile/nestedClasses/annotations.txt new file mode 100644 index 00000000000..06d233ba572 --- /dev/null +++ b/plugins/annotation-collector/testData/collectToFile/nestedClasses/annotations.txt @@ -0,0 +1,10 @@ +a javax.inject.Named 0 +p org.test 0 +c 0 0/SomeClass$Companion +a org.jetbrains.annotations.NotNull 1 +m 1 0/SomeClass$Companion access$init$0 +c 0 0/SomeClass$SomeInnerObject +c 0 0/SomeClass$InnerClass +c 0 0/SomeClass$NestedClass +a java.lang.Deprecated 2 +f 2 0/SomeClass OBJECT$ diff --git a/plugins/annotation-collector/testData/collectToFile/nestedClasses/nestedClasses.kt b/plugins/annotation-collector/testData/collectToFile/nestedClasses/nestedClasses.kt new file mode 100644 index 00000000000..660c4b8d8a8 --- /dev/null +++ b/plugins/annotation-collector/testData/collectToFile/nestedClasses/nestedClasses.kt @@ -0,0 +1,27 @@ +package org.test + +import javax.inject.* + +public class SomeClass { + + Named("CompanionObject") + companion object { + + } + + Named("KotlinInnerObject") + object SomeInnerObject { + + } + + Named("InnerClass") + inner class InnerClass { + + } + + Named("NestedClass") + class NestedClass { + + } + +} \ No newline at end of file diff --git a/plugins/annotation-collector/testData/collectToFile/simple/annotations.txt b/plugins/annotation-collector/testData/collectToFile/simple/annotations.txt new file mode 100644 index 00000000000..f93250b166f --- /dev/null +++ b/plugins/annotation-collector/testData/collectToFile/simple/annotations.txt @@ -0,0 +1,3 @@ +a javax.inject.Inject 0 +p org.test 0 +m 0 0/SomeClass annotatedFunction diff --git a/plugins/annotation-collector/testData/collectToFile/simple/simple.kt b/plugins/annotation-collector/testData/collectToFile/simple/simple.kt new file mode 100644 index 00000000000..93221a9df5b --- /dev/null +++ b/plugins/annotation-collector/testData/collectToFile/simple/simple.kt @@ -0,0 +1,12 @@ +package org.test + +import javax.inject.* + +public class SomeClass { + + Inject + public fun annotatedFunction() { + + } + +} \ No newline at end of file