Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

List List MutableList MyTypeAlias -> -> -> -> List List List List

Slide 6

Slide 6 text

class object data class sealed class -> -> -> -> class class class abstract class

Slide 7

Slide 7 text

data class Sample(val counter: Int)

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 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, 6}, bv = {1, 0, 1}, 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 12

Slide 12 text

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

Slide 13

Slide 13 text

@Metadata k mv bv d1 d2 xs xi

Slide 14

Slide 14 text

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

Slide 15

Slide 15 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 16

Slide 16 text

No content

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 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 21

Slide 21 text

warning: PLEASE TRY THIS AT HOME

Slide 22

Slide 22 text

goo.gl/INLPDl -> The Future of Kotlin goo.gl/8oFRaU -> kotlin-metadata-samples (Coming Soon™) goo.gl/UiT6yh -> descriptors.proto

Slide 23

Slide 23 text

bit.ly/unleash-kotlin-metadata Eugenio Marletti @workingkills