Refactor: AnnotationSerializer does not depend on bultins
This commit is contained in:
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.codegen;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
||||
import org.jetbrains.kotlin.codegen.state.JetTypeMapper;
|
||||
import org.jetbrains.kotlin.descriptors.*;
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor;
|
||||
@@ -46,7 +45,7 @@ import static org.jetbrains.kotlin.codegen.JvmSerializationBindings.*;
|
||||
public class JvmSerializerExtension extends SerializerExtension {
|
||||
private final JvmSerializationBindings bindings;
|
||||
private final JetTypeMapper typeMapper;
|
||||
private final AnnotationSerializer annotationSerializer = new AnnotationSerializer(KotlinBuiltIns.getInstance());
|
||||
private final AnnotationSerializer annotationSerializer = new AnnotationSerializer();
|
||||
|
||||
public JvmSerializerExtension(@NotNull JvmSerializationBindings bindings, @NotNull JetTypeMapper typeMapper) {
|
||||
this.bindings = bindings;
|
||||
|
||||
+1
-1
@@ -113,7 +113,7 @@ public class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) {
|
||||
// TODO: perform some kind of validation? At the moment not possible because DescriptorValidator is in compiler-tests
|
||||
// DescriptorValidator.validate(packageView)
|
||||
|
||||
val serializer = DescriptorSerializer.createTopLevel(BuiltInsSerializerExtension(module))
|
||||
val serializer = DescriptorSerializer.createTopLevel(BuiltInsSerializerExtension())
|
||||
|
||||
val classifierDescriptors = DescriptorSerializer.sort(packageView.memberScope.getDescriptors(DescriptorKindFilter.CLASSIFIERS))
|
||||
|
||||
|
||||
+14
-10
@@ -52,7 +52,10 @@ import java.math.BigInteger
|
||||
import java.util.HashMap
|
||||
import kotlin.platform.platformStatic
|
||||
|
||||
public class ConstantExpressionEvaluator(private val builtIns: KotlinBuiltIns) {
|
||||
public class ConstantExpressionEvaluator(
|
||||
internal val constantValueFactory: ConstantValueFactory,
|
||||
internal val builtIns: KotlinBuiltIns
|
||||
) {
|
||||
|
||||
internal fun resolveAnnotationArguments(
|
||||
resolvedCall: ResolvedCall<*>,
|
||||
@@ -82,7 +85,7 @@ public class ConstantExpressionEvaluator(private val builtIns: KotlinBuiltIns) {
|
||||
if (argumentsAsVararg) {
|
||||
if (parameterDescriptor.declaresDefaultValue() && compileTimeConstants.isEmpty()) return null
|
||||
|
||||
return ArrayValue(constants, parameterDescriptor.getType())
|
||||
return constantValueFactory.createArrayValue(constants, parameterDescriptor.getType())
|
||||
}
|
||||
else {
|
||||
// we should actually get only one element, but just in case of getting many, we take the last one
|
||||
@@ -191,14 +194,15 @@ public class ConstantExpressionEvaluator(private val builtIns: KotlinBuiltIns) {
|
||||
trace: BindingTrace,
|
||||
expectedType: JetType? = TypeUtils.NO_EXPECTED_TYPE
|
||||
): CompileTimeConstant<*>? {
|
||||
val visitor = ConstantExpressionEvaluatorVisitor(this, trace, builtIns)
|
||||
val visitor = ConstantExpressionEvaluatorVisitor(this, trace)
|
||||
val constant = visitor.evaluate(expression, expectedType) ?: return null
|
||||
return if (!constant.isError) constant else null
|
||||
}
|
||||
|
||||
companion object {
|
||||
platformStatic public fun evaluate(expression: JetExpression, trace: BindingTrace, expectedType: JetType? = TypeUtils.NO_EXPECTED_TYPE): CompileTimeConstant<*>? {
|
||||
return ConstantExpressionEvaluator(KotlinBuiltIns.getInstance()).evaluateExpression(expression, trace, expectedType)
|
||||
val builtIns = KotlinBuiltIns.getInstance()
|
||||
return ConstantExpressionEvaluator(ConstantValueFactory(builtIns), builtIns).evaluateExpression(expression, trace, expectedType)
|
||||
}
|
||||
|
||||
platformStatic public fun evaluateToConstantValue(
|
||||
@@ -222,10 +226,10 @@ public class ConstantExpressionEvaluator(private val builtIns: KotlinBuiltIns) {
|
||||
|
||||
private class ConstantExpressionEvaluatorVisitor(
|
||||
private val constantExpressionEvaluator: ConstantExpressionEvaluator,
|
||||
private val trace: BindingTrace,
|
||||
private val builtIns: KotlinBuiltIns
|
||||
private val trace: BindingTrace
|
||||
) : JetVisitor<CompileTimeConstant<*>?, JetType>() {
|
||||
private val factory = ConstantValueFactory(builtIns)
|
||||
|
||||
private val factory = constantExpressionEvaluator.constantValueFactory
|
||||
|
||||
fun evaluate(expression: JetExpression, expectedType: JetType?): CompileTimeConstant<*>? {
|
||||
val recordedCompileTimeConstant = ConstantExpressionEvaluator.getPossiblyErrorConstant(expression, trace.getBindingContext())
|
||||
@@ -258,7 +262,7 @@ private class ConstantExpressionEvaluatorVisitor(
|
||||
override fun visitStringTemplateEntryWithExpression(entry: JetStringTemplateEntryWithExpression, data: Nothing?): TypedCompileTimeConstant<String>? {
|
||||
val expression = entry.getExpression() ?: return null
|
||||
|
||||
return evaluate(expression, builtIns.getStringType())?.let {
|
||||
return evaluate(expression, constantExpressionEvaluator.builtIns.getStringType())?.let {
|
||||
createStringConstant(it)
|
||||
}
|
||||
}
|
||||
@@ -340,7 +344,7 @@ private class ConstantExpressionEvaluatorVisitor(
|
||||
|
||||
val operationToken = expression.getOperationToken()
|
||||
if (OperatorConventions.BOOLEAN_OPERATIONS.containsKey(operationToken)) {
|
||||
val booleanType = builtIns.getBooleanType()
|
||||
val booleanType = constantExpressionEvaluator.builtIns.getBooleanType()
|
||||
val leftConstant = evaluate(leftExpression, booleanType)
|
||||
if (leftConstant == null) return null
|
||||
|
||||
@@ -572,7 +576,7 @@ private class ConstantExpressionEvaluatorVisitor(
|
||||
|
||||
val arguments = call.getValueArguments().values().flatMap { resolveArguments(it.getArguments(), varargType) }
|
||||
|
||||
return ArrayValue(arguments.map { it.toConstantValue(varargType) }, resultingDescriptor.getReturnType()!!).
|
||||
return factory.createArrayValue(arguments.map { it.toConstantValue(varargType) }, resultingDescriptor.getReturnType()!!).
|
||||
wrap(
|
||||
usesVariableAsConstant = arguments.any { it.usesVariableAsConstant }
|
||||
)
|
||||
|
||||
+2
-3
@@ -16,7 +16,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.serialization
|
||||
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationArgumentVisitor
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||
@@ -26,7 +25,7 @@ import org.jetbrains.kotlin.serialization.ProtoBuf.Annotation.Argument.Value.Typ
|
||||
import org.jetbrains.kotlin.types.ErrorUtils
|
||||
import org.jetbrains.kotlin.types.JetType
|
||||
|
||||
public class AnnotationSerializer(builtIns: KotlinBuiltIns) {
|
||||
public class AnnotationSerializer() {
|
||||
|
||||
public fun serializeAnnotation(annotation: AnnotationDescriptor, stringTable: StringTable): ProtoBuf.Annotation {
|
||||
return with(ProtoBuf.Annotation.newBuilder()) {
|
||||
@@ -59,7 +58,7 @@ public class AnnotationSerializer(builtIns: KotlinBuiltIns) {
|
||||
override fun visitArrayValue(value: ArrayValue, data: Unit) {
|
||||
setType(Type.ARRAY)
|
||||
for (element in value.value) {
|
||||
addArrayElement(valueProto(element, KotlinBuiltIns.getInstance().getArrayElementType(type), nameTable).build())
|
||||
addArrayElement(valueProto(element, value.elementType, nameTable).build())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-9
@@ -16,20 +16,14 @@
|
||||
|
||||
package org.jetbrains.kotlin.serialization.builtins
|
||||
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.resolve.constants.NullValue
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||
import org.jetbrains.kotlin.serialization.AnnotationSerializer
|
||||
import org.jetbrains.kotlin.serialization.DescriptorSerializer
|
||||
import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||
import org.jetbrains.kotlin.serialization.SerializerExtension
|
||||
import org.jetbrains.kotlin.serialization.StringTable
|
||||
import org.jetbrains.kotlin.serialization.*
|
||||
|
||||
public class BuiltInsSerializerExtension(module: ModuleDescriptor) : SerializerExtension() {
|
||||
public class BuiltInsSerializerExtension() : SerializerExtension() {
|
||||
|
||||
private val annotationSerializer = AnnotationSerializer(module.builtIns)
|
||||
private val annotationSerializer = AnnotationSerializer()
|
||||
|
||||
override fun serializeClass(descriptor: ClassDescriptor, proto: ProtoBuf.Class.Builder, stringTable: StringTable) {
|
||||
for (annotation in descriptor.getAnnotations()) {
|
||||
|
||||
@@ -52,7 +52,7 @@ public class ConstantValueFactory(
|
||||
fun createArrayValue(
|
||||
value: List<ConstantValue<*>>,
|
||||
type: JetType
|
||||
) = ArrayValue(value, type)
|
||||
) = ArrayValue(value, type, builtins)
|
||||
|
||||
fun createAnnotationValue(value: AnnotationDescriptor) = AnnotationValue(value)
|
||||
|
||||
|
||||
@@ -46,7 +46,8 @@ public class AnnotationValue(value: AnnotationDescriptor) : ConstantValue<Annota
|
||||
|
||||
public class ArrayValue(
|
||||
value: List<ConstantValue<*>>,
|
||||
override val type: JetType
|
||||
override val type: JetType,
|
||||
private val builtIns: KotlinBuiltIns
|
||||
) : ConstantValue<List<ConstantValue<*>>>(value) {
|
||||
|
||||
init {
|
||||
@@ -55,6 +56,9 @@ public class ArrayValue(
|
||||
|
||||
override fun <R, D> accept(visitor: AnnotationArgumentVisitor<R, D>, data: D) = visitor.visitArrayValue(this, data)
|
||||
|
||||
public val elementType: JetType
|
||||
get() = builtIns.getArrayElementType(type)
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (javaClass != other?.javaClass) return false
|
||||
|
||||
+1
-2
@@ -16,7 +16,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.serialization.js
|
||||
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
@@ -30,7 +29,7 @@ import org.jetbrains.kotlin.types.JetType
|
||||
|
||||
public object KotlinJavascriptSerializerExtension : SerializerExtension() {
|
||||
|
||||
private val annotationSerializer = AnnotationSerializer(KotlinBuiltIns.getInstance())
|
||||
private val annotationSerializer = AnnotationSerializer()
|
||||
|
||||
override fun serializeClass(descriptor: ClassDescriptor, proto: ProtoBuf.Class.Builder, stringTable: StringTable) {
|
||||
for (annotation in descriptor.getAnnotations()) {
|
||||
|
||||
Reference in New Issue
Block a user