Properly look up annotations

This commit is contained in:
Andrey Breslav
2013-10-28 13:52:03 +04:00
parent 0378551b72
commit 34234485a5
3 changed files with 12 additions and 9 deletions
@@ -20,11 +20,15 @@ import org.jetbrains.jet.lang.resolve.java.structure.JavaAnnotation
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyJavaAnnotationDescriptor import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyJavaAnnotationDescriptor
import org.jetbrains.jet.lang.resolve.java.structure.JavaAnnotationOwner import org.jetbrains.jet.lang.resolve.java.structure.JavaAnnotationOwner
import org.jetbrains.jet.lang.resolve.name.FqName
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver
fun LazyJavaResolverContextWithTypes.resolveAnnotations(javaAnnotations: Collection<JavaAnnotation>): List<AnnotationDescriptor> fun LazyJavaResolverContextWithTypes.resolveAnnotations(javaAnnotations: Collection<JavaAnnotation>): List<AnnotationDescriptor>
= javaAnnotations.map {jAnnotation -> LazyJavaAnnotationDescriptor(this, jAnnotation)} = javaAnnotations.map {jAnnotation -> LazyJavaAnnotationDescriptor(this, jAnnotation)}
// TODO: These methods are a workaround for inability to refactor List<AnnotationDescriptor> -> Annotations at the moment private fun GlobalJavaResolverContext.hasAnnotation(owner: JavaAnnotationOwner, annotationFqName: FqName): Boolean
fun JavaAnnotationOwner.hasMutableAnnotation(): Boolean = false = owner.findAnnotation(annotationFqName) != null || externalAnnotationResolver.findExternalAnnotation(owner, annotationFqName) != null
fun JavaAnnotationOwner.hasReadOnlyAnnotation(): Boolean = false
fun JavaAnnotationOwner.hasNotNullAnnotation(): Boolean = false fun GlobalJavaResolverContext.hasMutableAnnotation(owner: JavaAnnotationOwner): Boolean = hasAnnotation(owner, JavaAnnotationResolver.JETBRAINS_MUTABLE_ANNOTATION)
fun GlobalJavaResolverContext.hasReadOnlyAnnotation(owner: JavaAnnotationOwner): Boolean = hasAnnotation(owner, JavaAnnotationResolver.JETBRAINS_READONLY_ANNOTATION)
fun GlobalJavaResolverContext.hasNotNullAnnotation(owner: JavaAnnotationOwner): Boolean = hasAnnotation(owner, JavaAnnotationResolver.JETBRAINS_NOT_NULL_ANNOTATION)
@@ -94,7 +94,7 @@ public abstract class LazyJavaMemberScope(
val valueParameters = resolveValueParameters(innerC, functionDescriptorImpl, method.getValueParameters()) val valueParameters = resolveValueParameters(innerC, functionDescriptorImpl, method.getValueParameters())
val returnTypeAttrs = LazyJavaTypeAttributes(c, method, TypeUsage.MEMBER_SIGNATURE_COVARIANT) { val returnTypeAttrs = LazyJavaTypeAttributes(c, method, TypeUsage.MEMBER_SIGNATURE_COVARIANT) {
if (method.hasReadOnlyAnnotation() && !method.hasMutableAnnotation()) if (c.hasReadOnlyAnnotation(method) && !c.hasMutableAnnotation(method))
TypeUsage.MEMBER_SIGNATURE_CONTRAVARIANT TypeUsage.MEMBER_SIGNATURE_CONTRAVARIANT
else else
TypeUsage.MEMBER_SIGNATURE_COVARIANT TypeUsage.MEMBER_SIGNATURE_COVARIANT
@@ -155,7 +155,7 @@ public abstract class LazyJavaMemberScope(
val (index, javaParameter) = pair val (index, javaParameter) = pair
val typeUsage = LazyJavaTypeAttributes(c, javaParameter, TypeUsage.MEMBER_SIGNATURE_CONTRAVARIANT) { val typeUsage = LazyJavaTypeAttributes(c, javaParameter, TypeUsage.MEMBER_SIGNATURE_CONTRAVARIANT) {
javaParameter.hasMutableAnnotation().iif(TypeUsage.MEMBER_SIGNATURE_COVARIANT, TypeUsage.MEMBER_SIGNATURE_CONTRAVARIANT) c.hasMutableAnnotation(javaParameter).iif(TypeUsage.MEMBER_SIGNATURE_COVARIANT, TypeUsage.MEMBER_SIGNATURE_CONTRAVARIANT)
} }
val (outType, varargElementType) = val (outType, varargElementType) =
@@ -168,7 +168,7 @@ public abstract class LazyJavaMemberScope(
} }
else { else {
val jetType = c.typeResolver.transformJavaType(javaParameter.getType(), typeUsage) val jetType = c.typeResolver.transformJavaType(javaParameter.getType(), typeUsage)
if (jetType.isNullable() && javaParameter.hasNotNullAnnotation()) if (jetType.isNullable() && c.hasNotNullAnnotation(javaParameter))
Pair(TypeUtils.makeNotNullable(jetType), null) Pair(TypeUtils.makeNotNullable(jetType), null)
else Pair(jetType, null) else Pair(jetType, null)
} }
@@ -89,7 +89,6 @@ class LazyJavaTypeResolver(
private val attr: JavaTypeAttributes private val attr: JavaTypeAttributes
) : LazyType(c.storageManager) { ) : LazyType(c.storageManager) {
override fun computeTypeConstructor(): TypeConstructor { override fun computeTypeConstructor(): TypeConstructor {
val classifier = javaType.getClassifier() val classifier = javaType.getClassifier()
if (classifier == null) { if (classifier == null) {
@@ -239,7 +238,7 @@ class LazyJavaTypeAttributes(
computeHowThisTypeIsUsedAccrodingToAnnotations computeHowThisTypeIsUsedAccrodingToAnnotations
) )
override val isMarkedNotNull: Boolean by c.storageManager.createLazyValue { annotationOwner.hasNotNullAnnotation() } override val isMarkedNotNull: Boolean by c.storageManager.createLazyValue { c.hasNotNullAnnotation(annotationOwner) }
} }
fun TypeUsage.toAttributes() = object : JavaTypeAttributes { fun TypeUsage.toAttributes() = object : JavaTypeAttributes {