diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index dc1ff0e8cd4..169a3b06da0 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -369,6 +369,10 @@ fun main(args: Array) { testClass { model("codegen") } + + testClass { + model("diagnostics") + } } testGroup("plugins/fir/fir-plugin-prototype/tests-gen", "plugins/fir/fir-plugin-prototype/testData") { diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/constructors.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/constructors.kt index 936f38169a1..ebe0705b210 100644 --- a/plugins/parcelize/parcelize-compiler/testData/diagnostics/constructors.kt +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/constructors.kt @@ -11,7 +11,7 @@ class A : Parcelable class B(val firstName: String, val secondName: String) : Parcelable @Parcelize -class C(val firstName: String, secondName: String) : Parcelable +class C(val firstName: String, secondName: String) : Parcelable @Parcelize class D(val firstName: String, vararg val secondName: String) : Parcelable @@ -22,7 +22,7 @@ class E(val firstName: String, val secondName: String) : Parcelable { } @Parcelize -class F : Parcelable { +class F : Parcelable { constructor(a: String) { println(a) } diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/customCreator.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/customCreator.kt index 8cca979a902..b5fd8022103 100644 --- a/plugins/parcelize/parcelize-compiler/testData/diagnostics/customCreator.kt +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/customCreator.kt @@ -9,7 +9,7 @@ import android.os.Parcel class A(val a: String) : Parcelable { companion object { @JvmField - val CREATOR = object : Parcelable.Creator { + val CREATOR = object : Parcelable.Creator { override fun createFromParcel(source: Parcel): A = A("") override fun newArray(size: Int) = arrayOfNulls(size) } @@ -18,7 +18,7 @@ class A(val a: String) : Parcelable { @Parcelize class B(val b: String) : Parcelable { - companion object CREATOR : Parcelable.Creator { + companion object CREATOR : Parcelable.Creator { override fun createFromParcel(source: Parcel): B = B("") override fun newArray(size: Int) = arrayOfNulls(size) } diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/customParcelers.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/customParcelers.kt index 03295fc2f0f..e55bde21969 100644 --- a/plugins/parcelize/parcelize-compiler/testData/diagnostics/customParcelers.kt +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/customParcelers.kt @@ -19,27 +19,27 @@ class StringClassParceler : Parceler { override fun String.write(parcel: Parcel, flags: Int) = TODO() } -@TypeParceler -class MissingParcelizeAnnotation(val a: @WriteWith String) +@TypeParceler +class MissingParcelizeAnnotation(val a: @WriteWith String) @Parcelize @TypeParceler -class ShouldBeClass(val a: @WriteWith String) : Parcelable +class ShouldBeClass(val a: @WriteWith<StringClassParceler> String) : Parcelable @Parcelize class Test( - val a: @WriteWith Int, + val a: @WriteWith<StringParceler> Int, val b: @WriteWith String, - val c: @WriteWith<StringParceler> CharSequence, + val c: @WriteWith<StringParceler> CharSequence, val d: @WriteWith String, val e: @WriteWith CharSequence ) : Parcelable @Parcelize @TypeParceler -class Test2(@TypeParceler val a: String) : Parcelable +class Test2(@TypeParceler val a: String) : Parcelable @Parcelize -@TypeParceler<String, StringParceler> -@TypeParceler<String, CharSequenceParceler> +@TypeParceler<String, StringParceler> +@TypeParceler<String, CharSequenceParceler> class Test3(val a: String) : Parcelable diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/customWriteToParcel.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/customWriteToParcel.kt index cc58d67b9fd..519a732362e 100644 --- a/plugins/parcelize/parcelize-compiler/testData/diagnostics/customWriteToParcel.kt +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/customWriteToParcel.kt @@ -6,16 +6,16 @@ import android.os.Parcel @Parcelize class A(val a: String) : Parcelable { - override fun writeToParcel(p: Parcel?, flags: Int) {} + override fun writeToParcel(p: Parcel?, flags: Int) {} override fun describeContents() = 0 } @Parcelize class B(val a: String) : Parcelable { - override fun writeToParcel(p: Parcel?, flags: Int) {} + override fun writeToParcel(p: Parcel?, flags: Int) {} } @Parcelize class C(val a: String) : Parcelable { - override fun writeToParcel(p: Parcel, flags: Int) {} + override fun writeToParcel(p: Parcel, flags: Int) {} } diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/delegate.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/delegate.kt index 3180218dd08..ad3912dcdaf 100644 --- a/plugins/parcelize/parcelize-compiler/testData/diagnostics/delegate.kt +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/delegate.kt @@ -10,4 +10,4 @@ open class Delegate : Parcelable { } @Parcelize -class Test : Parcelable by Delegate() +class Test : Parcelable by Delegate() diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/deprecatedAnnotations.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/deprecatedAnnotations.kt index 64b0192a0b6..34a8b1d4822 100644 --- a/plugins/parcelize/parcelize-compiler/testData/diagnostics/deprecatedAnnotations.kt +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/deprecatedAnnotations.kt @@ -21,26 +21,26 @@ object Parceler2 : Parceler> { } } -@Parcelize -@TypeParcelerParceler2> +@Parcelize +@TypeParcelerParceler2> data class Test( val a: String, - val b: @WriteWith String, - val c: @WriteWith List<@WriteWith String> + val b: @WriteWith String, + val c: @WriteWith List<@WriteWith String> ) : Parcelable { - @IgnoredOnParcel + @IgnoredOnParcel val x by lazy { "foo" } } interface ParcelerForUser: Parceler -@Parcelize +@Parcelize class User(val name: String) : Parcelable { - private companion object : ParcelerForUser { + private companion object : ParcelerForUser { override fun User.write(parcel: Parcel, flags: Int) { parcel.writeString(name) } override fun create(parcel: Parcel) = User(parcel.readString()!!) } -} \ No newline at end of file +} diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/emptyPrimaryConstructor.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/emptyPrimaryConstructor.kt index 32fe413f297..55f3bca3a12 100644 --- a/plugins/parcelize/parcelize-compiler/testData/diagnostics/emptyPrimaryConstructor.kt +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/emptyPrimaryConstructor.kt @@ -7,4 +7,4 @@ import android.os.Parcelable class User : Parcelable @Parcelize -class User2() : Parcelable +class User2() : Parcelable diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/kt20062.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/kt20062.kt index ce1c60e1555..36f692501ed 100644 --- a/plugins/parcelize/parcelize-compiler/testData/diagnostics/kt20062.kt +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/kt20062.kt @@ -17,4 +17,4 @@ class Foo(val box: Box): Parcelable { } @Parcelize -class Foo2(val box: Box): Parcelable +class Foo2(val box: Box): Parcelable diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/modality.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/modality.kt index c600f43f6a4..38441e5314e 100644 --- a/plugins/parcelize/parcelize-compiler/testData/diagnostics/modality.kt +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/modality.kt @@ -10,22 +10,22 @@ open class Open(val foo: String) : Parcelable class Final(val foo: String) : Parcelable @Parcelize -abstract class Abstract(val foo: String) : Parcelable +abstract class Abstract(val foo: String) : Parcelable @Parcelize -sealed class Sealed(val foo: String) : Parcelable { +sealed class Sealed(val foo: String) : Parcelable { class X : Sealed("") } class Outer { @Parcelize - inner class Inner(val foo: String) : Parcelable + inner class Inner(val foo: String) : Parcelable } fun foo() { @Parcelize - object : Parcelable {} + object : Parcelable {} @Parcelize - class Local {} + class Local {} } diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/properties.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/properties.kt index 5af90279f36..cf02ad6ed4f 100644 --- a/plugins/parcelize/parcelize-compiler/testData/diagnostics/properties.kt +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/properties.kt @@ -6,32 +6,32 @@ import android.os.Parcelable @Parcelize class A(val firstName: String) : Parcelable { - val secondName: String = "" + val secondName: String = "" - val delegated by lazy { "" } + val delegated by lazy { "" } - lateinit var lateinit: String + lateinit var lateinit: String val customGetter: String get() = "" var customSetter: String get() = "" - set(v) {} + set(v) {} } @Parcelize @Suppress("WRONG_ANNOTATION_TARGET_WITH_USE_SITE_TARGET") -class B(@IgnoredOnParcel val firstName: String) : Parcelable { +class B(@IgnoredOnParcel val firstName: String) : Parcelable { @IgnoredOnParcel var a: String = "" @field:IgnoredOnParcel - var b: String = "" + var b: String = "" @get:IgnoredOnParcel var c: String = "" @set:IgnoredOnParcel - var d: String = "" -} \ No newline at end of file + var d: String = "" +} diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/unsupportedType.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/unsupportedType.kt index df165968100..74956c162a1 100644 --- a/plugins/parcelize/parcelize-compiler/testData/diagnostics/unsupportedType.kt +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/unsupportedType.kt @@ -7,9 +7,9 @@ import android.os.Parcelable @Parcelize class User( val a: String, - val b: Any, - val c: Any?, - val d: Map, + val b: Any, + val c: Any?, + val d: Map, val e: @RawValue Any?, val f: @RawValue Map, val g: Map, diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/withoutParcelableSupertype.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/withoutParcelableSupertype.kt index 2949d0edc6c..15db9a34601 100644 --- a/plugins/parcelize/parcelize-compiler/testData/diagnostics/withoutParcelableSupertype.kt +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/withoutParcelableSupertype.kt @@ -4,7 +4,7 @@ import kotlinx.parcelize.Parcelize import android.os.Parcelable @Parcelize -class Without(val firstName: String, val secondName: String, val age: Int) +class Without(val firstName: String, val secondName: String, val age: Int) @Parcelize class With(val firstName: String, val secondName: String, val age: Int) : Parcelable diff --git a/plugins/parcelize/parcelize-compiler/testData/diagnostics/wrongAnnotationTarget.kt b/plugins/parcelize/parcelize-compiler/testData/diagnostics/wrongAnnotationTarget.kt index c6a1571ad32..c22022d3865 100644 --- a/plugins/parcelize/parcelize-compiler/testData/diagnostics/wrongAnnotationTarget.kt +++ b/plugins/parcelize/parcelize-compiler/testData/diagnostics/wrongAnnotationTarget.kt @@ -4,22 +4,22 @@ import kotlinx.parcelize.Parcelize import android.os.Parcelable @Parcelize -interface Intf : Parcelable +interface Intf : Parcelable @Parcelize -object Obj +object Obj class A { @Parcelize - companion object { + companion object { fun foo() {} } } @Parcelize -enum class Enum { +enum class Enum { WHITE, BLACK } @Parcelize -annotation class Anno +annotation class Anno diff --git a/plugins/parcelize/parcelize-compiler/tests-gen/org/jetbrains/kotlin/parcelize/test/runners/ParcelizeDiagnosticTestGenerated.java b/plugins/parcelize/parcelize-compiler/tests-gen/org/jetbrains/kotlin/parcelize/test/runners/ParcelizeDiagnosticTestGenerated.java new file mode 100644 index 00000000000..f38c2cb461f --- /dev/null +++ b/plugins/parcelize/parcelize-compiler/tests-gen/org/jetbrains/kotlin/parcelize/test/runners/ParcelizeDiagnosticTestGenerated.java @@ -0,0 +1,116 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.parcelize.test.runners; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link GenerateNewCompilerTests.kt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("plugins/parcelize/parcelize-compiler/testData/diagnostics") +@TestDataPath("$PROJECT_ROOT") +public class ParcelizeDiagnosticTestGenerated extends AbstractParcelizeDiagnosticTest { + @Test + public void testAllFilesPresentInDiagnostics() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("plugins/parcelize/parcelize-compiler/testData/diagnostics"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("constructors.kt") + public void testConstructors() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/diagnostics/constructors.kt"); + } + + @Test + @TestMetadata("customCreator.kt") + public void testCustomCreator() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/diagnostics/customCreator.kt"); + } + + @Test + @TestMetadata("customParcelers.kt") + public void testCustomParcelers() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/diagnostics/customParcelers.kt"); + } + + @Test + @TestMetadata("customWriteToParcel.kt") + public void testCustomWriteToParcel() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/diagnostics/customWriteToParcel.kt"); + } + + @Test + @TestMetadata("delegate.kt") + public void testDelegate() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/diagnostics/delegate.kt"); + } + + @Test + @TestMetadata("deprecatedAnnotations.kt") + public void testDeprecatedAnnotations() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/diagnostics/deprecatedAnnotations.kt"); + } + + @Test + @TestMetadata("emptyPrimaryConstructor.kt") + public void testEmptyPrimaryConstructor() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/diagnostics/emptyPrimaryConstructor.kt"); + } + + @Test + @TestMetadata("kt20062.kt") + public void testKt20062() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/diagnostics/kt20062.kt"); + } + + @Test + @TestMetadata("modality.kt") + public void testModality() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/diagnostics/modality.kt"); + } + + @Test + @TestMetadata("notMagicParcel.kt") + public void testNotMagicParcel() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/diagnostics/notMagicParcel.kt"); + } + + @Test + @TestMetadata("properties.kt") + public void testProperties() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/diagnostics/properties.kt"); + } + + @Test + @TestMetadata("simple.kt") + public void testSimple() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/diagnostics/simple.kt"); + } + + @Test + @TestMetadata("unsupportedType.kt") + public void testUnsupportedType() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/diagnostics/unsupportedType.kt"); + } + + @Test + @TestMetadata("withoutParcelableSupertype.kt") + public void testWithoutParcelableSupertype() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/diagnostics/withoutParcelableSupertype.kt"); + } + + @Test + @TestMetadata("wrongAnnotationTarget.kt") + public void testWrongAnnotationTarget() throws Exception { + runTest("plugins/parcelize/parcelize-compiler/testData/diagnostics/wrongAnnotationTarget.kt"); + } +} diff --git a/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/runners/AbstractParcelizeDiagnosticTest.kt b/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/runners/AbstractParcelizeDiagnosticTest.kt new file mode 100644 index 00000000000..3d32c9c028d --- /dev/null +++ b/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/runners/AbstractParcelizeDiagnosticTest.kt @@ -0,0 +1,52 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.parcelize.test.runners + +import org.jetbrains.kotlin.parcelize.test.services.ParcelizeEnvironmentConfigurator +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms +import org.jetbrains.kotlin.test.bind +import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder +import org.jetbrains.kotlin.test.builders.classicFrontendHandlersStep +import org.jetbrains.kotlin.test.builders.classicFrontendStep +import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.DIAGNOSTICS +import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.REPORT_JVM_DIAGNOSTICS_ON_FRONTEND +import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.USE_PSI_CLASS_FILES_READING +import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHandler +import org.jetbrains.kotlin.test.model.DependencyKind +import org.jetbrains.kotlin.test.model.FrontendKinds +import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerTest +import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator +import org.jetbrains.kotlin.test.services.configuration.JvmEnvironmentConfigurator + +abstract class AbstractParcelizeDiagnosticTest : AbstractKotlinCompilerTest() { + override fun TestConfigurationBuilder.configuration() { + globalDefaults { + frontend = FrontendKinds.ClassicFrontend + targetPlatform = JvmPlatforms.defaultJvmPlatform + dependencyKind = DependencyKind.Source + } + + defaultDirectives { + +USE_PSI_CLASS_FILES_READING + +REPORT_JVM_DIAGNOSTICS_ON_FRONTEND + DIAGNOSTICS with "-UNUSED_PARAMETER" + } + + enableMetaInfoHandler() + + useConfigurators( + ::CommonEnvironmentConfigurator, + ::JvmEnvironmentConfigurator, + ::ParcelizeEnvironmentConfigurator.bind(false) + ) + + classicFrontendStep() + + classicFrontendHandlersStep { + useHandlers(::ClassicDiagnosticsHandler) + } + } +}