Symbol based types: cleanup code

This commit is contained in:
Mikhail Glukhikh
2019-09-19 17:50:07 +03:00
parent 4bb5fbaa4d
commit ac1b957f8d
@@ -26,8 +26,8 @@ import javax.lang.model.element.TypeParameterElement
import javax.lang.model.type.* import javax.lang.model.type.*
sealed class SymbolBasedType<out T : TypeMirror>( sealed class SymbolBasedType<out T : TypeMirror>(
val typeMirror: T, val typeMirror: T,
val javac: JavacWrapper val javac: JavacWrapper
) : JavaType, JavaAnnotationOwner { ) : JavaType, JavaAnnotationOwner {
companion object { companion object {
@@ -57,8 +57,8 @@ sealed class SymbolBasedType<out T : TypeMirror>(
} }
class SymbolBasedPrimitiveType( class SymbolBasedPrimitiveType(
typeMirror: TypeMirror, typeMirror: TypeMirror,
javac: JavacWrapper javac: JavacWrapper
) : SymbolBasedType<TypeMirror>(typeMirror, javac), JavaPrimitiveType { ) : SymbolBasedType<TypeMirror>(typeMirror, javac), JavaPrimitiveType {
override val type: PrimitiveType? override val type: PrimitiveType?
@@ -67,23 +67,22 @@ class SymbolBasedPrimitiveType(
} }
class SymbolBasedClassifierType<out T : TypeMirror>( class SymbolBasedClassifierType<out T : TypeMirror>(
typeMirror: T, typeMirror: T,
javac: JavacWrapper javac: JavacWrapper
) : SymbolBasedType<T>(typeMirror, javac), JavaClassifierType { ) : SymbolBasedType<T>(typeMirror, javac), JavaClassifierType {
override val classifier: JavaClassifier? override val classifier: JavaClassifier?
by lazy { by lazy {
when (typeMirror.kind) { when (typeMirror.kind) {
TypeKind.DECLARED -> ((typeMirror as DeclaredType).asElement() as Symbol.ClassSymbol).let { symbol -> TypeKind.DECLARED -> ((typeMirror as DeclaredType).asElement() as Symbol.ClassSymbol).let { symbol ->
// try to find cached javaClass // try to find cached javaClass
val classId = symbol.computeClassId() val classId = symbol.computeClassId()
classId?.let { javac.findClass(it) } classId?.let { javac.findClass(it) } ?: SymbolBasedClass(symbol, javac, classId, symbol.classfile)
?: SymbolBasedClass(symbol, javac, classId, symbol.classfile) }
TypeKind.TYPEVAR -> SymbolBasedTypeParameter((typeMirror as TypeVariable).asElement() as TypeParameterElement, javac)
else -> null
} }
TypeKind.TYPEVAR -> SymbolBasedTypeParameter((typeMirror as TypeVariable).asElement() as TypeParameterElement, javac)
else -> null
} }
}
override val typeArguments: List<JavaType> override val typeArguments: List<JavaType>
get() { get() {
@@ -120,8 +119,8 @@ class SymbolBasedClassifierType<out T : TypeMirror>(
} }
class SymbolBasedWildcardType( class SymbolBasedWildcardType(
typeMirror: WildcardType, typeMirror: WildcardType,
javac: JavacWrapper javac: JavacWrapper
) : SymbolBasedType<WildcardType>(typeMirror, javac), JavaWildcardType { ) : SymbolBasedType<WildcardType>(typeMirror, javac), JavaWildcardType {
override val bound: JavaType? override val bound: JavaType?
@@ -136,8 +135,8 @@ class SymbolBasedWildcardType(
} }
class SymbolBasedArrayType( class SymbolBasedArrayType(
typeMirror: ArrayType, typeMirror: ArrayType,
javac: JavacWrapper javac: JavacWrapper
) : SymbolBasedType<ArrayType>(typeMirror, javac), JavaArrayType { ) : SymbolBasedType<ArrayType>(typeMirror, javac), JavaArrayType {
override val componentType: JavaType override val componentType: JavaType