Make AnnotationsImpl internal, introduce Annotations.create
This commit is contained in:
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
|
|||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotated;
|
import org.jetbrains.kotlin.descriptors.annotations.Annotated;
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotatedImpl;
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotatedImpl;
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor;
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor;
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationsImpl;
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
||||||
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader;
|
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader;
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf;
|
import org.jetbrains.kotlin.metadata.ProtoBuf;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
@@ -84,7 +84,7 @@ public class PackagePartCodegen extends MemberCodegen<KtFile> {
|
|||||||
fileAnnotationDescriptors.add(annotationDescriptor);
|
fileAnnotationDescriptors.add(annotationDescriptor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Annotated annotatedFile = new AnnotatedImpl(new AnnotationsImpl(fileAnnotationDescriptors));
|
Annotated annotatedFile = new AnnotatedImpl(Annotations.Companion.create(fileAnnotationDescriptors));
|
||||||
AnnotationCodegen.forClass(v.getVisitor(), this, state.getTypeMapper()).genAnnotations(annotatedFile, null);
|
AnnotationCodegen.forClass(v.getVisitor(), this, state.getTypeMapper()).genAnnotations(annotatedFile, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -114,7 +114,7 @@ class AnnotationSplitter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
map to AnnotationsImpl(other)
|
map to Annotations.create(other)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getOtherAnnotations(): Annotations = LazySplitAnnotations(storageManager, null)
|
fun getOtherAnnotations(): Annotations = LazySplitAnnotations(storageManager, null)
|
||||||
@@ -129,7 +129,7 @@ class AnnotationSplitter(
|
|||||||
val (targeted, other) = this@AnnotationSplitter.splitAnnotations()
|
val (targeted, other) = this@AnnotationSplitter.splitAnnotations()
|
||||||
|
|
||||||
if (target != null) {
|
if (target != null) {
|
||||||
targeted[target]?.let(::AnnotationsImpl) ?: Annotations.EMPTY
|
targeted[target]?.let((Annotations)::create) ?: Annotations.EMPTY
|
||||||
} else {
|
} else {
|
||||||
other
|
other
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,10 @@
|
|||||||
package org.jetbrains.kotlin.resolve
|
package org.jetbrains.kotlin.resolve
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.builtins.*
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.builtins.getReceiverTypeFromFunctionType
|
||||||
|
import org.jetbrains.kotlin.builtins.getValueParameterTypesFromFunctionType
|
||||||
|
import org.jetbrains.kotlin.builtins.isBuiltinFunctionalType
|
||||||
import org.jetbrains.kotlin.config.AnalysisFlag
|
import org.jetbrains.kotlin.config.AnalysisFlag
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
@@ -28,7 +31,6 @@ import org.jetbrains.kotlin.descriptors.*
|
|||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationSplitter
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationSplitter
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationsImpl
|
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ClassConstructorDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ClassConstructorDescriptorImpl
|
||||||
import org.jetbrains.kotlin.descriptors.impl.FunctionExpressionDescriptor
|
import org.jetbrains.kotlin.descriptors.impl.FunctionExpressionDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl
|
||||||
@@ -48,7 +50,6 @@ import org.jetbrains.kotlin.resolve.ModifiersChecker.resolveMemberModalityFromMo
|
|||||||
import org.jetbrains.kotlin.resolve.ModifiersChecker.resolveVisibilityFromModifiers
|
import org.jetbrains.kotlin.resolve.ModifiersChecker.resolveVisibilityFromModifiers
|
||||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.recordScope
|
import org.jetbrains.kotlin.resolve.bindingContextUtil.recordScope
|
||||||
import org.jetbrains.kotlin.resolve.calls.DslMarkerUtils
|
import org.jetbrains.kotlin.resolve.calls.DslMarkerUtils
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.DslScopeViolationCallChecker
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
|
||||||
import org.jetbrains.kotlin.resolve.calls.util.createValueParametersForInvokeInFunctionType
|
import org.jetbrains.kotlin.resolve.calls.util.createValueParametersForInvokeInFunctionType
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil
|
import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil
|
||||||
@@ -308,7 +309,7 @@ class FunctionDescriptorResolver(
|
|||||||
private fun KotlinType.removeParameterNameAnnotation(): KotlinType {
|
private fun KotlinType.removeParameterNameAnnotation(): KotlinType {
|
||||||
if (this is TypeUtils.SpecialType) return this
|
if (this is TypeUtils.SpecialType) return this
|
||||||
val parameterNameAnnotation = annotations.findAnnotation(KotlinBuiltIns.FQ_NAMES.parameterName) ?: return this
|
val parameterNameAnnotation = annotations.findAnnotation(KotlinBuiltIns.FQ_NAMES.parameterName) ?: return this
|
||||||
return replaceAnnotations(AnnotationsImpl(annotations.filter { it != parameterNameAnnotation }))
|
return replaceAnnotations(Annotations.create(annotations.filter { it != parameterNameAnnotation }))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun KotlinType.functionTypeExpected() = !TypeUtils.noExpectedType(this) && isBuiltinFunctionalType
|
private fun KotlinType.functionTypeExpected() = !TypeUtils.noExpectedType(this) && isBuiltinFunctionalType
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.builtins.jvm
|
|||||||
import org.jetbrains.kotlin.builtins.BuiltInsInitializer
|
import org.jetbrains.kotlin.builtins.BuiltInsInitializer
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationsImpl
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.createDeprecatedAnnotation
|
import org.jetbrains.kotlin.descriptors.annotations.createDeprecatedAnnotation
|
||||||
import org.jetbrains.kotlin.descriptors.deserialization.AdditionalClassPartsProvider
|
import org.jetbrains.kotlin.descriptors.deserialization.AdditionalClassPartsProvider
|
||||||
import org.jetbrains.kotlin.descriptors.deserialization.PLATFORM_DEPENDENT_ANNOTATION_FQ_NAME
|
import org.jetbrains.kotlin.descriptors.deserialization.PLATFORM_DEPENDENT_ANNOTATION_FQ_NAME
|
||||||
@@ -64,9 +64,10 @@ open class JvmBuiltInsSettings(
|
|||||||
|
|
||||||
// Most this properties are lazy because they depends on KotlinBuiltIns initialization that depends on JvmBuiltInsSettings object
|
// Most this properties are lazy because they depends on KotlinBuiltIns initialization that depends on JvmBuiltInsSettings object
|
||||||
private val notConsideredDeprecation by storageManager.createLazyValue {
|
private val notConsideredDeprecation by storageManager.createLazyValue {
|
||||||
moduleDescriptor.builtIns.createDeprecatedAnnotation(
|
val annotation = moduleDescriptor.builtIns.createDeprecatedAnnotation(
|
||||||
"This member is not fully supported by Kotlin compiler, so it may be absent or have different signature in next major version"
|
"This member is not fully supported by Kotlin compiler, so it may be absent or have different signature in next major version"
|
||||||
).let { AnnotationsImpl(listOf(it)) }
|
)
|
||||||
|
Annotations.create(listOf(annotation))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun StorageManager.createMockJavaIoSerializableType(): KotlinType {
|
private fun StorageManager.createMockJavaIoSerializableType(): KotlinType {
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationsImpl
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.BuiltInAnnotationDescriptor
|
import org.jetbrains.kotlin.descriptors.annotations.BuiltInAnnotationDescriptor
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
import org.jetbrains.kotlin.name.FqNameUnsafe
|
||||||
@@ -165,7 +164,7 @@ fun getFunctionTypeArgumentProjections(
|
|||||||
KotlinBuiltIns.FQ_NAMES.parameterName,
|
KotlinBuiltIns.FQ_NAMES.parameterName,
|
||||||
mapOf(Name.identifier("name") to StringValue(name.asString()))
|
mapOf(Name.identifier("name") to StringValue(name.asString()))
|
||||||
)
|
)
|
||||||
type.replaceAnnotations(AnnotationsImpl(type.annotations + parameterNameAnnotation))
|
type.replaceAnnotations(Annotations.create(type.annotations + parameterNameAnnotation))
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
type
|
type
|
||||||
@@ -199,8 +198,9 @@ fun createFunctionType(
|
|||||||
annotations
|
annotations
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
AnnotationsImpl(annotations +
|
Annotations.create(
|
||||||
BuiltInAnnotationDescriptor(builtIns, KotlinBuiltIns.FQ_NAMES.extensionFunctionType, emptyMap()))
|
annotations + BuiltInAnnotationDescriptor(builtIns, KotlinBuiltIns.FQ_NAMES.extensionFunctionType, emptyMap())
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return KotlinTypeFactory.simpleNotNullType(typeAnnotations, classDescriptor, arguments)
|
return KotlinTypeFactory.simpleNotNullType(typeAnnotations, classDescriptor, arguments)
|
||||||
|
|||||||
@@ -41,6 +41,9 @@ interface Annotations : Iterable<AnnotationDescriptor> {
|
|||||||
|
|
||||||
override fun toString() = "EMPTY"
|
override fun toString() = "EMPTY"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun create(annotations: List<AnnotationDescriptor>): Annotations =
|
||||||
|
if (annotations.isEmpty()) EMPTY else AnnotationsImpl(annotations)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-1
@@ -16,7 +16,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors.annotations
|
package org.jetbrains.kotlin.descriptors.annotations
|
||||||
|
|
||||||
class AnnotationsImpl(private val annotations: List<AnnotationDescriptor>) : Annotations {
|
/**
|
||||||
|
* Use [Annotations.create] to create an instance of this class if necessary.
|
||||||
|
*/
|
||||||
|
internal class AnnotationsImpl(private val annotations: List<AnnotationDescriptor>) : Annotations {
|
||||||
override fun isEmpty(): Boolean = annotations.isEmpty()
|
override fun isEmpty(): Boolean = annotations.isEmpty()
|
||||||
|
|
||||||
override fun iterator(): Iterator<AnnotationDescriptor> = annotations.iterator()
|
override fun iterator(): Iterator<AnnotationDescriptor> = annotations.iterator()
|
||||||
|
|||||||
+3
-2
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.serialization.deserialization
|
|||||||
import org.jetbrains.kotlin.builtins.isSuspendFunctionType
|
import org.jetbrains.kotlin.builtins.isSuspendFunctionType
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationsImpl
|
|
||||||
import org.jetbrains.kotlin.descriptors.impl.FieldDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.FieldDescriptorImpl
|
||||||
import org.jetbrains.kotlin.descriptors.impl.PropertyGetterDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.PropertyGetterDescriptorImpl
|
||||||
import org.jetbrains.kotlin.descriptors.impl.PropertySetterDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.PropertySetterDescriptorImpl
|
||||||
@@ -291,7 +290,9 @@ class MemberDeserializer(private val c: DeserializationContext) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun loadTypeAlias(proto: ProtoBuf.TypeAlias): TypeAliasDescriptor {
|
fun loadTypeAlias(proto: ProtoBuf.TypeAlias): TypeAliasDescriptor {
|
||||||
val annotations = AnnotationsImpl(proto.annotationList.map { annotationDeserializer.deserializeAnnotation(it, c.nameResolver) })
|
val annotations = Annotations.create(
|
||||||
|
proto.annotationList.map { annotationDeserializer.deserializeAnnotation(it, c.nameResolver) }
|
||||||
|
)
|
||||||
|
|
||||||
val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(proto.flags))
|
val visibility = ProtoEnumFlags.visibility(Flags.VISIBILITY.get(proto.flags))
|
||||||
val typeAlias = DeserializedTypeAliasDescriptor(
|
val typeAlias = DeserializedTypeAliasDescriptor(
|
||||||
|
|||||||
Reference in New Issue
Block a user