Correct nullability when loading annotations from Java

This commit is contained in:
Andrey Breslav
2014-01-15 10:00:54 +04:00
parent 8be8ab9c9b
commit 6fe122e7db
3 changed files with 12 additions and 7 deletions
@@ -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.renderer.DescriptorRenderer
import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap
import org.jetbrains.jet.lang.types.TypeUtils
private object DEPRECATED_IN_JAVA : JavaLiteralAnnotationArgument {
override fun getName(): Name? = null
@@ -143,7 +144,8 @@ class LazyJavaAnnotationDescriptor(
}
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)
if (jlClass == null) return null
@@ -30,11 +30,9 @@ import org.jetbrains.jet.lang.resolve.java.resolver.JavaConstructorResolver
import org.jetbrains.jet.utils.*
import java.util.ArrayList
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.descriptors.impl.EnumEntrySyntheticClassDescriptor
import org.jetbrains.jet.storage.get
import org.jetbrains.jet.lang.types.TypeUtils
public class LazyJavaClassMemberScope(
c: LazyJavaResolverContextWithTypes,
@@ -134,9 +132,11 @@ public class LazyJavaClassMemberScope(
index,
Collections.emptyList(),
method.getName(),
returnType,
// Parameters of annotation constructors in Java are never nullable
TypeUtils.makeNotNullable(returnType),
method.hasAnnotationParameterDefaultValue(),
varargElementType
// Nulls are not allowed in annotation arguments in Java
varargElementType?.let { TypeUtils.makeNotNullable(it) }
))
}
@@ -117,7 +117,10 @@ public abstract class LazyJavaMemberScope(
}
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 superFunctions: List<FunctionDescriptor>