AnnotationLoadingUtil created. Relevant code/constants moved there
This commit is contained in:
committed by
Alexander Udalov
parent
aed1ccf771
commit
e119ca27ca
+43
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright 2010-2014 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.jet.lang.resolve.java;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
|
||||
import static org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils.fqNameByClass;
|
||||
|
||||
public final class AnnotationLoadingUtil {
|
||||
public static final Name DEFAULT_ANNOTATION_MEMBER_NAME = Name.identifier("value");
|
||||
public static final FqName JETBRAINS_NOT_NULL_ANNOTATION = fqNameByClass(NotNull.class);
|
||||
public static final FqName JETBRAINS_NULLABLE_ANNOTATION = fqNameByClass(Nullable.class);
|
||||
public static final FqName JETBRAINS_MUTABLE_ANNOTATION = new FqName("org.jetbrains.annotations.Mutable");
|
||||
public static final FqName JETBRAINS_READONLY_ANNOTATION = new FqName("org.jetbrains.annotations.ReadOnly");
|
||||
public static final FqName JL_CLASS_FQ_NAME = new FqName("java.lang.Class");
|
||||
|
||||
public static boolean isSpecialAnnotation(@NotNull FqName fqName) {
|
||||
return fqName.asString().startsWith("jet.runtime.typeinfo.")
|
||||
|| fqName.equals(JETBRAINS_NOT_NULL_ANNOTATION)
|
||||
|| fqName.equals(JvmAnnotationNames.KOTLIN_CLASS)
|
||||
|| fqName.equals(JvmAnnotationNames.KOTLIN_PACKAGE);
|
||||
}
|
||||
|
||||
private AnnotationLoadingUtil() {}
|
||||
}
|
||||
+5
-5
@@ -19,16 +19,16 @@ package org.jetbrains.jet.lang.resolve.java.lazy
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaAnnotation
|
||||
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
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.Annotations
|
||||
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.AnnotationLoadingUtil
|
||||
|
||||
class LazyJavaAnnotations(c: LazyJavaResolverContextWithTypes, val annotationOwner: JavaAnnotationOwner) : Annotations {
|
||||
private val annotationDescriptors = c.storageManager.createMemoizedFunctionWithNullableValues {
|
||||
(jAnnotation: JavaAnnotation) ->
|
||||
val fqName = jAnnotation.getFqName()
|
||||
if (fqName == null || JavaAnnotationResolver.isSpecialAnnotation(fqName)) {
|
||||
if (fqName == null || AnnotationLoadingUtil.isSpecialAnnotation(fqName)) {
|
||||
null
|
||||
}
|
||||
else LazyJavaAnnotationDescriptor(c, jAnnotation)
|
||||
@@ -54,6 +54,6 @@ fun LazyJavaResolverContextWithTypes.resolveAnnotations(annotationsOwner: JavaAn
|
||||
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)
|
||||
fun GlobalJavaResolverContext.hasMutableAnnotation(owner: JavaAnnotationOwner): Boolean = hasAnnotation(owner, AnnotationLoadingUtil.JETBRAINS_MUTABLE_ANNOTATION)
|
||||
fun GlobalJavaResolverContext.hasReadOnlyAnnotation(owner: JavaAnnotationOwner): Boolean = hasAnnotation(owner, AnnotationLoadingUtil.JETBRAINS_READONLY_ANNOTATION)
|
||||
fun GlobalJavaResolverContext.hasNotNullAnnotation(owner: JavaAnnotationOwner): Boolean = hasAnnotation(owner, AnnotationLoadingUtil.JETBRAINS_NOT_NULL_ANNOTATION)
|
||||
|
||||
+5
-6
@@ -13,8 +13,7 @@ import org.jetbrains.jet.lang.resolve.name.FqName
|
||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor
|
||||
import org.jetbrains.jet.lang.descriptors.VariableDescriptor
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationArgumentResolver
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver.*
|
||||
import org.jetbrains.jet.lang.resolve.java.AnnotationLoadingUtil.*
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils
|
||||
@@ -30,11 +29,11 @@ import org.jetbrains.jet.utils.valuesToMap
|
||||
import org.jetbrains.jet.utils.keysToMap
|
||||
import org.jetbrains.jet.utils.keysToMapExceptNulls
|
||||
import org.jetbrains.jet.lang.resolve.java.lazy.types.toAttributes
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver
|
||||
import org.jetbrains.jet.renderer.DescriptorRenderer
|
||||
import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap
|
||||
import org.jetbrains.jet.lang.types.TypeUtils
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.resolveCompileTimeConstantValue
|
||||
import org.jetbrains.jet.lang.resolve.java.AnnotationLoadingUtil
|
||||
|
||||
private object DEPRECATED_IN_JAVA : JavaLiteralAnnotationArgument {
|
||||
override fun getName(): Name? = null
|
||||
@@ -70,7 +69,7 @@ class LazyJavaAnnotationDescriptor(
|
||||
val nameToArg = _nameToArgument()
|
||||
|
||||
var javaAnnotationArgument = nameToArg[valueParameter.getName()]
|
||||
if (javaAnnotationArgument == null && valueParameter.getName() == JavaAnnotationResolver.DEFAULT_ANNOTATION_MEMBER_NAME) {
|
||||
if (javaAnnotationArgument == null && valueParameter.getName() == DEFAULT_ANNOTATION_MEMBER_NAME) {
|
||||
javaAnnotationArgument = nameToArg[null]
|
||||
}
|
||||
|
||||
@@ -108,7 +107,7 @@ class LazyJavaAnnotationDescriptor(
|
||||
val fqName = javaAnnotation.getFqName()
|
||||
if (fqName == null) return null
|
||||
|
||||
if (JavaAnnotationResolver.isSpecialAnnotation(fqName)) {
|
||||
if (AnnotationLoadingUtil.isSpecialAnnotation(fqName)) {
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -147,7 +146,7 @@ class LazyJavaAnnotationDescriptor(
|
||||
private fun resolveFromJavaClassObjectType(javaType: JavaType): CompileTimeConstant<*>? {
|
||||
// Class type is never nullable in 'Foo.class' in Java
|
||||
val `type` = TypeUtils.makeNotNullable(c.typeResolver.transformJavaType(javaType, TypeUsage.MEMBER_SIGNATURE_INVARIANT.toAttributes()))
|
||||
val jlClass = c.javaClassResolver.resolveClassByFqName(JavaAnnotationArgumentResolver.JL_CLASS_FQ_NAME)
|
||||
val jlClass = c.javaClassResolver.resolveClassByFqName(JL_CLASS_FQ_NAME)
|
||||
if (jlClass == null) return null
|
||||
|
||||
val arguments = listOf(TypeProjectionImpl(`type`))
|
||||
|
||||
+2
-2
@@ -24,11 +24,11 @@ import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.resolve.java.AnnotationLoadingUtil;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.constants.StringValue;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmPrimitiveType;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.TypeUsage;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
|
||||
@@ -109,7 +109,7 @@ public class JavaToKotlinClassMap extends JavaToKotlinClassMapBuilder implements
|
||||
AnnotationDescriptorImpl annotation = new AnnotationDescriptorImpl();
|
||||
annotation.setAnnotationType(annotationClass.getDefaultType());
|
||||
ValueParameterDescriptor value = DescriptorResolverUtils.getAnnotationParameterByName(
|
||||
JavaAnnotationResolver.DEFAULT_ANNOTATION_MEMBER_NAME, annotationClass);
|
||||
AnnotationLoadingUtil.DEFAULT_ANNOTATION_MEMBER_NAME, annotationClass);
|
||||
assert value != null : "jet.deprecated must have one parameter called value";
|
||||
annotation.setValueArgument(value, new StringValue("Deprecated in Java", true));
|
||||
return annotation;
|
||||
|
||||
-1
@@ -40,7 +40,6 @@ import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KO
|
||||
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
|
||||
|
||||
public final class JavaAnnotationArgumentResolver {
|
||||
public static final FqName JL_CLASS_FQ_NAME = new FqName("java.lang.Class");
|
||||
|
||||
private JavaAnnotationResolver annotationResolver;
|
||||
private JavaClassResolver classResolver;
|
||||
|
||||
-12
@@ -42,11 +42,6 @@ import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_K
|
||||
import static org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils.fqNameByClass;
|
||||
|
||||
public final class JavaAnnotationResolver {
|
||||
public static final Name DEFAULT_ANNOTATION_MEMBER_NAME = Name.identifier("value");
|
||||
public static final FqName JETBRAINS_NOT_NULL_ANNOTATION = fqNameByClass(NotNull.class);
|
||||
public static final FqName JETBRAINS_NULLABLE_ANNOTATION = fqNameByClass(Nullable.class);
|
||||
public static final FqName JETBRAINS_MUTABLE_ANNOTATION = new FqName("org.jetbrains.annotations.Mutable");
|
||||
public static final FqName JETBRAINS_READONLY_ANNOTATION = new FqName("org.jetbrains.annotations.ReadOnly");
|
||||
|
||||
private JavaClassResolver classResolver;
|
||||
private JavaAnnotationArgumentResolver argumentResolver;
|
||||
@@ -145,13 +140,6 @@ public final class JavaAnnotationResolver {
|
||||
return annotation;
|
||||
}
|
||||
|
||||
public static boolean isSpecialAnnotation(@NotNull FqName fqName) {
|
||||
return fqName.asString().startsWith("jet.runtime.typeinfo.")
|
||||
|| fqName.equals(JETBRAINS_NOT_NULL_ANNOTATION)
|
||||
|| fqName.equals(JvmAnnotationNames.KOTLIN_CLASS)
|
||||
|| fqName.equals(JvmAnnotationNames.KOTLIN_PACKAGE);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public JavaAnnotation findAnnotationWithExternal(@NotNull JavaAnnotationOwner owner, @NotNull FqName name) {
|
||||
JavaAnnotation annotation = owner.findAnnotation(name);
|
||||
|
||||
+3
-3
@@ -28,6 +28,7 @@ import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.Annotations;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationsImpl;
|
||||
import org.jetbrains.jet.lang.resolve.java.AnnotationLoadingUtil;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
||||
import org.jetbrains.jet.lang.resolve.constants.EnumValue;
|
||||
@@ -38,7 +39,6 @@ import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.ResolverPackage;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
@@ -151,8 +151,8 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer
|
||||
private static boolean ignoreAnnotation(@NotNull JvmClassName className) {
|
||||
return className.equals(JvmClassName.byFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_CLASS))
|
||||
|| className.equals(JvmClassName.byFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_PACKAGE))
|
||||
|| className.equals(JvmClassName.byFqNameWithoutInnerClasses(JavaAnnotationResolver.JETBRAINS_NOT_NULL_ANNOTATION))
|
||||
|| className.equals(JvmClassName.byFqNameWithoutInnerClasses(JavaAnnotationResolver.JETBRAINS_NULLABLE_ANNOTATION))
|
||||
|| className.equals(JvmClassName.byFqNameWithoutInnerClasses(AnnotationLoadingUtil.JETBRAINS_NOT_NULL_ANNOTATION))
|
||||
|| className.equals(JvmClassName.byFqNameWithoutInnerClasses(AnnotationLoadingUtil.JETBRAINS_NULLABLE_ANNOTATION))
|
||||
|| className.getInternalName().startsWith("jet/runtime/typeinfo/");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user