Skip to content

Commit

Permalink
Internalize non-KP-type-returning APIs in KM artifact (#1891)
Browse files Browse the repository at this point in the history
* Internalize non-KP-type-returning APIs in KM artifact

These were useful in a time where kotlinx-metadata didn't offer easy entry point APIs for these, but it's come a long way now and we can better focus the artifact by only exposing kotlinpoet-specific APIs

* CHANGELOG
  • Loading branch information
ZacSweers committed Apr 17, 2024
1 parent 52e43f2 commit d73fac9
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 21 deletions.
1 change: 1 addition & 0 deletions docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ Change Log
* Fix: Fix trailing newline in PropertySpec (#1827).
* Change: kotlinx-metadata 0.9.0. Note that the `KotlinClassMetadata .read` is deprecated in 0.9.0 and replaced with `readStrict` (#1830).
* Note: we now also `lenient` parameters to map to the underlying `readStrict()` and `readLenient()` calls (#1766).
* We have also removed various `Class`/`TypeElement`/`Metadata`-to-`KmClass` APIs from the public API, as these are trivial to write now with kotlinx-metadata's newer APIs and allows us to focus the API surface area of this artifact better (#1891).
* Fix: `KSAnnotation.toAnnotationSpec` writes varargs in place instead of making them an array to work around a Kotlin
issue with `OptIn` annotations (#1831).
* Fix: `MemberName`s without a package are now correctly imported (#1841)
Expand Down
8 changes: 0 additions & 8 deletions interop/kotlinx-metadata/api/kotlinx-metadata.api
Original file line number Diff line number Diff line change
@@ -1,11 +1,3 @@
public final class com/squareup/kotlinpoet/metadata/KotlinPoetMetadata {
public static final fun readKotlinClassMetadata (Lkotlin/Metadata;Z)Lkotlinx/metadata/jvm/KotlinClassMetadata;
public static final fun toKmClass (Ljava/lang/Class;Z)Lkotlinx/metadata/KmClass;
public static final fun toKmClass (Ljavax/lang/model/element/TypeElement;Z)Lkotlinx/metadata/KmClass;
public static final fun toKmClass (Lkotlin/Metadata;Z)Lkotlinx/metadata/KmClass;
public static final fun toKmClass (Lkotlin/reflect/KClass;Z)Lkotlinx/metadata/KmClass;
}

public abstract interface annotation class com/squareup/kotlinpoet/metadata/KotlinPoetMetadataPreview : java/lang/annotation/Annotation {
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import kotlin.annotation.AnnotationTarget.PROPERTY
import kotlin.reflect.KClass
import kotlinx.metadata.KmClass
import kotlinx.metadata.jvm.KotlinClassMetadata
import kotlinx.metadata.jvm.Metadata

/**
* Indicates that a given API is part of the experimental KotlinPoet metadata support. This exists
Expand All @@ -39,37 +38,32 @@ public annotation class KotlinPoetMetadataPreview
* @param lenient see docs on [KotlinClassMetadata.readStrict] and [KotlinClassMetadata.readLenient] for more details.
* @return a new [KmClass] representation of the Kotlin metadata for [this] class.
*/
@KotlinPoetMetadataPreview
public fun KClass<*>.toKmClass(lenient: Boolean): KmClass = java.toKmClass(lenient)
internal fun KClass<*>.toKmClass(lenient: Boolean): KmClass = java.toKmClass(lenient)

/**
* @param lenient see docs on [KotlinClassMetadata.readStrict] and [KotlinClassMetadata.readLenient] for more details.
* @return a new [KmClass] representation of the Kotlin metadata for [this] class.
*/
@KotlinPoetMetadataPreview
public fun Class<*>.toKmClass(lenient: Boolean): KmClass = readMetadata(::getAnnotation).toKmClass(lenient)
internal fun Class<*>.toKmClass(lenient: Boolean): KmClass = readMetadata(::getAnnotation).toKmClass(lenient)

/**
* @param lenient see docs on [KotlinClassMetadata.readStrict] and [KotlinClassMetadata.readLenient] for more details.
* @return a new [KmClass] representation of the Kotlin metadata for [this] type.
*/
@KotlinPoetMetadataPreview
public fun TypeElement.toKmClass(lenient: Boolean): KmClass = readMetadata(::getAnnotation).toKmClass(lenient)
internal fun TypeElement.toKmClass(lenient: Boolean): KmClass = readMetadata(::getAnnotation).toKmClass(lenient)

/**
* @param lenient see docs on [KotlinClassMetadata.readStrict] and [KotlinClassMetadata.readLenient] for more details.
*/
@KotlinPoetMetadataPreview
public fun Metadata.toKmClass(lenient: Boolean): KmClass {
internal fun Metadata.toKmClass(lenient: Boolean): KmClass {
return toKotlinClassMetadata<KotlinClassMetadata.Class>(lenient)
.kmClass
}

/**
* @param lenient see docs on [KotlinClassMetadata.readStrict] and [KotlinClassMetadata.readLenient] for more details.
*/
@KotlinPoetMetadataPreview
public inline fun <reified T : KotlinClassMetadata> Metadata.toKotlinClassMetadata(
internal inline fun <reified T : KotlinClassMetadata> Metadata.toKotlinClassMetadata(
lenient: Boolean,
): T {
val expectedType = T::class
Expand Down Expand Up @@ -102,8 +96,7 @@ public inline fun <reified T : KotlinClassMetadata> Metadata.toKotlinClassMetada
*
* @param lenient see docs on [KotlinClassMetadata.readStrict] and [KotlinClassMetadata.readLenient] for more details.
*/
@KotlinPoetMetadataPreview
public fun Metadata.readKotlinClassMetadata(lenient: Boolean): KotlinClassMetadata {
internal fun Metadata.readKotlinClassMetadata(lenient: Boolean): KotlinClassMetadata {
return if (lenient) {
KotlinClassMetadata.readLenient(this)
} else {
Expand Down

0 comments on commit d73fac9

Please sign in to comment.