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