Kapt: Exclude all primitive Java constants from inlining (String is still inlined) (KT-20878)

This commit is contained in:
Yan Zhulanow
2017-11-03 13:43:53 +09:00
parent 6ca5787799
commit 84e5fa38bb
8 changed files with 350 additions and 32 deletions
+40 -1
View File
@@ -1,3 +1,8 @@
// EXPECTED_ERROR class B is public, should be declared in a file named B.java
// EXPECTED_ERROR class R is public, should be declared in a file named R.java
// EXPECTED_ERROR class R is public, should be declared in a file named R.java
// EXPECTED_ERROR class R2 is public, should be declared in a file named R2.java
//FILE: lib/R.java
package lib;
@@ -16,6 +21,15 @@ public class R {
}
}
//FILE: app/R2.java
package app;
public class R2 { // For ButterKnife library project support
public static class layout {
public final static int mainActivity = 100;
}
}
//FILE: app/B.java
package app;
@@ -23,6 +37,16 @@ public class B {
public static class id {
public final static int textView = 200;
}
public final static boolean a1 = false;
public final static byte a2 = 1;
public final static int a3 = 2;
public final static short a4 = 3;
public final static long a5 = 4L;
public final static char a6 = '5';
public final static float a7 = 6.0f;
public final static double a8 = 7.0;
public final static String a9 = "A";
}
//FILE: test.kt
@@ -33,6 +57,17 @@ import lib.R.id.textView
annotation class Bind(val id: Int)
annotation class Anno(
val a1: Boolean,
val a2: Byte,
val a3: Int,
val a4: Short,
val a5: Long,
val a6: Char,
val a7: Float,
val a8: Double,
val a9: String)
class MyActivity {
@Bind(LibR.id.textView)
fun foo() {}
@@ -46,6 +81,10 @@ class MyActivity {
@Bind(R.layout.mainActivity)
fun foo4() {}
@Bind(R2.layout.mainActivity)
@Anno(a1 = B.a1, a2 = B.a2, a3 = B.a3, a4 = B.a4, a5 = B.a5, a6 = B.a6, a7 = B.a7, a8 = B.a8, a9 = B.a9)
fun foo5() {}
@Bind(B.id.textView)
fun notResource() {}
fun plainIntConstant() {}
}
+119 -2
View File
@@ -1,5 +1,117 @@
package app;
public class B {
public B() {
super();
}
public static class id {
public id() {
super();
}
public static final int textView = 200;
}
public static final boolean a1 = false;
public static final byte a2 = 1;
public static final int a3 = 2;
public static final short a4 = 3;
public static final long a5 = 4L;
public static final char a6 = '5';
public static final float a7 = 6.0F;
public static final double a8 = 7.0;
public static final String a9 = "A";
}
////////////////////
package app;
public class R2 {
public R2() {
super();
}
public static class layout {
public layout() {
super();
}
public static final int mainActivity = 100;
}
}
////////////////////
package lib;
public class R {
public R() {
super();
}
public static class id {
public id() {
super();
}
public static final int textView = 100;
}
}
////////////////////
package app;
public class R {
public R() {
super();
}
public static class layout {
public layout() {
super();
}
public static final int mainActivity = 100;
}
}
////////////////////
package app;
@kotlin.Metadata()
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
public abstract @interface Anno {
public abstract boolean a1();
public abstract byte a2();
public abstract int a3();
public abstract short a4();
public abstract long a5();
public abstract char a6();
public abstract float a7();
public abstract double a8();
public abstract java.lang.String a9();
}
////////////////////
package app;
@kotlin.Metadata()
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
public abstract @interface Bind {
@@ -30,8 +142,13 @@ public final class MyActivity {
public final void foo4() {
}
@Bind(id = 200)
public final void notResource() {
@Anno(a1 = app.B.a1, a2 = app.B.a2, a3 = app.B.a3, a4 = app.B.a4, a5 = app.B.a5, a6 = app.B.a6, a7 = app.B.a7, a8 = app.B.a8, a9 = "A")
@Bind(id = app.R2.layout.mainActivity)
public final void foo5() {
}
@Bind(id = app.B.id.textView)
public final void plainIntConstant() {
}
public MyActivity() {
@@ -1,3 +1,6 @@
// EXPECTED_ERROR class J$B is public, should be declared in a file named J$B.java
// EXPECTED_ERROR class JavaClass is public, should be declared in a file named JavaClass.java
// FILE: JavaClass.java
public class JavaClass {
public class Foo {
@@ -1,3 +1,79 @@
public class J$B {
public J$B() {
super();
}
public class C {
public C() {
super();
}
}
public class D$E {
public D$E() {
super();
}
class F {
F() {
super();
}
}
class F$G {
F$G() {
super();
}
}
}
public class D$$E {
public D$$E() {
super();
}
}
public class D$$$E {
public D$$$E() {
super();
}
}
}
////////////////////
public class JavaClass {
public JavaClass() {
super();
}
public class Foo {
public Foo() {
super();
}
public class Bar {
public Bar() {
super();
}
}
}
}
////////////////////
@kotlin.Metadata()
public final class A$B {
@org.jetbrains.annotations.NotNull()
@@ -1,3 +1,5 @@
// EXPECTED_ERROR class J$B is public, should be declared in a file named J$B.java
// FILE: test/JavaClass.java
package test;
@@ -1,5 +1,83 @@
package test;
public class J$B {
public J$B() {
super();
}
public class C {
public C() {
super();
}
}
public class D$E {
public D$E() {
super();
}
class F {
F() {
super();
}
}
class F$G {
F$G() {
super();
}
}
}
public class D$$E {
public D$$E() {
super();
}
}
public class D$$$E {
public D$$$E() {
super();
}
}
}
////////////////////
package test;
class JavaClass {
JavaClass() {
super();
}
class Foo {
Foo() {
super();
}
class Bar {
Bar() {
super();
}
}
}
}
////////////////////
package test;
@kotlin.Metadata()
public final class A$B {
@org.jetbrains.annotations.NotNull()