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.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)
|
||||||
+3
-3
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user