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.resolve.java.lazy.descriptors.LazyJavaAnnotationDescriptor
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>
= javaAnnotations.map {jAnnotation -> LazyJavaAnnotationDescriptor(this, jAnnotation)}
// TODO: These methods are a workaround for inability to refactor List<AnnotationDescriptor> -> Annotations at the moment
fun JavaAnnotationOwner.hasMutableAnnotation(): Boolean = false
fun JavaAnnotationOwner.hasReadOnlyAnnotation(): Boolean = false
fun JavaAnnotationOwner.hasNotNullAnnotation(): Boolean = false
private fun GlobalJavaResolverContext.hasAnnotation(owner: JavaAnnotationOwner, annotationFqName: FqName): Boolean
= owner.findAnnotation(annotationFqName) != null || externalAnnotationResolver.findExternalAnnotation(owner, annotationFqName) != null
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 returnTypeAttrs = LazyJavaTypeAttributes(c, method, TypeUsage.MEMBER_SIGNATURE_COVARIANT) {
if (method.hasReadOnlyAnnotation() && !method.hasMutableAnnotation())
if (c.hasReadOnlyAnnotation(method) && !c.hasMutableAnnotation(method))
TypeUsage.MEMBER_SIGNATURE_CONTRAVARIANT
else
TypeUsage.MEMBER_SIGNATURE_COVARIANT
@@ -155,7 +155,7 @@ public abstract class LazyJavaMemberScope(
val (index, javaParameter) = pair
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) =
@@ -168,7 +168,7 @@ public abstract class LazyJavaMemberScope(
}
else {
val jetType = c.typeResolver.transformJavaType(javaParameter.getType(), typeUsage)
if (jetType.isNullable() && javaParameter.hasNotNullAnnotation())
if (jetType.isNullable() && c.hasNotNullAnnotation(javaParameter))
Pair(TypeUtils.makeNotNullable(jetType), null)
else Pair(jetType, null)
}
@@ -89,7 +89,6 @@ class LazyJavaTypeResolver(
private val attr: JavaTypeAttributes
) : LazyType(c.storageManager) {
override fun computeTypeConstructor(): TypeConstructor {
val classifier = javaType.getClassifier()
if (classifier == null) {
@@ -239,7 +238,7 @@ class LazyJavaTypeAttributes(
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 {