Properly look up annotations
This commit is contained in:
+8
-4
@@ -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)
|
||||
+3
-3
@@ -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)
|
||||
}
|
||||
|
||||
+1
-2
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user