diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/annotationUtils.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/annotationUtils.kt index f85ff17dd01..333ca67b74c 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/annotationUtils.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/annotationUtils.kt @@ -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): List = javaAnnotations.map {jAnnotation -> LazyJavaAnnotationDescriptor(this, jAnnotation)} -// TODO: These methods are a workaround for inability to refactor List -> Annotations at the moment -fun JavaAnnotationOwner.hasMutableAnnotation(): Boolean = false -fun JavaAnnotationOwner.hasReadOnlyAnnotation(): Boolean = false -fun JavaAnnotationOwner.hasNotNullAnnotation(): Boolean = false \ No newline at end of file +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) \ No newline at end of file diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt index 679a583c5bb..1b75d2ebe43 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt @@ -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) } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/types/LazyJavaTypeResolver.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/types/LazyJavaTypeResolver.kt index 8e4e5b9300a..ebf7d7818f1 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/types/LazyJavaTypeResolver.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/types/LazyJavaTypeResolver.kt @@ -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 {