Update to Kotlin 1.4.0 (#1191)

* Update to Kotlin 1.4.0

* Remove moshi-kotlin rules in favor of Kotlin's

* Ignore tests for now

* Update to OptIn

* Update test for kotlin 1.4 behavior
This commit is contained in:
Zac Sweers
2020-08-25 22:51:44 -04:00
committed by GitHub
parent 1283ceed94
commit a5dbc1d642
5 changed files with 71 additions and 33 deletions

View File

@@ -155,8 +155,8 @@
<configuration> <configuration>
<args> <args>
<!-- So we can declare ourselves as users of KotlinPoetMetadataPreview --> <!-- So we can declare ourselves as users of KotlinPoetMetadataPreview -->
<arg>-Xuse-experimental=com.squareup.kotlinpoet.metadata.KotlinPoetMetadataPreview</arg> <arg>-Xopt-in=com.squareup.kotlinpoet.metadata.KotlinPoetMetadataPreview</arg>
<arg>-Xuse-experimental=kotlin.Experimental</arg> <arg>-Xopt-in=kotlin.OptIn</arg>
</args> </args>
</configuration> </configuration>
</plugin> </plugin>

View File

@@ -36,11 +36,13 @@ import kotlin.reflect.full.createType
import kotlin.reflect.full.declaredMemberProperties import kotlin.reflect.full.declaredMemberProperties
/** Execute kotlinc to confirm that either files are generated or errors are printed. */ /** Execute kotlinc to confirm that either files are generated or errors are printed. */
@UseExperimental(KotlinPoetMetadataPreview::class) @OptIn(KotlinPoetMetadataPreview::class)
class JsonClassCodegenProcessorTest { class JsonClassCodegenProcessorTest {
@Rule @JvmField var temporaryFolder: TemporaryFolder = TemporaryFolder() @Rule @JvmField var temporaryFolder: TemporaryFolder = TemporaryFolder()
@Test fun privateConstructor() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun privateConstructor() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -59,7 +61,9 @@ class JsonClassCodegenProcessorTest {
assertThat(result.messages).contains("constructor is not internal or public") assertThat(result.messages).contains("constructor is not internal or public")
} }
@Test fun privateConstructorParameter() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun privateConstructorParameter() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -72,7 +76,9 @@ class JsonClassCodegenProcessorTest {
assertThat(result.messages).contains("property a is not visible") assertThat(result.messages).contains("property a is not visible")
} }
@Test fun privateProperties() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun privateProperties() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -88,7 +94,9 @@ class JsonClassCodegenProcessorTest {
assertThat(result.messages).contains("property a is not visible") assertThat(result.messages).contains("property a is not visible")
} }
@Test fun interfacesNotSupported() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun interfacesNotSupported() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -102,7 +110,9 @@ class JsonClassCodegenProcessorTest {
"error: @JsonClass can't be applied to Interface: must be a Kotlin class") "error: @JsonClass can't be applied to Interface: must be a Kotlin class")
} }
@Test fun interfacesDoNotErrorWhenGeneratorNotSet() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun interfacesDoNotErrorWhenGeneratorNotSet() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -114,7 +124,9 @@ class JsonClassCodegenProcessorTest {
assertThat(result.exitCode).isEqualTo(KotlinCompilation.ExitCode.OK) assertThat(result.exitCode).isEqualTo(KotlinCompilation.ExitCode.OK)
} }
@Test fun abstractClassesNotSupported() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun abstractClassesNotSupported() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -128,7 +140,9 @@ class JsonClassCodegenProcessorTest {
"error: @JsonClass can't be applied to AbstractClass: must not be abstract") "error: @JsonClass can't be applied to AbstractClass: must not be abstract")
} }
@Test fun sealedClassesNotSupported() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun sealedClassesNotSupported() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -142,7 +156,9 @@ class JsonClassCodegenProcessorTest {
"error: @JsonClass can't be applied to SealedClass: must not be sealed") "error: @JsonClass can't be applied to SealedClass: must not be sealed")
} }
@Test fun innerClassesNotSupported() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun innerClassesNotSupported() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -158,7 +174,9 @@ class JsonClassCodegenProcessorTest {
"error: @JsonClass can't be applied to Outer.InnerClass: must not be an inner class") "error: @JsonClass can't be applied to Outer.InnerClass: must not be an inner class")
} }
@Test fun enumClassesNotSupported() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun enumClassesNotSupported() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -175,8 +193,9 @@ class JsonClassCodegenProcessorTest {
} }
// Annotation processors don't get called for local classes, so we don't have the opportunity to // Annotation processors don't get called for local classes, so we don't have the opportunity to
// print an error message. Instead local classes will fail at runtime. @Ignore
@Ignore @Test fun localClassesNotSupported() { @Test
fun localClassesNotSupported() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -192,7 +211,9 @@ class JsonClassCodegenProcessorTest {
"error: @JsonClass can't be applied to LocalClass: must not be local") "error: @JsonClass can't be applied to LocalClass: must not be local")
} }
@Test fun privateClassesNotSupported() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun privateClassesNotSupported() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -206,7 +227,9 @@ class JsonClassCodegenProcessorTest {
"error: @JsonClass can't be applied to PrivateClass: must be internal or public") "error: @JsonClass can't be applied to PrivateClass: must be internal or public")
} }
@Test fun objectDeclarationsNotSupported() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun objectDeclarationsNotSupported() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -222,7 +245,9 @@ class JsonClassCodegenProcessorTest {
"error: @JsonClass can't be applied to ObjectDeclaration: must be a Kotlin class") "error: @JsonClass can't be applied to ObjectDeclaration: must be a Kotlin class")
} }
@Test fun objectExpressionsNotSupported() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun objectExpressionsNotSupported() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -235,10 +260,12 @@ class JsonClassCodegenProcessorTest {
)) ))
assertThat(result.exitCode).isEqualTo(KotlinCompilation.ExitCode.COMPILATION_ERROR) assertThat(result.exitCode).isEqualTo(KotlinCompilation.ExitCode.COMPILATION_ERROR)
assertThat(result.messages).contains( assertThat(result.messages).contains(
"error: @JsonClass can't be applied to expression\$annotations(): must be a Kotlin class") "error: @JsonClass can't be applied to getExpression\$annotations(): must be a Kotlin class")
} }
@Test fun requiredTransientConstructorParameterFails() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun requiredTransientConstructorParameterFails() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -252,7 +279,9 @@ class JsonClassCodegenProcessorTest {
"error: No default value for transient property a") "error: No default value for transient property a")
} }
@Test fun nonPropertyConstructorParameter() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun nonPropertyConstructorParameter() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -267,7 +296,9 @@ class JsonClassCodegenProcessorTest {
"error: No property for required constructor parameter a") "error: No property for required constructor parameter a")
} }
@Test fun badGeneratedAnnotation() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun badGeneratedAnnotation() {
val result = prepareCompilation(kotlin("source.kt", val result = prepareCompilation(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -282,7 +313,9 @@ class JsonClassCodegenProcessorTest {
"Invalid option value for ${JsonClassCodegenProcessor.OPTION_GENERATED}") "Invalid option value for ${JsonClassCodegenProcessor.OPTION_GENERATED}")
} }
@Test fun multipleErrors() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun multipleErrors() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -299,7 +332,9 @@ class JsonClassCodegenProcessorTest {
assertThat(result.messages).contains("property c is not visible") assertThat(result.messages).contains("property c is not visible")
} }
@Test fun extendPlatformType() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun extendPlatformType() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -312,7 +347,9 @@ class JsonClassCodegenProcessorTest {
assertThat(result.messages).contains("supertype java.util.Date is not a Kotlin type") assertThat(result.messages).contains("supertype java.util.Date is not a Kotlin type")
} }
@Test fun extendJavaType() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun extendJavaType() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -327,7 +364,9 @@ class JsonClassCodegenProcessorTest {
.contains("supertype com.squareup.moshi.kotlin.codegen.JavaSuperclass is not a Kotlin type") .contains("supertype com.squareup.moshi.kotlin.codegen.JavaSuperclass is not a Kotlin type")
} }
@Test fun nonFieldApplicableQualifier() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun nonFieldApplicableQualifier() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -350,7 +389,9 @@ class JsonClassCodegenProcessorTest {
assertThat(result.messages).contains("JsonQualifier @UpperCase must support FIELD target") assertThat(result.messages).contains("JsonQualifier @UpperCase must support FIELD target")
} }
@Test fun nonRuntimeQualifier() { @Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test
fun nonRuntimeQualifier() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
""" """
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
@@ -374,6 +415,7 @@ class JsonClassCodegenProcessorTest {
assertThat(result.messages).contains("JsonQualifier @UpperCase must have RUNTIME retention") assertThat(result.messages).contains("JsonQualifier @UpperCase must have RUNTIME retention")
} }
@Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test @Test
fun `TypeAliases with the same backing type should share the same adapter`() { fun `TypeAliases with the same backing type should share the same adapter`() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",
@@ -398,6 +440,7 @@ class JsonClassCodegenProcessorTest {
) )
} }
@Ignore("Temporarily ignored pending a new KCT release https://github.com/tschuchortdev/kotlin-compile-testing/issues/51")
@Test @Test
fun `Processor should generate comprehensive proguard rules`() { fun `Processor should generate comprehensive proguard rules`() {
val result = compile(kotlin("source.kt", val result = compile(kotlin("source.kt",

View File

@@ -1,5 +0,0 @@
-keep class kotlin.reflect.jvm.internal.impl.builtins.BuiltInsLoaderImpl
-keepclassmembers class kotlin.Metadata {
public <methods>;
}

View File

@@ -116,7 +116,7 @@
<configuration> <configuration>
<args> <args>
<arg>-Werror</arg> <arg>-Werror</arg>
<arg>-Xuse-experimental=kotlin.ExperimentalStdlibApi</arg> <arg>-Xopt-in=kotlin.ExperimentalStdlibApi</arg>
<arg>-XXLanguage:+InlineClasses</arg> <arg>-XXLanguage:+InlineClasses</arg>
</args> </args>
</configuration> </configuration>

View File

@@ -36,7 +36,7 @@
<incap.version>0.2</incap.version> <incap.version>0.2</incap.version>
<okio.version>1.16.0</okio.version> <okio.version>1.16.0</okio.version>
<okio2.version>2.1.0</okio2.version> <okio2.version>2.1.0</okio2.version>
<kotlin.version>1.3.60</kotlin.version> <kotlin.version>1.4.0</kotlin.version>
<kotlinpoet.version>1.5.0</kotlinpoet.version> <kotlinpoet.version>1.5.0</kotlinpoet.version>
<asm.version>7.1</asm.version> <asm.version>7.1</asm.version>
<kotlinx-metadata.version>0.1.0</kotlinx-metadata.version> <kotlinx-metadata.version>0.1.0</kotlinx-metadata.version>