diff options
author | Zac Sweers <zac.sweers@gmail.com> | 2023-07-14 10:47:50 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-14 10:47:50 -0400 |
commit | a5bc35277e2a8898f215dda1fc4085b1303ed675 (patch) | |
tree | 4d5190963f82b0976bcd88ce8b38bcb44ee3e08a /interop/kotlinx-metadata | |
parent | 90841a5fd8c3be9624726db190283e218ab4dd19 (diff) | |
download | kotlinpoet-a5bc35277e2a8898f215dda1fc4085b1303ed675.tar.gz |
Update kotlinx-metadata to 0.7.0 (#1627)
Diffstat (limited to 'interop/kotlinx-metadata')
14 files changed, 229 insertions, 660 deletions
diff --git a/interop/kotlinx-metadata/api/kotlinx-metadata.api b/interop/kotlinx-metadata/api/kotlinx-metadata.api index 6ea962f9..f780eae0 100644 --- a/interop/kotlinx-metadata/api/kotlinx-metadata.api +++ b/interop/kotlinx-metadata/api/kotlinx-metadata.api @@ -1,97 +1,3 @@ -public final class com/squareup/kotlinpoet/metadata/FlagsKt { - public static final fun getDeclaresDefaultValue (Lkotlinx/metadata/KmValueParameter;)Z - public static final fun getGetterPropertyAccessorFlags (Lkotlinx/metadata/KmProperty;)Ljava/util/Set; - public static final fun getHasAnnotations (I)Z - public static final fun getHasConstant (Lkotlinx/metadata/KmProperty;)Z - public static final fun getHasGetter (Lkotlinx/metadata/KmProperty;)Z - public static final fun getHasSetter (Lkotlinx/metadata/KmProperty;)Z - public static final fun getPropertyAccessorFlags (I)Ljava/util/Set; - public static final fun getSetterPropertyAccessorFlags (Lkotlinx/metadata/KmProperty;)Ljava/util/Set; - public static final fun isAbstract (I)Z - public static final fun isAnnotation (Lkotlinx/metadata/KmClass;)Z - public static final fun isAnnotationClass (I)Z - public static final fun isClass (I)Z - public static final fun isClass (Lkotlinx/metadata/KmClass;)Z - public static final fun isCompanionObject (Lkotlinx/metadata/KmClass;)Z - public static final fun isCompanionObjectClass (I)Z - public static final fun isConst (Lkotlinx/metadata/KmProperty;)Z - public static final fun isCrossInline (Lkotlinx/metadata/KmValueParameter;)Z - public static final fun isData (Lkotlinx/metadata/KmClass;)Z - public static final fun isDataClass (I)Z - public static final fun isDeclaration (Lkotlinx/metadata/KmFunction;)Z - public static final fun isDeclaration (Lkotlinx/metadata/KmProperty;)Z - public static final fun isDeclarationFunction (I)Z - public static final fun isDelegated (Lkotlinx/metadata/KmProperty;)Z - public static final fun isDelegation (Lkotlinx/metadata/KmFunction;)Z - public static final fun isDelegation (Lkotlinx/metadata/KmProperty;)Z - public static final fun isDelegationFunction (I)Z - public static final fun isEnum (Lkotlinx/metadata/KmClass;)Z - public static final fun isEnumClass (I)Z - public static final fun isEnumEntry (Lkotlinx/metadata/KmClass;)Z - public static final fun isEnumEntryClass (I)Z - public static final fun isExpect (Lkotlinx/metadata/KmClass;)Z - public static final fun isExpect (Lkotlinx/metadata/KmFunction;)Z - public static final fun isExpect (Lkotlinx/metadata/KmProperty;)Z - public static final fun isExpectClass (I)Z - public static final fun isExpectFunction (I)Z - public static final fun isExternal (Lkotlinx/metadata/KmClass;)Z - public static final fun isExternal (Lkotlinx/metadata/KmFunction;)Z - public static final fun isExternal (Lkotlinx/metadata/KmProperty;)Z - public static final fun isExternalClass (I)Z - public static final fun isExternalFunction (I)Z - public static final fun isFakeOverride (Lkotlinx/metadata/KmFunction;)Z - public static final fun isFakeOverride (Lkotlinx/metadata/KmProperty;)Z - public static final fun isFakeOverrideFunction (I)Z - public static final fun isFakeOverrideProperty (I)Z - public static final fun isFinal (I)Z - public static final fun isFun (I)Z - public static final fun isFun (Lkotlinx/metadata/KmClass;)Z - public static final fun isInfix (Lkotlinx/metadata/KmFunction;)Z - public static final fun isInfixFunction (I)Z - public static final fun isInline (Lkotlinx/metadata/KmFunction;)Z - public static final fun isInlineFunction (I)Z - public static final fun isInner (Lkotlinx/metadata/KmClass;)Z - public static final fun isInnerClass (I)Z - public static final fun isInterface (I)Z - public static final fun isInterface (Lkotlinx/metadata/KmClass;)Z - public static final fun isInternal (I)Z - public static final fun isLateinit (Lkotlinx/metadata/KmProperty;)Z - public static final fun isLocal (I)Z - public static final fun isNoInline (Lkotlinx/metadata/KmValueParameter;)Z - public static final fun isNullable (Lkotlinx/metadata/KmType;)Z - public static final fun isNullableType (I)Z - public static final fun isObject (Lkotlinx/metadata/KmClass;)Z - public static final fun isObjectClass (I)Z - public static final fun isOpen (I)Z - public static final fun isOperator (Lkotlinx/metadata/KmFunction;)Z - public static final fun isOperatorFunction (I)Z - public static final fun isPrimary (Lkotlinx/metadata/KmConstructor;)Z - public static final fun isPrimaryConstructor (I)Z - public static final fun isPrivate (I)Z - public static final fun isPrivate_to_this (I)Z - public static final fun isPropertyAccessorExternal (I)Z - public static final fun isPropertyAccessorInline (I)Z - public static final fun isPropertyAccessorNotDefault (I)Z - public static final fun isProtected (I)Z - public static final fun isPublic (I)Z - public static final fun isReified (Lkotlinx/metadata/KmTypeParameter;)Z - public static final fun isSealed (I)Z - public static final fun isSecondary (Lkotlinx/metadata/KmConstructor;)Z - public static final fun isSuspend (Lkotlinx/metadata/KmFunction;)Z - public static final fun isSuspend (Lkotlinx/metadata/KmType;)Z - public static final fun isSuspendFunction (I)Z - public static final fun isSuspendType (I)Z - public static final fun isSynthesized (Lkotlinx/metadata/KmFunction;)Z - public static final fun isSynthesized (Lkotlinx/metadata/KmProperty;)Z - public static final fun isSynthesizedFunction (I)Z - public static final fun isTailRec (Lkotlinx/metadata/KmFunction;)Z - public static final fun isTailRecFunction (I)Z - public static final fun isVal (Lkotlinx/metadata/KmProperty;)Z - public static final fun isValue (Lkotlinx/metadata/KmClass;)Z - public static final fun isValueClass (I)Z - public static final fun isVar (Lkotlinx/metadata/KmProperty;)Z -} - public final class com/squareup/kotlinpoet/metadata/KotlinPoetMetadata { public static final fun readKotlinClassMetadata (Lkotlin/Metadata;)Lkotlinx/metadata/jvm/KotlinClassMetadata; public static final fun toKmClass (Ljava/lang/Class;)Lkotlinx/metadata/KmClass; @@ -103,15 +9,6 @@ public final class com/squareup/kotlinpoet/metadata/KotlinPoetMetadata { public abstract interface annotation class com/squareup/kotlinpoet/metadata/KotlinPoetMetadataPreview : java/lang/annotation/Annotation { } -public final class com/squareup/kotlinpoet/metadata/PropertyAccessorFlag : java/lang/Enum { - public static final field IS_EXTERNAL Lcom/squareup/kotlinpoet/metadata/PropertyAccessorFlag; - public static final field IS_INLINE Lcom/squareup/kotlinpoet/metadata/PropertyAccessorFlag; - public static final field IS_NOT_DEFAULT Lcom/squareup/kotlinpoet/metadata/PropertyAccessorFlag; - public static fun getEntries ()Lkotlin/enums/EnumEntries; - public static fun valueOf (Ljava/lang/String;)Lcom/squareup/kotlinpoet/metadata/PropertyAccessorFlag; - public static fun values ()[Lcom/squareup/kotlinpoet/metadata/PropertyAccessorFlag; -} - public final class com/squareup/kotlinpoet/metadata/classinspectors/ElementsClassInspector : com/squareup/kotlinpoet/metadata/specs/ClassInspector { public static final field Companion Lcom/squareup/kotlinpoet/metadata/classinspectors/ElementsClassInspector$Companion; public synthetic fun <init> (Ljavax/lang/model/util/Elements;Ljavax/lang/model/util/Types;Lkotlin/jvm/internal/DefaultConstructorMarker;)V diff --git a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/Flags.kt b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/Flags.kt deleted file mode 100644 index 4745dda0..00000000 --- a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/Flags.kt +++ /dev/null @@ -1,338 +0,0 @@ -/* - * Copyright (C) 2019 Square, Inc. - * - * 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 - * - * https://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. - */ -@file:Suppress("unused") - -package com.squareup.kotlinpoet.metadata - -import kotlinx.metadata.Flag -import kotlinx.metadata.Flags -import kotlinx.metadata.KmClass -import kotlinx.metadata.KmConstructor -import kotlinx.metadata.KmFunction -import kotlinx.metadata.KmProperty -import kotlinx.metadata.KmType -import kotlinx.metadata.KmTypeParameter -import kotlinx.metadata.KmValueParameter - -// Common flags for any element with flags. -@KotlinPoetMetadataPreview -public val Flags.hasAnnotations: Boolean get() = Flag.HAS_ANNOTATIONS(this) - -@KotlinPoetMetadataPreview -public val Flags.isAbstract: Boolean get() = Flag.IS_ABSTRACT(this) - -@KotlinPoetMetadataPreview -public val Flags.isFinal: Boolean get() = Flag.IS_FINAL(this) - -@KotlinPoetMetadataPreview -public val Flags.isInternal: Boolean get() = Flag.IS_INTERNAL(this) - -@KotlinPoetMetadataPreview -public val Flags.isLocal: Boolean get() = Flag.IS_LOCAL(this) - -@KotlinPoetMetadataPreview -public val Flags.isOpen: Boolean get() = Flag.IS_OPEN(this) - -@KotlinPoetMetadataPreview -public val Flags.isPrivate: Boolean get() = Flag.IS_PRIVATE(this) - -@KotlinPoetMetadataPreview -public val Flags.isPrivate_to_this: Boolean get() = Flag.IS_PRIVATE_TO_THIS(this) - -@KotlinPoetMetadataPreview -public val Flags.isProtected: Boolean get() = Flag.IS_PROTECTED(this) - -@KotlinPoetMetadataPreview -public val Flags.isPublic: Boolean get() = Flag.IS_PUBLIC(this) - -@KotlinPoetMetadataPreview -public val Flags.isSealed: Boolean get() = Flag.IS_SEALED(this) - -// Type flags. -@KotlinPoetMetadataPreview -public val Flags.isNullableType: Boolean get() = Flag.Type.IS_NULLABLE(this) - -@KotlinPoetMetadataPreview -public val Flags.isSuspendType: Boolean get() = Flag.Type.IS_SUSPEND(this) - -// Class flags. -@KotlinPoetMetadataPreview -public val Flags.isAnnotationClass: Boolean get() = Flag.Class.IS_ANNOTATION_CLASS(this) - -@KotlinPoetMetadataPreview -public val Flags.isClass: Boolean get() = Flag.Class.IS_CLASS(this) - -@KotlinPoetMetadataPreview -public val Flags.isCompanionObjectClass: Boolean get() = Flag.Class.IS_COMPANION_OBJECT(this) - -@KotlinPoetMetadataPreview -public val Flags.isDataClass: Boolean get() = Flag.Class.IS_DATA(this) - -@KotlinPoetMetadataPreview -public val Flags.isEnumClass: Boolean get() = Flag.Class.IS_ENUM_CLASS(this) - -@KotlinPoetMetadataPreview -public val Flags.isEnumEntryClass: Boolean get() = Flag.Class.IS_ENUM_ENTRY(this) - -@KotlinPoetMetadataPreview -public val Flags.isExpectClass: Boolean get() = Flag.Class.IS_EXPECT(this) - -@KotlinPoetMetadataPreview -public val Flags.isExternalClass: Boolean get() = Flag.Class.IS_EXTERNAL(this) - -@KotlinPoetMetadataPreview -public val Flags.isValueClass: Boolean get() = Flag.Class.IS_VALUE(this) - -@KotlinPoetMetadataPreview -public val Flags.isInnerClass: Boolean get() = Flag.Class.IS_INNER(this) - -@KotlinPoetMetadataPreview -public val Flags.isObjectClass: Boolean get() = Flag.Class.IS_OBJECT(this) - -@KotlinPoetMetadataPreview -public val Flags.isInterface: Boolean get() = Flag.Class.IS_INTERFACE(this) - -@KotlinPoetMetadataPreview -public val Flags.isFun: Boolean get() = Flag.Class.IS_FUN(this) - -@KotlinPoetMetadataPreview -public val KmClass.isAnnotation: Boolean get() = flags.isAnnotationClass - -@KotlinPoetMetadataPreview -public val KmClass.isClass: Boolean get() = flags.isClass - -@KotlinPoetMetadataPreview -public val KmClass.isCompanionObject: Boolean get() = flags.isCompanionObjectClass - -@KotlinPoetMetadataPreview -public val KmClass.isData: Boolean get() = flags.isDataClass - -@KotlinPoetMetadataPreview -public val KmClass.isEnum: Boolean get() = flags.isEnumClass - -@KotlinPoetMetadataPreview -public val KmClass.isEnumEntry: Boolean get() = flags.isEnumEntryClass - -@KotlinPoetMetadataPreview -public val KmClass.isExpect: Boolean get() = flags.isExpectClass - -@KotlinPoetMetadataPreview -public val KmClass.isExternal: Boolean get() = flags.isExternalClass - -@KotlinPoetMetadataPreview -public val KmClass.isValue: Boolean get() = flags.isValueClass - -@KotlinPoetMetadataPreview -public val KmClass.isInner: Boolean get() = flags.isInnerClass - -@KotlinPoetMetadataPreview -public val KmClass.isObject: Boolean get() = flags.isObjectClass - -@KotlinPoetMetadataPreview -public val KmClass.isInterface: Boolean get() = flags.isInterface - -@KotlinPoetMetadataPreview -public val KmClass.isFun: Boolean get() = flags.isFun - -@KotlinPoetMetadataPreview -public val KmType.isSuspend: Boolean get() = flags.isSuspendType - -@KotlinPoetMetadataPreview -public val KmType.isNullable: Boolean get() = flags.isNullableType - -// Constructor flags. -@KotlinPoetMetadataPreview -public val Flags.isPrimaryConstructor: Boolean get() = !Flag.Constructor.IS_SECONDARY(this) - -@KotlinPoetMetadataPreview -public val KmConstructor.isPrimary: Boolean get() = flags.isPrimaryConstructor - -@KotlinPoetMetadataPreview -public val KmConstructor.isSecondary: Boolean get() = !isPrimary - -// Function flags. -@KotlinPoetMetadataPreview -public val Flags.isDeclarationFunction: Boolean get() = Flag.Function.IS_DECLARATION(this) - -@KotlinPoetMetadataPreview -public val Flags.isFakeOverrideFunction: Boolean get() = Flag.Function.IS_FAKE_OVERRIDE(this) - -@KotlinPoetMetadataPreview -public val Flags.isDelegationFunction: Boolean get() = Flag.Function.IS_DELEGATION(this) - -@KotlinPoetMetadataPreview -public val Flags.isSynthesizedFunction: Boolean get() = Flag.Function.IS_SYNTHESIZED(this) - -@KotlinPoetMetadataPreview -public val Flags.isOperatorFunction: Boolean get() = Flag.Function.IS_OPERATOR(this) - -@KotlinPoetMetadataPreview -public val Flags.isInfixFunction: Boolean get() = Flag.Function.IS_INFIX(this) - -@KotlinPoetMetadataPreview -public val Flags.isInlineFunction: Boolean get() = Flag.Function.IS_INLINE(this) - -@KotlinPoetMetadataPreview -public val Flags.isTailRecFunction: Boolean get() = Flag.Function.IS_TAILREC(this) - -@KotlinPoetMetadataPreview -public val Flags.isExternalFunction: Boolean get() = Flag.Function.IS_EXTERNAL(this) - -@KotlinPoetMetadataPreview -public val Flags.isSuspendFunction: Boolean get() = Flag.Function.IS_SUSPEND(this) - -@KotlinPoetMetadataPreview -public val Flags.isExpectFunction: Boolean get() = Flag.Function.IS_EXPECT(this) - -@KotlinPoetMetadataPreview -public val KmFunction.isDeclaration: Boolean get() = flags.isDeclarationFunction - -@KotlinPoetMetadataPreview -public val KmFunction.isFakeOverride: Boolean get() = flags.isFakeOverrideFunction - -@KotlinPoetMetadataPreview -public val KmFunction.isDelegation: Boolean get() = flags.isDelegationFunction - -@KotlinPoetMetadataPreview -public val KmFunction.isSynthesized: Boolean get() = flags.isSynthesizedFunction - -@KotlinPoetMetadataPreview -public val KmFunction.isOperator: Boolean get() = flags.isOperatorFunction - -@KotlinPoetMetadataPreview -public val KmFunction.isInfix: Boolean get() = flags.isInfixFunction - -@KotlinPoetMetadataPreview -public val KmFunction.isInline: Boolean get() = flags.isInlineFunction - -@KotlinPoetMetadataPreview -public val KmFunction.isTailRec: Boolean get() = flags.isTailRecFunction - -@KotlinPoetMetadataPreview -public val KmFunction.isExternal: Boolean get() = flags.isExternalFunction - -@KotlinPoetMetadataPreview -public val KmFunction.isSuspend: Boolean get() = flags.isSuspendFunction - -@KotlinPoetMetadataPreview -public val KmFunction.isExpect: Boolean get() = flags.isExpectFunction - -// Parameter flags. -@KotlinPoetMetadataPreview -public val KmValueParameter.declaresDefaultValue: Boolean get() = - Flag.ValueParameter.DECLARES_DEFAULT_VALUE(flags) - -@KotlinPoetMetadataPreview -public val KmValueParameter.isCrossInline: Boolean get() = Flag.ValueParameter.IS_CROSSINLINE(flags) - -@KotlinPoetMetadataPreview -public val KmValueParameter.isNoInline: Boolean get() = Flag.ValueParameter.IS_NOINLINE(flags) - -// Property flags. -@KotlinPoetMetadataPreview -public val Flags.isFakeOverrideProperty: Boolean get() = Flag.Property.IS_FAKE_OVERRIDE(this) - -@KotlinPoetMetadataPreview -public val KmProperty.hasConstant: Boolean get() = Flag.Property.HAS_CONSTANT(flags) - -@KotlinPoetMetadataPreview -public val KmProperty.hasGetter: Boolean get() = Flag.Property.HAS_GETTER(flags) - -@KotlinPoetMetadataPreview -public val KmProperty.hasSetter: Boolean get() = Flag.Property.HAS_SETTER(flags) - -@KotlinPoetMetadataPreview -public val KmProperty.isConst: Boolean get() = Flag.Property.IS_CONST(flags) - -@KotlinPoetMetadataPreview -public val KmProperty.isDeclaration: Boolean get() = Flag.Property.IS_DECLARATION(flags) - -@KotlinPoetMetadataPreview -public val KmProperty.isDelegated: Boolean get() = Flag.Property.IS_DELEGATED(flags) - -@KotlinPoetMetadataPreview -public val KmProperty.isDelegation: Boolean get() = Flag.Property.IS_DELEGATION(flags) - -@KotlinPoetMetadataPreview -public val KmProperty.isExpect: Boolean get() = Flag.Property.IS_EXPECT(flags) - -@KotlinPoetMetadataPreview -public val KmProperty.isExternal: Boolean get() = Flag.Property.IS_EXTERNAL(flags) - -@KotlinPoetMetadataPreview -public val KmProperty.isFakeOverride: Boolean get() = flags.isFakeOverrideProperty - -@KotlinPoetMetadataPreview -public val KmProperty.isLateinit: Boolean get() = Flag.Property.IS_LATEINIT(flags) - -@KotlinPoetMetadataPreview -public val KmProperty.isSynthesized: Boolean get() = Flag.Property.IS_SYNTHESIZED(flags) - -@KotlinPoetMetadataPreview -public val KmProperty.isVar: Boolean get() = Flag.Property.IS_VAR(flags) - -@KotlinPoetMetadataPreview -public val KmProperty.isVal: Boolean get() = !isVar - -// Property Accessor Flags -@KotlinPoetMetadataPreview -public val Flags.isPropertyAccessorExternal: Boolean - get() = Flag.PropertyAccessor.IS_EXTERNAL(this) - -@KotlinPoetMetadataPreview -public val Flags.isPropertyAccessorInline: Boolean - get() = Flag.PropertyAccessor.IS_INLINE(this) - -@KotlinPoetMetadataPreview -public val Flags.isPropertyAccessorNotDefault: Boolean - get() = Flag.PropertyAccessor.IS_NOT_DEFAULT(this) - -// TypeParameter flags. -@KotlinPoetMetadataPreview -public val KmTypeParameter.isReified: Boolean get() = Flag.TypeParameter.IS_REIFIED(flags) - -// Property Accessor Flags -public enum class PropertyAccessorFlag { - IS_EXTERNAL, - IS_INLINE, - IS_NOT_DEFAULT, -} - -@KotlinPoetMetadataPreview -public val KmProperty.setterPropertyAccessorFlags: Set<PropertyAccessorFlag> - get() = setterFlags.propertyAccessorFlags - -@KotlinPoetMetadataPreview -public val KmProperty.getterPropertyAccessorFlags: Set<PropertyAccessorFlag> - get() = getterFlags.propertyAccessorFlags - -@KotlinPoetMetadataPreview -public val Flags.propertyAccessorFlags: Set<PropertyAccessorFlag> - get() = setOf { - if (Flag.PropertyAccessor.IS_EXTERNAL(this@propertyAccessorFlags)) { - add(PropertyAccessorFlag.IS_EXTERNAL) - } - if (Flag.PropertyAccessor.IS_INLINE(this@propertyAccessorFlags)) { - add(PropertyAccessorFlag.IS_INLINE) - } - if (Flag.PropertyAccessor.IS_NOT_DEFAULT(this@propertyAccessorFlags)) { - add(PropertyAccessorFlag.IS_NOT_DEFAULT) - } - } - -internal inline fun <E> setOf(body: MutableSet<E>.() -> Unit): Set<E> { - return mutableSetOf<E>().apply(body).toSet() -} diff --git a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/KotlinPoetMetadata.kt b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/KotlinPoetMetadata.kt index eafa0490..bae24747 100644 --- a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/KotlinPoetMetadata.kt +++ b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/KotlinPoetMetadata.kt @@ -50,7 +50,7 @@ public fun TypeElement.toKmClass(): KmClass = readMetadata(::getAnnotation).toKm @KotlinPoetMetadataPreview public fun Metadata.toKmClass(): KmClass { return toKotlinClassMetadata<KotlinClassMetadata.Class>() - .toKmClass() + .kmClass } @KotlinPoetMetadataPreview diff --git a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/classinspectors/ClassInspectorUtil.kt b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/classinspectors/ClassInspectorUtil.kt index d9caa834..1bbf6945 100644 --- a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/classinspectors/ClassInspectorUtil.kt +++ b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/classinspectors/ClassInspectorUtil.kt @@ -38,12 +38,12 @@ import com.squareup.kotlinpoet.TypeName import com.squareup.kotlinpoet.asClassName import com.squareup.kotlinpoet.joinToCode import com.squareup.kotlinpoet.metadata.KotlinPoetMetadataPreview -import com.squareup.kotlinpoet.metadata.isConst import com.squareup.kotlinpoet.metadata.specs.ClassInspector import java.util.Collections import java.util.TreeSet import kotlinx.metadata.KmProperty -import kotlinx.metadata.isLocal +import kotlinx.metadata.isConst +import kotlinx.metadata.isLocalClassName import org.jetbrains.annotations.NotNull import org.jetbrains.annotations.Nullable @@ -195,7 +195,7 @@ internal object ClassInspectorUtil { * with those. */ fun createClassName(kotlinMetadataName: String): ClassName { - require(!kotlinMetadataName.isLocal) { + require(!kotlinMetadataName.isLocalClassName()) { "Local/anonymous classes are not supported!" } // Top-level: package/of/class/MyClass diff --git a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/classinspectors/ElementsClassInspector.kt b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/classinspectors/ElementsClassInspector.kt index cbbea286..0282913c 100644 --- a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/classinspectors/ElementsClassInspector.kt +++ b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/classinspectors/ElementsClassInspector.kt @@ -32,14 +32,7 @@ import com.squareup.kotlinpoet.metadata.KotlinPoetMetadataPreview import com.squareup.kotlinpoet.metadata.classinspectors.ClassInspectorUtil.JAVA_DEPRECATED import com.squareup.kotlinpoet.metadata.classinspectors.ClassInspectorUtil.JVM_NAME import com.squareup.kotlinpoet.metadata.classinspectors.ClassInspectorUtil.filterOutNullabilityAnnotations -import com.squareup.kotlinpoet.metadata.hasAnnotations -import com.squareup.kotlinpoet.metadata.hasConstant -import com.squareup.kotlinpoet.metadata.isAnnotation -import com.squareup.kotlinpoet.metadata.isCompanionObject -import com.squareup.kotlinpoet.metadata.isConst import com.squareup.kotlinpoet.metadata.isDeclaration -import com.squareup.kotlinpoet.metadata.isSynthesized -import com.squareup.kotlinpoet.metadata.isValue import com.squareup.kotlinpoet.metadata.readKotlinClassMetadata import com.squareup.kotlinpoet.metadata.specs.ClassData import com.squareup.kotlinpoet.metadata.specs.ClassInspector @@ -74,9 +67,14 @@ import javax.lang.model.util.ElementFilter import javax.lang.model.util.Elements import javax.lang.model.util.Types import kotlin.LazyThreadSafetyMode.NONE +import kotlinx.metadata.ClassKind import kotlinx.metadata.KmClass import kotlinx.metadata.KmDeclarationContainer import kotlinx.metadata.KmPackage +import kotlinx.metadata.hasAnnotations +import kotlinx.metadata.hasConstant +import kotlinx.metadata.isConst +import kotlinx.metadata.isValue import kotlinx.metadata.jvm.JvmFieldSignature import kotlinx.metadata.jvm.JvmMethodSignature import kotlinx.metadata.jvm.KotlinClassMetadata @@ -85,6 +83,7 @@ import kotlinx.metadata.jvm.getterSignature import kotlinx.metadata.jvm.setterSignature import kotlinx.metadata.jvm.signature import kotlinx.metadata.jvm.syntheticMethodForAnnotations +import kotlinx.metadata.kind private typealias ElementsModifier = javax.lang.model.element.Modifier @@ -117,8 +116,8 @@ public class ElementsClassInspector private constructor( val metadata = typeElement.getAnnotation(Metadata::class.java) return when (val kotlinClassMetadata = metadata.readKotlinClassMetadata()) { - is KotlinClassMetadata.Class -> kotlinClassMetadata.toKmClass() - is KotlinClassMetadata.FileFacade -> kotlinClassMetadata.toKmPackage() + is KotlinClassMetadata.Class -> kotlinClassMetadata.kmClass + is KotlinClassMetadata.FileFacade -> kotlinClassMetadata.kmPackage else -> TODO("Not implemented yet: ${kotlinClassMetadata.javaClass.simpleName}") } } @@ -131,7 +130,7 @@ public class ElementsClassInspector private constructor( } private fun TypeElement.lookupField(fieldSignature: JvmFieldSignature): VariableElement? { - val signatureString = fieldSignature.asString() + val signatureString = fieldSignature.toString() return variableElementCache.getOrPut(this to signatureString) { ElementFilter.fieldsIn(enclosedElements) .find { signatureString == it.jvmFieldSignature(types) }.toOptional() @@ -150,7 +149,7 @@ public class ElementsClassInspector private constructor( methodSignature: JvmMethodSignature, elementFilter: (Iterable<Element>) -> List<ExecutableElement>, ): ExecutableElement? { - val signatureString = methodSignature.asString() + val signatureString = methodSignature.toString() return methodCache.getOrPut(this to signatureString) { elementFilter(enclosedElements) .find { signatureString == it.jvmMethodSignature(types) }.toOptional() @@ -313,7 +312,7 @@ public class ElementsClassInspector private constructor( val typeElement: TypeElement = lookupTypeElement(className) ?: error("No class found for: $className.") val isCompanionObject = when (declarationContainer) { is KmClass -> { - declarationContainer.isCompanionObject + declarationContainer.kind == ClassKind.COMPANION_OBJECT } is KmPackage -> { false @@ -333,8 +332,7 @@ public class ElementsClassInspector private constructor( val propertyData = declarationContainer.properties .asSequence() - .filter { it.isDeclaration } - .filterNot { it.isSynthesized } + .filter { it.kind.isDeclaration } .associateWithTo(TreeMap(KM_PROPERTY_COMPARATOR)) { property -> val isJvmField = ClassInspectorUtil.computeIsJvmField( property = property, @@ -397,7 +395,7 @@ public class ElementsClassInspector private constructor( val method = classIfCompanion.lookupMethod(getterSignature, ElementFilter::methodsIn) method?.methodData( typeElement = typeElement, - hasAnnotations = property.getterFlags.hasAnnotations, + hasAnnotations = property.getter.hasAnnotations, jvmInformationMethod = classIfCompanion.takeIf { it != typeElement } ?.lookupMethod(getterSignature, ElementFilter::methodsIn) ?: method, @@ -409,7 +407,7 @@ public class ElementsClassInspector private constructor( val method = classIfCompanion.lookupMethod(setterSignature, ElementFilter::methodsIn) method?.methodData( typeElement = typeElement, - hasAnnotations = property.setterFlags.hasAnnotations, + hasAnnotations = property.setter?.hasAnnotations ?: false, jvmInformationMethod = classIfCompanion.takeIf { it != typeElement } ?.lookupMethod(setterSignature, ElementFilter::methodsIn) ?: method, @@ -419,7 +417,7 @@ public class ElementsClassInspector private constructor( } val annotations = mutableListOf<AnnotationSpec>() - if (property.flags.hasAnnotations) { + if (property.hasAnnotations) { property.syntheticMethodForAnnotations?.let { annotationsHolderSignature -> val method = typeElement.lookupMethod(annotationsHolderSignature, ElementFilter::methodsIn) ?: return@let MethodData.SYNTHETIC @@ -461,7 +459,7 @@ public class ElementsClassInspector private constructor( val method = typeElement.lookupMethod(signature, ElementFilter::methodsIn) method?.methodData( typeElement = typeElement, - hasAnnotations = kmFunction.flags.hasAnnotations, + hasAnnotations = kmFunction.hasAnnotations, jvmInformationMethod = classIfCompanion.takeIf { it != typeElement } ?.lookupMethod(signature, ElementFilter::methodsIn) ?: method, @@ -476,7 +474,7 @@ public class ElementsClassInspector private constructor( is KmClass -> { val constructorData = declarationContainer.constructors .associateWithTo(TreeMap(KM_CONSTRUCTOR_COMPARATOR)) { kmConstructor -> - if (declarationContainer.isAnnotation || declarationContainer.isValue) { + if (declarationContainer.kind == ClassKind.ANNOTATION_CLASS || declarationContainer.isValue) { // // Annotations are interfaces in bytecode, but kotlin metadata will still report a // constructor signature @@ -490,7 +488,7 @@ public class ElementsClassInspector private constructor( val constructor = typeElement.lookupMethod(signature, ElementFilter::constructorsIn) ?: return@associateWithTo ConstructorData.EMPTY ConstructorData( - annotations = if (kmConstructor.flags.hasAnnotations) { + annotations = if (kmConstructor.hasAnnotations) { constructor.annotationSpecs() } else { emptyList() @@ -507,7 +505,7 @@ public class ElementsClassInspector private constructor( return ClassData( declarationContainer = declarationContainer, className = className, - annotations = if (declarationContainer.flags.hasAnnotations) { + annotations = if (declarationContainer.hasAnnotations) { ClassInspectorUtil.createAnnotations { addAll(typeElement.annotationMirrors.map { AnnotationSpec.get(it) }) } @@ -533,7 +531,6 @@ public class ElementsClassInspector private constructor( } jvmName = nameValue.value as String } - @Suppress("DEPRECATION") AnnotationSpec.get(it) }, ) diff --git a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/classinspectors/JvmDescriptorUtils.kt b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/classinspectors/JvmDescriptorUtils.kt index 51e9c453..aea3213b 100644 --- a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/classinspectors/JvmDescriptorUtils.kt +++ b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/classinspectors/JvmDescriptorUtils.kt @@ -57,6 +57,7 @@ import kotlinx.metadata.jvm.JvmMethodSignature * * @return the name of this [Element] in its "internal form". */ +@Suppress("RecursivePropertyAccessor") internal val Element.internalName: String get() = when (this) { is TypeElement -> { diff --git a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/classinspectors/ReflectiveClassInspector.kt b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/classinspectors/ReflectiveClassInspector.kt index 0bde6193..d4c74eb3 100644 --- a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/classinspectors/ReflectiveClassInspector.kt +++ b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/classinspectors/ReflectiveClassInspector.kt @@ -25,14 +25,7 @@ import com.squareup.kotlinpoet.asTypeName import com.squareup.kotlinpoet.metadata.KotlinPoetMetadataPreview import com.squareup.kotlinpoet.metadata.classinspectors.ClassInspectorUtil.JAVA_DEPRECATED import com.squareup.kotlinpoet.metadata.classinspectors.ClassInspectorUtil.filterOutNullabilityAnnotations -import com.squareup.kotlinpoet.metadata.hasAnnotations -import com.squareup.kotlinpoet.metadata.hasConstant -import com.squareup.kotlinpoet.metadata.isAnnotation -import com.squareup.kotlinpoet.metadata.isCompanionObject -import com.squareup.kotlinpoet.metadata.isConst import com.squareup.kotlinpoet.metadata.isDeclaration -import com.squareup.kotlinpoet.metadata.isSynthesized -import com.squareup.kotlinpoet.metadata.isValue import com.squareup.kotlinpoet.metadata.readKotlinClassMetadata import com.squareup.kotlinpoet.metadata.specs.ClassData import com.squareup.kotlinpoet.metadata.specs.ClassInspector @@ -62,9 +55,14 @@ import java.lang.reflect.Parameter import java.util.TreeMap import java.util.concurrent.ConcurrentHashMap import kotlin.LazyThreadSafetyMode.NONE +import kotlinx.metadata.ClassKind import kotlinx.metadata.KmClass import kotlinx.metadata.KmDeclarationContainer import kotlinx.metadata.KmPackage +import kotlinx.metadata.hasAnnotations +import kotlinx.metadata.hasConstant +import kotlinx.metadata.isConst +import kotlinx.metadata.isValue import kotlinx.metadata.jvm.JvmFieldSignature import kotlinx.metadata.jvm.JvmMethodSignature import kotlinx.metadata.jvm.KotlinClassMetadata @@ -73,6 +71,7 @@ import kotlinx.metadata.jvm.getterSignature import kotlinx.metadata.jvm.setterSignature import kotlinx.metadata.jvm.signature import kotlinx.metadata.jvm.syntheticMethodForAnnotations +import kotlinx.metadata.kind @KotlinPoetMetadataPreview public class ReflectiveClassInspector private constructor( @@ -107,8 +106,8 @@ public class ReflectiveClassInspector private constructor( val metadata = clazz.getAnnotation(Metadata::class.java) return when (val kotlinClassMetadata = metadata.readKotlinClassMetadata()) { - is KotlinClassMetadata.Class -> kotlinClassMetadata.toKmClass() - is KotlinClassMetadata.FileFacade -> kotlinClassMetadata.toKmPackage() + is KotlinClassMetadata.Class -> kotlinClassMetadata.kmClass + is KotlinClassMetadata.FileFacade -> kotlinClassMetadata.kmPackage else -> TODO("Not implemented yet: ${kotlinClassMetadata.javaClass.simpleName}") } } @@ -122,7 +121,7 @@ public class ReflectiveClassInspector private constructor( private fun Class<*>.lookupField(fieldSignature: JvmFieldSignature): Field? { return try { - val signatureString = fieldSignature.asString() + val signatureString = fieldSignature.toString() fieldCache.getOrPut(this to signatureString) { declaredFields .asSequence() @@ -137,7 +136,7 @@ public class ReflectiveClassInspector private constructor( private fun Class<*>.lookupMethod( methodSignature: JvmMethodSignature, ): Method? { - val signatureString = methodSignature.asString() + val signatureString = methodSignature.toString() return methodCache.getOrPut(this to signatureString) { declaredMethods .asSequence() @@ -149,7 +148,7 @@ public class ReflectiveClassInspector private constructor( private fun Class<*>.lookupConstructor( constructorSignature: JvmMethodSignature, ): Constructor<*>? { - val signatureString = constructorSignature.asString() + val signatureString = constructorSignature.toString() return constructorCache.getOrPut(this to signatureString) { declaredConstructors .asSequence() @@ -267,7 +266,7 @@ public class ReflectiveClassInspector private constructor( } private fun JvmMethodSignature.isOverriddenIn(clazz: Class<*>): Boolean { - val signatureString = asString() + val signatureString = toString() val classPackage = clazz.`package`.name val interfaceMethods = clazz.interfaces.asSequence() .flatMap { it.methods.asSequence() } @@ -299,7 +298,7 @@ public class ReflectiveClassInspector private constructor( val targetClass = lookupClass(className) ?: error("No class found for: $className.") val isCompanionObject: Boolean = when (declarationContainer) { is KmClass -> { - declarationContainer.isCompanionObject + declarationContainer.kind == ClassKind.COMPANION_OBJECT } is KmPackage -> { false @@ -319,8 +318,7 @@ public class ReflectiveClassInspector private constructor( val propertyData = declarationContainer.properties .asSequence() - .filter { it.isDeclaration } - .filterNot { it.isSynthesized } + .filter { it.kind.isDeclaration } .associateWithTo(TreeMap(KM_PROPERTY_COMPARATOR)) { property -> val isJvmField = ClassInspectorUtil.computeIsJvmField( property = property, @@ -393,7 +391,7 @@ public class ReflectiveClassInspector private constructor( method?.methodData( clazz = targetClass, signature = getterSignature, - hasAnnotations = property.getterFlags.hasAnnotations, + hasAnnotations = property.getter.hasAnnotations, jvmInformationMethod = classIfCompanion.takeIf { it != targetClass } ?.lookupMethod(getterSignature) ?: method, ) @@ -405,7 +403,7 @@ public class ReflectiveClassInspector private constructor( method?.methodData( clazz = targetClass, signature = setterSignature, - hasAnnotations = property.setterFlags.hasAnnotations, + hasAnnotations = property.setter?.hasAnnotations ?: false, jvmInformationMethod = classIfCompanion.takeIf { it != targetClass } ?.lookupMethod(setterSignature) ?: method, knownIsOverride = getterData?.isOverride, @@ -414,7 +412,7 @@ public class ReflectiveClassInspector private constructor( } val annotations = mutableListOf<AnnotationSpec>() - if (property.flags.hasAnnotations) { + if (property.hasAnnotations) { property.syntheticMethodForAnnotations?.let { annotationsHolderSignature -> targetClass.lookupMethod(annotationsHolderSignature)?.let { method -> annotations += method.annotationSpecs() @@ -441,7 +439,7 @@ public class ReflectiveClassInspector private constructor( method?.methodData( clazz = targetClass, signature = signature, - hasAnnotations = kmFunction.flags.hasAnnotations, + hasAnnotations = kmFunction.hasAnnotations, jvmInformationMethod = classIfCompanion.takeIf { it != targetClass }?.lookupMethod(signature) ?: method, ) @@ -453,7 +451,7 @@ public class ReflectiveClassInspector private constructor( when (declarationContainer) { is KmClass -> { - val classAnnotations = if (declarationContainer.flags.hasAnnotations) { + val classAnnotations = if (declarationContainer.hasAnnotations) { ClassInspectorUtil.createAnnotations { addAll(targetClass.annotations.map { AnnotationSpec.get(it, includeDefaultValues = true) }) } @@ -462,7 +460,7 @@ public class ReflectiveClassInspector private constructor( } val constructorData = declarationContainer.constructors .associateWithTo(TreeMap(KM_CONSTRUCTOR_COMPARATOR)) { kmConstructor -> - if (declarationContainer.isAnnotation || declarationContainer.isValue) { + if (declarationContainer.kind == ClassKind.ANNOTATION_CLASS || declarationContainer.isValue) { // // Annotations are interfaces in reflection, but kotlin metadata will still report a // constructor signature @@ -476,7 +474,7 @@ public class ReflectiveClassInspector private constructor( val constructor = targetClass.lookupConstructor(signature) ?: error("No constructor $signature found in $targetClass.") ConstructorData( - annotations = if (kmConstructor.flags.hasAnnotations) { + annotations = if (kmConstructor.hasAnnotations) { constructor.annotationSpecs() } else { emptyList() diff --git a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/specs/KmTypes.kt b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/specs/KmTypes.kt index cd12479c..23e793d0 100644 --- a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/specs/KmTypes.kt +++ b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/specs/KmTypes.kt @@ -26,10 +26,7 @@ import com.squareup.kotlinpoet.TypeVariableName import com.squareup.kotlinpoet.WildcardTypeName import com.squareup.kotlinpoet.metadata.KotlinPoetMetadataPreview import com.squareup.kotlinpoet.metadata.classinspectors.ClassInspectorUtil -import com.squareup.kotlinpoet.metadata.isNullable import com.squareup.kotlinpoet.metadata.isPrimary -import com.squareup.kotlinpoet.metadata.isReified -import com.squareup.kotlinpoet.metadata.isSuspend import com.squareup.kotlinpoet.tags.TypeAliasTag import kotlinx.metadata.KmClass import kotlinx.metadata.KmClassifier @@ -47,6 +44,9 @@ import kotlinx.metadata.KmVariance import kotlinx.metadata.KmVariance.IN import kotlinx.metadata.KmVariance.INVARIANT import kotlinx.metadata.KmVariance.OUT +import kotlinx.metadata.isNullable +import kotlinx.metadata.isReified +import kotlinx.metadata.isSuspend import kotlinx.metadata.jvm.annotations import kotlinx.metadata.jvm.signature @@ -251,7 +251,7 @@ internal val KM_FUNCTION_COMPARATOR = Comparator<KmFunction> { o1, o2 -> val signature1 = o1.signature val signature2 = o2.signature if (signature1 != null && signature2 != null) { - result = signature1.asString().compareTo(signature2.asString()) + result = signature1.toString().compareTo(signature2.toString()) if (result != 0) return@Comparator result } @@ -265,7 +265,7 @@ internal val KM_CONSTRUCTOR_COMPARATOR = Comparator<KmConstructor> { o1, o2 -> val signature1 = o1.signature val signature2 = o2.signature if (signature1 != null && signature2 != null) { - val result = signature1.asString().compareTo(signature2.asString()) + val result = signature1.toString().compareTo(signature2.toString()) if (result != 0) return@Comparator result } diff --git a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/specs/KotlinPoetMetadataSpecs.kt b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/specs/KotlinPoetMetadataSpecs.kt index 6aaa87ce..88c7b25b 100644 --- a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/specs/KotlinPoetMetadataSpecs.kt +++ b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/specs/KotlinPoetMetadataSpecs.kt @@ -37,15 +37,12 @@ import com.squareup.kotlinpoet.KModifier.FINAL import com.squareup.kotlinpoet.KModifier.INFIX import com.squareup.kotlinpoet.KModifier.INLINE import com.squareup.kotlinpoet.KModifier.INNER -import com.squareup.kotlinpoet.KModifier.INTERNAL import com.squareup.kotlinpoet.KModifier.LATEINIT import com.squareup.kotlinpoet.KModifier.NOINLINE import com.squareup.kotlinpoet.KModifier.OPEN import com.squareup.kotlinpoet.KModifier.OPERATOR import com.squareup.kotlinpoet.KModifier.PRIVATE -import com.squareup.kotlinpoet.KModifier.PROTECTED import com.squareup.kotlinpoet.KModifier.PUBLIC -import com.squareup.kotlinpoet.KModifier.SEALED import com.squareup.kotlinpoet.KModifier.SUSPEND import com.squareup.kotlinpoet.KModifier.TAILREC import com.squareup.kotlinpoet.KModifier.VALUE @@ -58,58 +55,21 @@ import com.squareup.kotlinpoet.TypeSpec import com.squareup.kotlinpoet.UNIT import com.squareup.kotlinpoet.asClassName import com.squareup.kotlinpoet.metadata.KotlinPoetMetadataPreview -import com.squareup.kotlinpoet.metadata.PropertyAccessorFlag -import com.squareup.kotlinpoet.metadata.PropertyAccessorFlag.IS_EXTERNAL -import com.squareup.kotlinpoet.metadata.PropertyAccessorFlag.IS_INLINE -import com.squareup.kotlinpoet.metadata.PropertyAccessorFlag.IS_NOT_DEFAULT import com.squareup.kotlinpoet.metadata.classinspectors.ClassInspectorUtil import com.squareup.kotlinpoet.metadata.classinspectors.ClassInspectorUtil.createAnnotations import com.squareup.kotlinpoet.metadata.classinspectors.ClassInspectorUtil.createClassName import com.squareup.kotlinpoet.metadata.classinspectors.ClassInspectorUtil.toTreeSet -import com.squareup.kotlinpoet.metadata.declaresDefaultValue -import com.squareup.kotlinpoet.metadata.hasAnnotations -import com.squareup.kotlinpoet.metadata.hasGetter -import com.squareup.kotlinpoet.metadata.hasSetter -import com.squareup.kotlinpoet.metadata.isAbstract import com.squareup.kotlinpoet.metadata.isAnnotation import com.squareup.kotlinpoet.metadata.isClass import com.squareup.kotlinpoet.metadata.isCompanionObject -import com.squareup.kotlinpoet.metadata.isConst -import com.squareup.kotlinpoet.metadata.isCrossInline -import com.squareup.kotlinpoet.metadata.isData import com.squareup.kotlinpoet.metadata.isDeclaration -import com.squareup.kotlinpoet.metadata.isDelegated -import com.squareup.kotlinpoet.metadata.isDelegation import com.squareup.kotlinpoet.metadata.isEnum -import com.squareup.kotlinpoet.metadata.isEnumEntry -import com.squareup.kotlinpoet.metadata.isExpect -import com.squareup.kotlinpoet.metadata.isExternal -import com.squareup.kotlinpoet.metadata.isFinal -import com.squareup.kotlinpoet.metadata.isFun -import com.squareup.kotlinpoet.metadata.isInfix -import com.squareup.kotlinpoet.metadata.isInline -import com.squareup.kotlinpoet.metadata.isInner import com.squareup.kotlinpoet.metadata.isInterface -import com.squareup.kotlinpoet.metadata.isInternal -import com.squareup.kotlinpoet.metadata.isLateinit -import com.squareup.kotlinpoet.metadata.isNoInline import com.squareup.kotlinpoet.metadata.isObject -import com.squareup.kotlinpoet.metadata.isOpen -import com.squareup.kotlinpoet.metadata.isOperator import com.squareup.kotlinpoet.metadata.isPrimary -import com.squareup.kotlinpoet.metadata.isPrivate -import com.squareup.kotlinpoet.metadata.isProtected -import com.squareup.kotlinpoet.metadata.isPublic -import com.squareup.kotlinpoet.metadata.isReified -import com.squareup.kotlinpoet.metadata.isSealed -import com.squareup.kotlinpoet.metadata.isSuspend -import com.squareup.kotlinpoet.metadata.isSynthesized -import com.squareup.kotlinpoet.metadata.isTailRec import com.squareup.kotlinpoet.metadata.isVal -import com.squareup.kotlinpoet.metadata.isValue -import com.squareup.kotlinpoet.metadata.isVar -import com.squareup.kotlinpoet.metadata.propertyAccessorFlags import com.squareup.kotlinpoet.metadata.specs.JvmMethodModifier.DEFAULT +import com.squareup.kotlinpoet.metadata.toKModifier import com.squareup.kotlinpoet.metadata.toKmClass import com.squareup.kotlinpoet.tag import java.util.Locale @@ -118,21 +78,49 @@ import javax.lang.model.element.ElementKind import javax.lang.model.element.PackageElement import javax.lang.model.element.TypeElement import kotlin.reflect.KClass -import kotlinx.metadata.Flags +import kotlinx.metadata.ClassKind import kotlinx.metadata.KmClass import kotlinx.metadata.KmClassifier import kotlinx.metadata.KmConstructor import kotlinx.metadata.KmFunction import kotlinx.metadata.KmPackage import kotlinx.metadata.KmProperty +import kotlinx.metadata.KmPropertyAccessorAttributes import kotlinx.metadata.KmType import kotlinx.metadata.KmTypeAlias import kotlinx.metadata.KmValueParameter +import kotlinx.metadata.Modality +import kotlinx.metadata.Visibility +import kotlinx.metadata.declaresDefaultValue +import kotlinx.metadata.hasAnnotations +import kotlinx.metadata.hasGetter +import kotlinx.metadata.hasSetter +import kotlinx.metadata.isConst +import kotlinx.metadata.isCrossinline +import kotlinx.metadata.isData +import kotlinx.metadata.isDelegated +import kotlinx.metadata.isExpect +import kotlinx.metadata.isExternal +import kotlinx.metadata.isFunInterface +import kotlinx.metadata.isInfix +import kotlinx.metadata.isInline +import kotlinx.metadata.isInner +import kotlinx.metadata.isLateinit +import kotlinx.metadata.isNoinline +import kotlinx.metadata.isOperator +import kotlinx.metadata.isReified +import kotlinx.metadata.isSuspend +import kotlinx.metadata.isTailrec +import kotlinx.metadata.isValue +import kotlinx.metadata.isVar import kotlinx.metadata.jvm.JvmMethodSignature import kotlinx.metadata.jvm.getterSignature -import kotlinx.metadata.jvm.jvmInternalName import kotlinx.metadata.jvm.setterSignature import kotlinx.metadata.jvm.signature +import kotlinx.metadata.jvm.toJvmInternalName +import kotlinx.metadata.kind +import kotlinx.metadata.modality +import kotlinx.metadata.visibility /** @return a [TypeSpec] ABI representation of this [KClass]. */ @KotlinPoetMetadataPreview @@ -262,7 +250,7 @@ private fun KmClass.toTypeSpec( parentClassName: ClassName?, ): TypeSpec { val classTypeParamsResolver = typeParameters.toTypeParameterResolver() - val jvmInternalName = name.jvmInternalName + val jvmInternalName = name.toJvmInternalName() val simpleName = className.simpleName val classData = classInspector?.containerData(className, parentClassName) check(classData is ClassData?) { @@ -276,13 +264,14 @@ private fun KmClass.toTypeSpec( isExpect -> TypeSpec.classBuilder(simpleName).addModifiers(EXPECT) isObject -> TypeSpec.objectBuilder(simpleName) isInterface -> { - if (classData?.declarationContainer?.isFun == true) { + if (classData?.declarationContainer?.isFunInterface == true) { TypeSpec.funInterfaceBuilder(simpleName) } else { TypeSpec.interfaceBuilder(simpleName) } } - isEnumEntry -> TypeSpec.anonymousClassBuilder() + + kind == ClassKind.ENUM_ENTRY -> TypeSpec.anonymousClassBuilder() else -> TypeSpec.classBuilder(simpleName) } @@ -292,7 +281,7 @@ private fun KmClass.toTypeSpec( } ?.let(builder::addAnnotations) - if (isEnum) { + if (kind == ClassKind.ENUM_CLASS) { enumEntries.forEach { entryName -> val typeSpec = if (classInspector != null) { val entry = classInspector.enumEntry(className, entryName) @@ -315,14 +304,13 @@ private fun KmClass.toTypeSpec( } } - if (!isEnumEntry) { - visibilityFrom(flags) { builder.addModifiers(it) } - builder.addModifiers( - *flags.modalities - .filterNot { it == FINAL } // Default - .filterNot { isInterface && it == ABSTRACT } // Abstract is a default on interfaces - .toTypedArray(), - ) + if (kind != ClassKind.ENUM_ENTRY) { + visibilityFrom(visibility) { builder.addModifiers(it) } + modality + .takeUnless { it == Modality.FINAL } // Default + ?.takeUnless { kind == ClassKind.INTERFACE && it == Modality.ABSTRACT } // Abstract is a default on interfaces + ?.let(Modality::toKModifier) + ?.let { builder.addModifiers(it) } if (isData) { builder.addModifiers(DATA) } @@ -389,8 +377,7 @@ private fun KmClass.toTypeSpec( builder.addProperties( properties .asSequence() - .filter { it.isDeclaration } - .filterNot { it.isSynthesized } + .filter { it.kind.isDeclaration } .map { it to classData?.properties?.get(it) } .map { (property, propertyData) -> property.toPropertySpec( @@ -421,9 +408,7 @@ private fun KmClass.toTypeSpec( builder.addFunctions( functions .asSequence() - .filter { it.isDeclaration } - .filterNot { it.isDelegation } - .filterNot { it.isSynthesized } + .filter { it.kind.isDeclaration } .map { it to classData?.methods?.get(it) } .map { (func, methodData) -> func.toFunSpec(classTypeParamsResolver, classInspector, classData, methodData) @@ -433,11 +418,11 @@ private fun KmClass.toTypeSpec( fun isKotlinDefaultInterfaceMethod(): Boolean { classInspector?.let { handler -> func.signature?.let { signature -> - val suffix = signature.desc.removePrefix("(") + val suffix = signature.descriptor.removePrefix("(") return handler.methodExists( className.nestedClass("DefaultImpls"), signature.copy( - desc = "(L$jvmInternalName;$suffix", + descriptor = "(L$jvmInternalName;$suffix", ), ) } @@ -506,7 +491,7 @@ private fun KmConstructor.toFunSpec( return FunSpec.constructorBuilder() .apply { addAnnotations(constructorData?.allAnnotations.orEmpty()) - visibilityFrom(flags) { addModifiers(it) } + visibilityFrom(visibility) { addModifiers(it) } addParameters( this@toFunSpec.valueParameters.mapIndexed { index, param -> param.toParameterSpec( @@ -518,7 +503,7 @@ private fun KmConstructor.toFunSpec( ) }, ) - if (!isPrimary) { + if (!this@toFunSpec.isPrimary) { // TODO How do we know when to add callSuperConstructor()? } } @@ -565,14 +550,14 @@ private fun KmFunction.toFunSpec( return FunSpec.builder(name) .apply { addAnnotations(annotations) - visibilityFrom(flags) { addModifiers(it) } + visibilityFrom(visibility) { addModifiers(it) } val isOverride = methodData?.isOverride == true - addModifiers( - flags.modalities - .filterNot { it == FINAL && !isOverride } // Final is the default - .filterNot { it == OPEN && isOverride } // Overrides are implicitly open - .filterNot { it == OPEN && isInInterface }, // interface methods are implicitly open - ) + modality + .takeUnless { it == Modality.FINAL && !isOverride } // Final is the default + ?.takeUnless { it == Modality.OPEN && isOverride } // Overrides are implicitly open + ?.takeUnless { it == Modality.OPEN && isInInterface } // interface methods are implicitly open + ?.let(Modality::toKModifier) + ?.let { addModifiers(it) } if (valueParameters.isNotEmpty()) { addParameters( valueParameters.mapIndexed { index, param -> @@ -599,7 +584,7 @@ private fun KmFunction.toFunSpec( if (isInline) { addModifiers(INLINE) } - if (isTailRec) { + if (isTailrec) { addModifiers(TAILREC) } if (isExternal) { @@ -614,7 +599,7 @@ private fun KmFunction.toFunSpec( val returnTypeName = this@toFunSpec.returnType.toTypeName(typeParamsResolver) if (returnTypeName != UNIT) { returns(returnTypeName) - if (!flags.isAbstract) { + if (modality != Modality.ABSTRACT) { addStatement(NOT_IMPLEMENTED) } } @@ -636,10 +621,10 @@ private fun KmValueParameter.toParameterSpec( if (varargElementType != null) { addModifiers(VARARG) } - if (isCrossInline) { + if (isCrossinline) { addModifiers(CROSSINLINE) } - if (isNoInline) { + if (isNoinline) { addModifiers(NOINLINE) } if (declaresDefaultValue) { @@ -666,8 +651,7 @@ private fun KmProperty.toPropertySpec( if (hasGetter) { getterSignature?.let { getterSignature -> if (!containerData.isInterface && - !flags.isOpen && - !flags.isAbstract + modality != Modality.OPEN && modality != Modality.ABSTRACT ) { // Infer if JvmName was used // We skip interface types or open/abstract properties because they can't have @JvmName. @@ -696,8 +680,7 @@ private fun KmProperty.toPropertySpec( !containerData.declarationContainer.isAnnotation && !containerData.declarationContainer.isInterface && classInspector?.supportsNonRuntimeRetainedAnnotations == false && - !flags.isOpen && - !flags.isAbstract + modality != Modality.OPEN && modality != Modality.ABSTRACT ) { // Infer if JvmName was used // We skip annotation types for this because they can't have vars. @@ -734,14 +717,14 @@ private fun KmProperty.toPropertySpec( } .toTreeSet() addAnnotations(finalAnnotations) - visibilityFrom(flags) { addModifiers(it) } - addModifiers( - flags.modalities - .filterNot { it == FINAL && !isOverride } // Final is the default - .filterNot { it == OPEN && isOverride } // Overrides are implicitly open - .filterNot { it == OPEN && isInInterface } // Interface properties implicitly open - .filterNot { it == ABSTRACT && isInInterface }, // Interface properties implicitly abstract - ) + visibilityFrom(visibility) { addModifiers(it) } + modality + .takeUnless { it == Modality.FINAL && !isOverride } // Final is the default + ?.takeUnless { it == Modality.OPEN && isOverride } // Overrides are implicitly open + ?.takeUnless { it == Modality.OPEN && isInInterface } // Interface properties implicitly open + ?.takeUnless { it == Modality.ABSTRACT && isInInterface } // Interface properties implicitly abstract + ?.let(Modality::toKModifier) + ?.let { addModifiers(it) } if (isOverride) { addModifiers(KModifier.OVERRIDE) } @@ -784,7 +767,7 @@ private fun KmProperty.toPropertySpec( constant != null -> initializer(constant) isConstructorParam -> initializer(name) returnTypeName.isNullable -> initializer("null") - flags.isAbstract || isInInterface -> { + modality == Modality.ABSTRACT || isInInterface -> { // No-op, don't emit an initializer for abstract or interface properties } else -> initializer(NOT_IMPLEMENTED) @@ -794,16 +777,16 @@ private fun KmProperty.toPropertySpec( // since the delegate handles it // vals with initialized constants have a getter in bytecode but not a body in kotlin source val modifierSet = modifiers.toSet() - if (hasGetter && !isDelegated && !flags.isAbstract) { + if (hasGetter && !isDelegated && modality != Modality.ABSTRACT) { propertyAccessor( modifierSet, - getterFlags, + getter, FunSpec.getterBuilder().addStatement(NOT_IMPLEMENTED), isOverride, )?.let(::getter) } - if (hasSetter && !isDelegated && !flags.isAbstract) { - propertyAccessor(modifierSet, setterFlags, FunSpec.setterBuilder(), isOverride)?.let(::setter) + if (hasSetter && !isDelegated && modality != Modality.ABSTRACT) { + propertyAccessor(modifierSet, setter!!, FunSpec.setterBuilder(), isOverride)?.let(::setter) } } .tag(this) @@ -813,26 +796,34 @@ private fun KmProperty.toPropertySpec( @KotlinPoetMetadataPreview private fun propertyAccessor( propertyModifiers: Set<KModifier>, - flags: Flags, + attrs: KmPropertyAccessorAttributes, functionBuilder: Builder, isOverride: Boolean, ): FunSpec? { - val visibility = flags.visibility + val visibility = attrs.visibility.toKModifier() if (visibility == PUBLIC || visibility !in propertyModifiers) { // This is redundant and just a stub // For annotations on this accessor, we declare them on the property with site target instead return null } - val modalities = flags.modalities - .filterNot { it == FINAL && !isOverride } - .filterNot { it == OPEN && isOverride } - val propertyAccessorFlags = flags.propertyAccessorFlags - return if (modalities.isNotEmpty() || propertyAccessorFlags.isNotEmpty()) { + val modality = attrs.modality + .takeUnless { it == Modality.FINAL && !isOverride } + .takeUnless { it == Modality.OPEN && isOverride } + + val localModifiers = buildList { + if (attrs.isExternal) { + add(EXTERNAL) + } + if (attrs.isInline) { + add(INLINE) + } + } + return if (modality != null || localModifiers.isNotEmpty()) { functionBuilder .apply { addModifiers(visibility) - addModifiers(modalities) - addModifiers(*propertyAccessorFlags.toKModifiersArray()) + modality?.let { addModifiers(it.toKModifier()) } + addModifiers(localModifiers) } .build() } else { @@ -840,25 +831,15 @@ private fun propertyAccessor( } } -private fun Set<PropertyAccessorFlag>.toKModifiersArray(): Array<KModifier> { - return mapNotNull { - when (it) { - IS_EXTERNAL -> EXTERNAL - IS_INLINE -> INLINE - IS_NOT_DEFAULT -> null // Gracefully skip over these - } - }.toTypedArray() -} - @KotlinPoetMetadataPreview private fun KmTypeAlias.toTypeAliasSpec(): TypeAliasSpec { val typeParamResolver = typeParameters.toTypeParameterResolver() return TypeAliasSpec.builder(name, underlyingType.toTypeName(typeParamResolver)) .apply { - visibilityFrom(flags) { + visibilityFrom(visibility) { addModifiers(it) } - if (flags.hasAnnotations) { + if (hasAnnotations) { val annotationSpecs = this@toTypeAliasSpec.annotations .map { it.toAnnotationSpec() } addAnnotations(annotationSpecs) @@ -888,21 +869,8 @@ private val JAVA_ANNOTATION_ANNOTATIONS = setOf( ) @KotlinPoetMetadataPreview -private val Flags.visibility: KModifier - get() = when { - isInternal -> INTERNAL - isPrivate -> PRIVATE - isProtected -> PROTECTED - isPublic -> PUBLIC - else -> { - // IS_PRIVATE_TO_THIS or IS_LOCAL, so just default to public - PUBLIC - } - } - -@KotlinPoetMetadataPreview -private fun visibilityFrom(flags: Flags, body: (KModifier) -> Unit) { - val modifierVisibility = flags.visibility +private fun visibilityFrom(visibility: Visibility, body: (KModifier) -> Unit) { + val modifierVisibility = visibility.toKModifier() if (modifierVisibility != PUBLIC) { body(modifierVisibility) } @@ -912,23 +880,6 @@ private fun String.safeCapitalize(locale: Locale): String { return replaceFirstChar { if (it.isLowerCase()) it.titlecase(locale) else it.toString() } } -@KotlinPoetMetadataPreview -private val Flags.modalities: Set<KModifier> - get() = setOf { - if (isFinal) { - add(FINAL) - } - if (isOpen) { - add(OPEN) - } - if (isAbstract) { - add(ABSTRACT) - } - if (isSealed) { - add(SEALED) - } - } - private inline fun <E> setOf(body: MutableSet<E>.() -> Unit): Set<E> { return mutableSetOf<E>().apply(body).toSet() } diff --git a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/specs/kmAnnotations.kt b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/specs/kmAnnotations.kt index f6b44670..671147f7 100644 --- a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/specs/kmAnnotations.kt +++ b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/specs/kmAnnotations.kt @@ -15,8 +15,10 @@ */ package com.squareup.kotlinpoet.metadata.specs +import com.squareup.kotlinpoet.ARRAY import com.squareup.kotlinpoet.AnnotationSpec import com.squareup.kotlinpoet.CodeBlock +import com.squareup.kotlinpoet.buildCodeBlock import com.squareup.kotlinpoet.joinToCode import com.squareup.kotlinpoet.metadata.KotlinPoetMetadataPreview import com.squareup.kotlinpoet.metadata.classinspectors.ClassInspectorUtil.createClassName @@ -75,5 +77,10 @@ internal fun KmAnnotationArgument.toCodeBlock(): CodeBlock { is EnumValue -> CodeBlock.of("%T.%L", createClassName(enumClassName), enumEntryName) is AnnotationValue -> CodeBlock.of("%L", annotation.toAnnotationSpec()) is ArrayValue -> elements.map { it.toCodeBlock() }.joinToCode(", ", "[", "]") + is KmAnnotationArgument.ArrayKClassValue -> buildCodeBlock { + repeat(arrayDimensionCount) { add("%T<", ARRAY) } + add("%T::class", createClassName(className)) + repeat(arrayDimensionCount) { add(">") } + } } } diff --git a/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/util.kt b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/util.kt new file mode 100644 index 00000000..ab30c8ee --- /dev/null +++ b/interop/kotlinx-metadata/src/main/kotlin/com/squareup/kotlinpoet/metadata/util.kt @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2019 Square, Inc. + * + * 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 + * + * https://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 com.squareup.kotlinpoet.metadata + +import com.squareup.kotlinpoet.KModifier +import kotlinx.metadata.ClassKind +import kotlinx.metadata.KmClass +import kotlinx.metadata.KmConstructor +import kotlinx.metadata.KmProperty +import kotlinx.metadata.MemberKind +import kotlinx.metadata.Modality +import kotlinx.metadata.Visibility +import kotlinx.metadata.isSecondary +import kotlinx.metadata.isVar +import kotlinx.metadata.kind + +internal val KmClass.isObject: Boolean + get() = kind == ClassKind.OBJECT + +internal val KmClass.isCompanionObject: Boolean + get() = kind == ClassKind.COMPANION_OBJECT + +internal val KmClass.isClass: Boolean + get() = kind == ClassKind.CLASS + +internal val KmClass.isAnnotation: Boolean + get() = kind == ClassKind.ANNOTATION_CLASS + +internal val KmClass.isEnum: Boolean + get() = kind == ClassKind.ENUM_CLASS + +internal val KmClass.isInterface: Boolean + get() = kind == ClassKind.INTERFACE + +internal val KmConstructor.isPrimary: Boolean + get() = !isSecondary + +internal val KmProperty.isVal: Boolean + get() = !isVar + +internal fun Modality.toKModifier(): KModifier = when (this) { + Modality.FINAL -> KModifier.FINAL + Modality.OPEN -> KModifier.OPEN + Modality.ABSTRACT -> KModifier.ABSTRACT + Modality.SEALED -> KModifier.SEALED +} + +internal fun Visibility.toKModifier(): KModifier = when (this) { + Visibility.INTERNAL -> KModifier.INTERNAL + Visibility.PRIVATE -> KModifier.PRIVATE + Visibility.PROTECTED -> KModifier.PROTECTED + Visibility.PUBLIC -> KModifier.PUBLIC + Visibility.PRIVATE_TO_THIS, + Visibility.LOCAL, + -> { + // Default to public + KModifier.PUBLIC + } +} + +internal val MemberKind.isDeclaration: Boolean get() = this == MemberKind.DECLARATION diff --git a/interop/kotlinx-metadata/src/test/kotlin/com/squareup/kotlinpoet/metadata/specs/KmAnnotationsTest.kt b/interop/kotlinx-metadata/src/test/kotlin/com/squareup/kotlinpoet/metadata/specs/KmAnnotationsTest.kt index c7928b4e..a2ad9d18 100644 --- a/interop/kotlinx-metadata/src/test/kotlin/com/squareup/kotlinpoet/metadata/specs/KmAnnotationsTest.kt +++ b/interop/kotlinx-metadata/src/test/kotlin/com/squareup/kotlinpoet/metadata/specs/KmAnnotationsTest.kt @@ -209,7 +209,7 @@ class KmAnnotationsTest { @Test fun kClassValue() { val annotation = KmAnnotation( "test/KClassValueAnnotation", - mapOf("value" to KClassValue("test/OtherClass", 0)), + mapOf("value" to KClassValue("test/OtherClass")), ) assertThat(annotation.toAnnotationSpec().toString()).isEqualTo( """ diff --git a/interop/kotlinx-metadata/src/test/kotlin/com/squareup/kotlinpoet/metadata/specs/KotlinPoetMetadataSpecsTest.kt b/interop/kotlinx-metadata/src/test/kotlin/com/squareup/kotlinpoet/metadata/specs/KotlinPoetMetadataSpecsTest.kt index 62b912a5..2dd54bbf 100644 --- a/interop/kotlinx-metadata/src/test/kotlin/com/squareup/kotlinpoet/metadata/specs/KotlinPoetMetadataSpecsTest.kt +++ b/interop/kotlinx-metadata/src/test/kotlin/com/squareup/kotlinpoet/metadata/specs/KotlinPoetMetadataSpecsTest.kt @@ -15,7 +15,6 @@ */ @file:OptIn(KotlinPoetMetadataPreview::class) @file:Suppress( - "DEPRECATION", "NOTHING_TO_INLINE", "RedundantSuspendModifier", "RedundantUnitReturnType", @@ -369,21 +368,6 @@ class KotlinPoetMetadataSpecsTest : MultiClassInspectorTest() { } @Test - fun inlineClass() { - val typeSpec = InlineClass::class.toTypeSpecWithTestHandler() - - //language=kotlin - assertThat(typeSpec.trimmedToString()).isEqualTo( - """ - @kotlin.jvm.JvmInline - public value class InlineClass( - public val `value`: kotlin.String, - ) - """.trimIndent(), - ) - } - - @Test fun valueClass() { val typeSpec = ValueClass::class.toTypeSpecWithTestHandler() @@ -2216,8 +2200,6 @@ private fun TypeSpec.trimmedToString(): String { return toString().trim() } -inline class InlineClass(val value: String) - @JvmInline value class ValueClass(val value: String) diff --git a/interop/kotlinx-metadata/src/test/kotlin/com/squareup/kotlinpoet/metadata/specs/MultiClassInspectorTest.kt b/interop/kotlinx-metadata/src/test/kotlin/com/squareup/kotlinpoet/metadata/specs/MultiClassInspectorTest.kt index cb7c21d6..6bb9192a 100644 --- a/interop/kotlinx-metadata/src/test/kotlin/com/squareup/kotlinpoet/metadata/specs/MultiClassInspectorTest.kt +++ b/interop/kotlinx-metadata/src/test/kotlin/com/squareup/kotlinpoet/metadata/specs/MultiClassInspectorTest.kt @@ -113,7 +113,7 @@ abstract class MultiClassInspectorTest { protected fun KClass<*>.toFileSpecWithTestHandler(): FileSpec { val classInspector = classInspectorType.create(this@MultiClassInspectorTest) return java.annotations.filterIsInstance<Metadata>().first().toKotlinClassMetadata<FileFacade>() - .toKmPackage() + .kmPackage .toFileSpec(classInspector, asClassName()) } } |