Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

List List MutableList MyTypeAlias !" !" !" !" List List List List

Slide 4

Slide 4 text

class object data class sealed class !" !" !" !" class class class abstract class

Slide 5

Slide 5 text

data class Sample(val counter: Int)

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

public final class Sample { private final int counter; public final int getCounter() { return this.counter; } public Sample(int counter) { this.counter = counter; } public final int component1() { return this.counter; } @NotNull public final Sample copy(int counter) { return new Sample(counter); } // $FF: synthetic method // $FF: bridge method @NotNull public static Sample copy$default(Sample var0, int var1, int var2, Object var3) { if((var2 & 1) != 0) { var1 = var0.counter; } return var0.copy(var1); } public String toString() { return "Sample(counter=" + this.counter + ")"; } public int hashCode() { return this.counter; } public boolean equals(Object var1) { if(this != var1) { if(var1 instanceof Sample) { Sample var2 = (Sample)var1; if(this.counter == var2.counter) { return true; } } return false; } else { return true; } } } @Metadata( k = 1, mv = {1, 1, 10}, bv = {1, 0, 2}, d1 = {"\u0000 \n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0000\n\u0002\u0010\b\n\u0002\b\u0006\n\u0002\u0010\u000b\n\u0002\b\u0003\n\u0002\u0010\u000e\n\u0000\b\u0086\b\u0018\u00002\u00020\u0001B\r\u0012\u0006\u0010\u0002\u001a\u0010\ d2 = {"LSample;", "", "counter", "", "(I)V", "getCounter", "()I", "component1", "copy", "equals", "", "other", "hashCode", "toString", "", "production sources for module app"} ))

Slide 10

Slide 10 text

@Metadata( k = 1, mv = {1, 1, 10}, bv = {1, 0, 2}, d1 = {"\u0000 \n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0000\n\u0002\u0 d2 = {"LSample;", "", "counter", "", "(I)V", "getCounter", "()I", "compon ))

Slide 11

Slide 11 text

@Metadata k mv bv d1 d2 xs xi pn

Slide 12

Slide 12 text

@Metadata 1. kind 2. metadata version 3. bytecode version 4. data1 5. data2 6. extra string 7. extra int 8. package name

Slide 13

Slide 13 text

8. package name fully qualified package (if != from Java) (ie. @JvmPackageName) (no classes!)

Slide 14

Slide 14 text

7. extra int 0 -> multi-file class facade or part 1 -> compiled by a pre-release version 2 -> Kotlin script source file (.kts)

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

“it depends” mostly Protocol Buffers 4. data1 5. data2 6. extra string

Slide 17

Slide 17 text

2. metadata version 3. bytecode version ...boooring

Slide 18

Slide 18 text

1. kind 1 -> Class 2 -> File 3 -> Synthetic class 4 -> Multi-file class facade 5 -> Multi-file class part

Slide 19

Slide 19 text

* nullability (also nested) * secondary constructors * companion object name * properties list * delegated types * internal visibility * sealed class hierarchy * type aliases (declaration and usage) * generic types (also in/out /*, reified) * classes (data/sealed/object/companion) * property (var/getter/setter/const/lateinit) * value parameter (default/crossinline/noinline) * function (operator/infix/inline/tailrec/external)

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

( )

Slide 22

Slide 22 text

square/moshi

Slide 23

Slide 23 text

square/moshi * * not the actual logo

Slide 24

Slide 24 text

google/room

Slide 25

Slide 25 text

google/room

Slide 26

Slide 26 text

google/room

Slide 27

Slide 27 text

jetbrains/kotlinx-metadata-jvm

Slide 28

Slide 28 text

kotlin-metadata roadmap - use jetbrains/kotlinx-metadata-jvm (shadowed) - wrap Types/Elements in idiomatic Kotlin API - expose type mapping Java <-> Kotlin - KotlinPoet integration - documentation–HAHAHA JUST KIDDING

Slide 29

Slide 29 text

goo.gl/nEcGmR -> JetBrains/kotlinx-metadata-jvm goo.gl/V26u5C -> Takhion/kotlin-metadata goo.gl/yWgvor -> Exploring Moshi’s Kotlin Code Gen goo.gl/mZdccu -> Moshi Kotlin Code Gen: An Open Source Story goo.gl/FPKqZ7 -> Λrrow annotation processors goo.gl/UDNmvh -> Moshi annotation processor goo.gl/GBHMqs -> Room annotation processor

Slide 30

Slide 30 text

Eugenio Marle!i @workingkills bit.ly/kotlin-metadata-apt