Correct nullability when loading annotations from Java
This commit is contained in:
+3
-1
@@ -33,6 +33,7 @@ import org.jetbrains.jet.lang.resolve.java.lazy.types.toAttributes
|
|||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver
|
||||||
import org.jetbrains.jet.renderer.DescriptorRenderer
|
import org.jetbrains.jet.renderer.DescriptorRenderer
|
||||||
import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap
|
import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap
|
||||||
|
import org.jetbrains.jet.lang.types.TypeUtils
|
||||||
|
|
||||||
private object DEPRECATED_IN_JAVA : JavaLiteralAnnotationArgument {
|
private object DEPRECATED_IN_JAVA : JavaLiteralAnnotationArgument {
|
||||||
override fun getName(): Name? = null
|
override fun getName(): Name? = null
|
||||||
@@ -143,7 +144,8 @@ class LazyJavaAnnotationDescriptor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun resolveFromJavaClassObjectType(javaType: JavaType): CompileTimeConstant<*>? {
|
private fun resolveFromJavaClassObjectType(javaType: JavaType): CompileTimeConstant<*>? {
|
||||||
val `type` = c.typeResolver.transformJavaType(javaType, TypeUsage.MEMBER_SIGNATURE_INVARIANT.toAttributes())
|
// Class type is never nullable in 'Foo.class' in Java
|
||||||
|
val `type` = TypeUtils.makeNotNullable(c.typeResolver.transformJavaType(javaType, TypeUsage.MEMBER_SIGNATURE_INVARIANT.toAttributes()))
|
||||||
val jlClass = c.javaClassResolver.resolveClassByFqName(JavaAnnotationArgumentResolver.JL_CLASS_FQ_NAME)
|
val jlClass = c.javaClassResolver.resolveClassByFqName(JavaAnnotationArgumentResolver.JL_CLASS_FQ_NAME)
|
||||||
if (jlClass == null) return null
|
if (jlClass == null) return null
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -30,11 +30,9 @@ import org.jetbrains.jet.lang.resolve.java.resolver.JavaConstructorResolver
|
|||||||
import org.jetbrains.jet.utils.*
|
import org.jetbrains.jet.utils.*
|
||||||
import java.util.ArrayList
|
import java.util.ArrayList
|
||||||
import org.jetbrains.jet.lang.resolve.java.lazy.types.toAttributes
|
import org.jetbrains.jet.lang.resolve.java.lazy.types.toAttributes
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaMember
|
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils
|
||||||
import org.jetbrains.jet.lang.descriptors.impl.EnumEntrySyntheticClassDescriptor
|
import org.jetbrains.jet.lang.descriptors.impl.EnumEntrySyntheticClassDescriptor
|
||||||
import org.jetbrains.jet.storage.get
|
import org.jetbrains.jet.lang.types.TypeUtils
|
||||||
|
|
||||||
public class LazyJavaClassMemberScope(
|
public class LazyJavaClassMemberScope(
|
||||||
c: LazyJavaResolverContextWithTypes,
|
c: LazyJavaResolverContextWithTypes,
|
||||||
@@ -134,9 +132,11 @@ public class LazyJavaClassMemberScope(
|
|||||||
index,
|
index,
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
method.getName(),
|
method.getName(),
|
||||||
returnType,
|
// Parameters of annotation constructors in Java are never nullable
|
||||||
|
TypeUtils.makeNotNullable(returnType),
|
||||||
method.hasAnnotationParameterDefaultValue(),
|
method.hasAnnotationParameterDefaultValue(),
|
||||||
varargElementType
|
// Nulls are not allowed in annotation arguments in Java
|
||||||
|
varargElementType?.let { TypeUtils.makeNotNullable(it) }
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-1
@@ -117,7 +117,10 @@ public abstract class LazyJavaMemberScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val returnJavaType = method.getReturnType() ?: throw IllegalStateException("Constructor passed as method: $method")
|
val returnJavaType = method.getReturnType() ?: throw IllegalStateException("Constructor passed as method: $method")
|
||||||
val returnType = c.typeResolver.transformJavaType(returnJavaType, returnTypeAttrs)
|
val returnType = c.typeResolver.transformJavaType(returnJavaType, returnTypeAttrs).let {
|
||||||
|
// Annotation arguments are never null in Java
|
||||||
|
if (method.getContainingClass().isAnnotationType()) TypeUtils.makeNotNullable(it) else it
|
||||||
|
}
|
||||||
|
|
||||||
val signatureErrors: MutableList<String>
|
val signatureErrors: MutableList<String>
|
||||||
val superFunctions: List<FunctionDescriptor>
|
val superFunctions: List<FunctionDescriptor>
|
||||||
|
|||||||
Reference in New Issue
Block a user