Add JvmStatic + JvmOverloads to writing functions in KotlinClassMetadata

and KotlinModuleMetadata for easier use from Java.
This commit is contained in:
Leonid Startsev
2023-04-04 14:57:42 +02:00
committed by Space Team
parent 70739df0ad
commit 1c629e748f
4 changed files with 65 additions and 6 deletions
@@ -1279,6 +1279,24 @@ public abstract class kotlinx/metadata/jvm/KotlinClassMetadata {
public synthetic fun <init> (Lkotlin/Metadata;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun getAnnotationData ()Lkotlin/Metadata;
public static final fun read (Lkotlin/Metadata;)Lkotlinx/metadata/jvm/KotlinClassMetadata;
public static final fun writeClass (Lkotlinx/metadata/KmClass;)Lkotlinx/metadata/jvm/KotlinClassMetadata$Class;
public static final fun writeClass (Lkotlinx/metadata/KmClass;[I)Lkotlinx/metadata/jvm/KotlinClassMetadata$Class;
public static final fun writeClass (Lkotlinx/metadata/KmClass;[II)Lkotlinx/metadata/jvm/KotlinClassMetadata$Class;
public static final fun writeFileFacade (Lkotlinx/metadata/KmPackage;)Lkotlinx/metadata/jvm/KotlinClassMetadata$FileFacade;
public static final fun writeFileFacade (Lkotlinx/metadata/KmPackage;[I)Lkotlinx/metadata/jvm/KotlinClassMetadata$FileFacade;
public static final fun writeFileFacade (Lkotlinx/metadata/KmPackage;[II)Lkotlinx/metadata/jvm/KotlinClassMetadata$FileFacade;
public static final fun writeLambda (Lkotlinx/metadata/KmLambda;)Lkotlinx/metadata/jvm/KotlinClassMetadata$SyntheticClass;
public static final fun writeLambda (Lkotlinx/metadata/KmLambda;[I)Lkotlinx/metadata/jvm/KotlinClassMetadata$SyntheticClass;
public static final fun writeLambda (Lkotlinx/metadata/KmLambda;[II)Lkotlinx/metadata/jvm/KotlinClassMetadata$SyntheticClass;
public static final fun writeMultiFileClassFacade (Ljava/util/List;)Lkotlinx/metadata/jvm/KotlinClassMetadata$MultiFileClassFacade;
public static final fun writeMultiFileClassFacade (Ljava/util/List;[I)Lkotlinx/metadata/jvm/KotlinClassMetadata$MultiFileClassFacade;
public static final fun writeMultiFileClassFacade (Ljava/util/List;[II)Lkotlinx/metadata/jvm/KotlinClassMetadata$MultiFileClassFacade;
public static final fun writeMultiFileClassPart (Lkotlinx/metadata/KmPackage;Ljava/lang/String;)Lkotlinx/metadata/jvm/KotlinClassMetadata$MultiFileClassPart;
public static final fun writeMultiFileClassPart (Lkotlinx/metadata/KmPackage;Ljava/lang/String;[I)Lkotlinx/metadata/jvm/KotlinClassMetadata$MultiFileClassPart;
public static final fun writeMultiFileClassPart (Lkotlinx/metadata/KmPackage;Ljava/lang/String;[II)Lkotlinx/metadata/jvm/KotlinClassMetadata$MultiFileClassPart;
public static final fun writeSyntheticClass ()Lkotlinx/metadata/jvm/KotlinClassMetadata$SyntheticClass;
public static final fun writeSyntheticClass ([I)Lkotlinx/metadata/jvm/KotlinClassMetadata$SyntheticClass;
public static final fun writeSyntheticClass ([II)Lkotlinx/metadata/jvm/KotlinClassMetadata$SyntheticClass;
}
public final class kotlinx/metadata/jvm/KotlinClassMetadata$Class : kotlinx/metadata/jvm/KotlinClassMetadata {
@@ -1296,16 +1314,28 @@ public final class kotlinx/metadata/jvm/KotlinClassMetadata$Class$Writer : kotli
public final class kotlinx/metadata/jvm/KotlinClassMetadata$Companion {
public final fun read (Lkotlin/Metadata;)Lkotlinx/metadata/jvm/KotlinClassMetadata;
public final fun writeClass (Lkotlinx/metadata/KmClass;)Lkotlinx/metadata/jvm/KotlinClassMetadata$Class;
public final fun writeClass (Lkotlinx/metadata/KmClass;[I)Lkotlinx/metadata/jvm/KotlinClassMetadata$Class;
public final fun writeClass (Lkotlinx/metadata/KmClass;[II)Lkotlinx/metadata/jvm/KotlinClassMetadata$Class;
public static synthetic fun writeClass$default (Lkotlinx/metadata/jvm/KotlinClassMetadata$Companion;Lkotlinx/metadata/KmClass;[IIILjava/lang/Object;)Lkotlinx/metadata/jvm/KotlinClassMetadata$Class;
public final fun writeFileFacade (Lkotlinx/metadata/KmPackage;)Lkotlinx/metadata/jvm/KotlinClassMetadata$FileFacade;
public final fun writeFileFacade (Lkotlinx/metadata/KmPackage;[I)Lkotlinx/metadata/jvm/KotlinClassMetadata$FileFacade;
public final fun writeFileFacade (Lkotlinx/metadata/KmPackage;[II)Lkotlinx/metadata/jvm/KotlinClassMetadata$FileFacade;
public static synthetic fun writeFileFacade$default (Lkotlinx/metadata/jvm/KotlinClassMetadata$Companion;Lkotlinx/metadata/KmPackage;[IIILjava/lang/Object;)Lkotlinx/metadata/jvm/KotlinClassMetadata$FileFacade;
public final fun writeLambda (Lkotlinx/metadata/KmLambda;)Lkotlinx/metadata/jvm/KotlinClassMetadata$SyntheticClass;
public final fun writeLambda (Lkotlinx/metadata/KmLambda;[I)Lkotlinx/metadata/jvm/KotlinClassMetadata$SyntheticClass;
public final fun writeLambda (Lkotlinx/metadata/KmLambda;[II)Lkotlinx/metadata/jvm/KotlinClassMetadata$SyntheticClass;
public static synthetic fun writeLambda$default (Lkotlinx/metadata/jvm/KotlinClassMetadata$Companion;Lkotlinx/metadata/KmLambda;[IIILjava/lang/Object;)Lkotlinx/metadata/jvm/KotlinClassMetadata$SyntheticClass;
public final fun writeMultiFileClassFacade (Ljava/util/List;)Lkotlinx/metadata/jvm/KotlinClassMetadata$MultiFileClassFacade;
public final fun writeMultiFileClassFacade (Ljava/util/List;[I)Lkotlinx/metadata/jvm/KotlinClassMetadata$MultiFileClassFacade;
public final fun writeMultiFileClassFacade (Ljava/util/List;[II)Lkotlinx/metadata/jvm/KotlinClassMetadata$MultiFileClassFacade;
public static synthetic fun writeMultiFileClassFacade$default (Lkotlinx/metadata/jvm/KotlinClassMetadata$Companion;Ljava/util/List;[IIILjava/lang/Object;)Lkotlinx/metadata/jvm/KotlinClassMetadata$MultiFileClassFacade;
public final fun writeMultiFileClassPart (Lkotlinx/metadata/KmPackage;Ljava/lang/String;)Lkotlinx/metadata/jvm/KotlinClassMetadata$MultiFileClassPart;
public final fun writeMultiFileClassPart (Lkotlinx/metadata/KmPackage;Ljava/lang/String;[I)Lkotlinx/metadata/jvm/KotlinClassMetadata$MultiFileClassPart;
public final fun writeMultiFileClassPart (Lkotlinx/metadata/KmPackage;Ljava/lang/String;[II)Lkotlinx/metadata/jvm/KotlinClassMetadata$MultiFileClassPart;
public static synthetic fun writeMultiFileClassPart$default (Lkotlinx/metadata/jvm/KotlinClassMetadata$Companion;Lkotlinx/metadata/KmPackage;Ljava/lang/String;[IIILjava/lang/Object;)Lkotlinx/metadata/jvm/KotlinClassMetadata$MultiFileClassPart;
public final fun writeSyntheticClass ()Lkotlinx/metadata/jvm/KotlinClassMetadata$SyntheticClass;
public final fun writeSyntheticClass ([I)Lkotlinx/metadata/jvm/KotlinClassMetadata$SyntheticClass;
public final fun writeSyntheticClass ([II)Lkotlinx/metadata/jvm/KotlinClassMetadata$SyntheticClass;
public static synthetic fun writeSyntheticClass$default (Lkotlinx/metadata/jvm/KotlinClassMetadata$Companion;[IIILjava/lang/Object;)Lkotlinx/metadata/jvm/KotlinClassMetadata$SyntheticClass;
}
@@ -1373,10 +1403,13 @@ public final class kotlinx/metadata/jvm/KotlinModuleMetadata {
public final fun getBytes ()[B
public static final fun read ([B)Lkotlinx/metadata/jvm/KotlinModuleMetadata;
public final fun toKmModule ()Lkotlinx/metadata/jvm/KmModule;
public static final fun write (Lkotlinx/metadata/jvm/KmModule;)Lkotlinx/metadata/jvm/KotlinModuleMetadata;
public static final fun write (Lkotlinx/metadata/jvm/KmModule;[I)Lkotlinx/metadata/jvm/KotlinModuleMetadata;
}
public final class kotlinx/metadata/jvm/KotlinModuleMetadata$Companion {
public final fun read ([B)Lkotlinx/metadata/jvm/KotlinModuleMetadata;
public final fun write (Lkotlinx/metadata/jvm/KmModule;)Lkotlinx/metadata/jvm/KotlinModuleMetadata;
public final fun write (Lkotlinx/metadata/jvm/KmModule;[I)Lkotlinx/metadata/jvm/KotlinModuleMetadata;
public static synthetic fun write$default (Lkotlinx/metadata/jvm/KotlinModuleMetadata$Companion;Lkotlinx/metadata/jvm/KmModule;[IILjava/lang/Object;)Lkotlinx/metadata/jvm/KotlinModuleMetadata;
}
@@ -409,6 +409,8 @@ sealed class KotlinClassMetadata(val annotationData: Metadata) {
*
* @throws IllegalArgumentException if [kmClass] is not correct and cannot be written or if [metadataVersion] is not supported for writing.
*/
@JvmStatic
@JvmOverloads
fun writeClass(
kmClass: KmClass,
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
@@ -427,6 +429,8 @@ sealed class KotlinClassMetadata(val annotationData: Metadata) {
*
* @throws IllegalArgumentException if [kmPackage] is not correct and cannot be written or if [metadataVersion] is not supported for writing.
*/
@JvmStatic
@JvmOverloads
fun writeFileFacade(
kmPackage: KmPackage,
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
@@ -445,6 +449,8 @@ sealed class KotlinClassMetadata(val annotationData: Metadata) {
*
* @throws IllegalArgumentException if [kmLambda] is not correct and cannot be written or if [metadataVersion] is not supported for writing.
*/
@JvmStatic
@JvmOverloads
fun writeLambda(
kmLambda: KmLambda,
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
@@ -463,6 +469,8 @@ sealed class KotlinClassMetadata(val annotationData: Metadata) {
*
* @throws IllegalArgumentException if [metadataVersion] is not supported for writing.
*/
@JvmStatic
@JvmOverloads
fun writeSyntheticClass(
metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
extraInt: Int = 0
@@ -479,6 +487,8 @@ sealed class KotlinClassMetadata(val annotationData: Metadata) {
*
* @throws IllegalArgumentException if [metadataVersion] is not supported for writing.
*/
@JvmStatic
@JvmOverloads
fun writeMultiFileClassFacade(
partClassNames: List<String>, metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION,
extraInt: Int = 0
@@ -495,6 +505,8 @@ sealed class KotlinClassMetadata(val annotationData: Metadata) {
*
* @throws IllegalArgumentException if [kmPackage] is not correct and cannot be written or if [metadataVersion] is not supported for writing.
*/
@JvmStatic
@JvmOverloads
fun writeMultiFileClassPart(
kmPackage: KmPackage,
facadeClassName: String,
@@ -594,4 +606,4 @@ internal const val VISITOR_API_MESSAGE =
"Visitor API is deprecated as excessive and cumbersome. Please use nodes (such as KmClass) and their properties."
internal const val WRITER_API_MESSAGE =
"Visitor Writer API is deprecated as excessive and cumbersome. Please use member functions of KotlinClassMetadata.Companion"
"Visitor Writer API is deprecated as excessive and cumbersome. Please use member functions of KotlinClassMetadata.Companion"
@@ -156,6 +156,8 @@ class KotlinModuleMetadata(@Suppress("MemberVisibilityCanBePrivate") val bytes:
* @throws IllegalArgumentException if [kmModule] is not correct and cannot be written or if [metadataVersion] is not supported for writing.
*/
@UnstableMetadataApi
@JvmStatic
@JvmOverloads
fun write(kmModule: KmModule, metadataVersion: IntArray = COMPATIBLE_METADATA_VERSION): KotlinModuleMetadata = wrapWriteIntoIAE {
Writer().also { kmModule.accept(it) }.write(metadataVersion)
}
@@ -11,16 +11,28 @@ import kotlinx.metadata.jvm.KotlinClassHeader;
import kotlinx.metadata.jvm.KotlinClassMetadata;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import java.util.Objects;
import static org.junit.Assert.*;
public class JavaUsageTest {
@SuppressWarnings("ConstantConditions")
@Test
public void testKotlinClassHeader() {
Metadata m = MetadataSmokeTest.class.getAnnotation(Metadata.class);
KmClass clazz1 = ((KotlinClassMetadata.Class) KotlinClassMetadata.read(m)).toKmClass();
KotlinClassHeader kh = new KotlinClassHeader(m.k(), m.mv(),m.d1(),m.d2(), m.xs(), m.pn(), m.xi());
KmClass clazz2 = ((KotlinClassMetadata.Class) KotlinClassMetadata.read(kh)).toKmClass();
KmClass clazz1 = ((KotlinClassMetadata.Class) Objects.requireNonNull(KotlinClassMetadata.read(m))).toKmClass();
KotlinClassHeader kh = new KotlinClassHeader(m.k(), m.mv(), m.d1(), m.d2(), m.xs(), m.pn(), m.xi());
KmClass clazz2 = ((KotlinClassMetadata.Class) Objects.requireNonNull(KotlinClassMetadata.read(kh))).toKmClass();
assertEquals(clazz1.getName(), clazz2.getName());
}
@Test
public void testWritingBackWithDefaults() {
Metadata m = MetadataSmokeTest.class.getAnnotation(Metadata.class);
KmClass clazz1 = ((KotlinClassMetadata.Class) Objects.requireNonNull(KotlinClassMetadata.read(m))).toKmClass();
Metadata written = KotlinClassMetadata.writeClass(clazz1).getAnnotationData();
assertArrayEquals(written.mv(), KotlinClassMetadata.COMPATIBLE_METADATA_VERSION);
assertEquals(0, written.xi());
}
}