[KAPT] Warn about usage of types from default package

Java doesn't support import from default package. 
We can't fix it, so we warn about it.
#KT-36743
This commit is contained in:
Andrey Zinovyev
2021-02-09 13:32:27 +03:00
committed by GitHub
parent 58d903c638
commit 10cc86c975
11 changed files with 386 additions and 33 deletions
@@ -0,0 +1,45 @@
// STRICT
//FILE: test/ClassRefAnnotation.java
package test;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface ClassRefAnnotation {
Class<?>[] value();
}
//FILE: a.kt
class RootClass
class AnotherRootClass
//FILE: b.kt
package test
import java.lang.Number as JavaNumber
import RootClass
import AnotherRootClass as Arc
interface PackedClass {
fun someMethod(): RootClass
fun otherMethod(): JavaNumber
fun oneMoreMethod(): Arc
}
@ClassRefAnnotation(RootClass::class)
class PackedWithAnnotation
// EXPECTED_ERROR(kotlin:11:5) cannot find symbol
// EXPECTED_ERROR(kotlin:14:1) cannot find symbol
// EXPECTED_ERROR(kotlin:9:5) cannot find symbol
// EXPECTED_ERROR(other:-1:-1) test.PackedClass: Can't reference type 'RootClass' from default package in Java stub.
// EXPECTED_ERROR(other:-1:-1) test.PackedClass: Can't reference type 'AnotherRootClass' from default package in Java stub.
// EXPECTED_ERROR(other:-1:-1) test.PackedWithAnnotation: Can't reference type 'RootClass' from default package in Java stub.
@@ -0,0 +1,72 @@
import java.lang.System;
@kotlin.Metadata()
public final class AnotherRootClass {
public AnotherRootClass() {
super();
}
}
////////////////////
import java.lang.System;
@kotlin.Metadata()
public final class RootClass {
public RootClass() {
super();
}
}
////////////////////
package test;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
@Target(value = {ElementType.TYPE, ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface ClassRefAnnotation {
Class<?>[] value();
}
////////////////////
package test;
import java.lang.System;
@kotlin.Metadata()
public abstract interface PackedClass {
@org.jetbrains.annotations.NotNull()
public abstract RootClass someMethod();
@org.jetbrains.annotations.NotNull()
public abstract java.lang.Number otherMethod();
@org.jetbrains.annotations.NotNull()
public abstract AnotherRootClass oneMoreMethod();
}
////////////////////
package test;
import java.lang.System;
@kotlin.Metadata()
@ClassRefAnnotation(value = {RootClass.class})
public final class PackedWithAnnotation {
public PackedWithAnnotation() {
super();
}
}
@@ -0,0 +1,46 @@
// CORRECT_ERROR_TYPES
// STRICT
//FILE: test/ClassRefAnnotation.java
package test;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface ClassRefAnnotation {
Class<?>[] value();
}
//FILE: a.kt
class RootClass
class AnotherRootClass
//FILE: b.kt
package test
import java.lang.Number as JavaNumber
import RootClass
import AnotherRootClass as Arc
interface PackedClass {
fun someMethod(): RootClass
fun otherMethod(): JavaNumber
fun oneMoreMethod(): Arc
}
@ClassRefAnnotation(RootClass::class)
class PackedWithAnnotation
// EXPECTED_ERROR(kotlin:11:5) cannot find symbol
// EXPECTED_ERROR(kotlin:14:1) cannot find symbol
// EXPECTED_ERROR(kotlin:9:5) cannot find symbol
// EXPECTED_ERROR(other:-1:-1) test.PackedClass: Can't reference type 'RootClass' from default package in Java stub.
// EXPECTED_ERROR(other:-1:-1) test.PackedClass: Can't reference type 'AnotherRootClass' from default package in Java stub.
// EXPECTED_ERROR(other:-1:-1) test.PackedWithAnnotation: Can't reference type 'RootClass' from default package in Java stub.
@@ -0,0 +1,72 @@
import java.lang.System;
@kotlin.Metadata()
public final class AnotherRootClass {
public AnotherRootClass() {
super();
}
}
////////////////////
import java.lang.System;
@kotlin.Metadata()
public final class RootClass {
public RootClass() {
super();
}
}
////////////////////
package test;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
@Target(value = {ElementType.TYPE, ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface ClassRefAnnotation {
Class<?>[] value();
}
////////////////////
package test;
import java.lang.Number;
@kotlin.Metadata()
public abstract interface PackedClass {
@org.jetbrains.annotations.NotNull()
public abstract RootClass someMethod();
@org.jetbrains.annotations.NotNull()
public abstract java.lang.Number otherMethod();
@org.jetbrains.annotations.NotNull()
public abstract AnotherRootClass oneMoreMethod();
}
////////////////////
package test;
import java.lang.Number;
@kotlin.Metadata()
@ClassRefAnnotation(value = {RootClass.class})
public final class PackedWithAnnotation {
public PackedWithAnnotation() {
super();
}
}