SymbolBasedClass: cleanup code

This commit is contained in:
Mikhail Glukhikh
2019-09-19 18:39:18 +03:00
parent ac1b957f8d
commit 6b8f4b4b4e
@@ -36,10 +36,10 @@ import javax.lang.model.type.TypeMirror
import javax.tools.JavaFileObject import javax.tools.JavaFileObject
class SymbolBasedClass( class SymbolBasedClass(
element: TypeElement, element: TypeElement,
javac: JavacWrapper, javac: JavacWrapper,
override val classId: ClassId?, override val classId: ClassId?,
val file: JavaFileObject? val file: JavaFileObject?
) : SymbolBasedClassifier<TypeElement>(element, javac), JavaClassWithClassId { ) : SymbolBasedClassifier<TypeElement>(element, javac), JavaClassWithClassId {
override val name: Name override val name: Name
@@ -58,7 +58,7 @@ class SymbolBasedClass(
get() = element.getVisibility() get() = element.getVisibility()
override val typeParameters: List<JavaTypeParameter> override val typeParameters: List<JavaTypeParameter>
by lazy { element.typeParameters.map { SymbolBasedTypeParameter(it, javac) } } by lazy { element.typeParameters.map { SymbolBasedTypeParameter(it, javac) } }
override val fqName: FqName override val fqName: FqName
get() = FqName(element.qualifiedName.toString()) get() = FqName(element.qualifiedName.toString())
@@ -66,30 +66,35 @@ class SymbolBasedClass(
override val supertypes: Collection<JavaClassifierType> override val supertypes: Collection<JavaClassifierType>
by lazy { by lazy {
arrayListOf<TypeMirror>() arrayListOf<TypeMirror>()
.apply { .apply {
element.superclass.takeIf { it !is NoType }?.let(this::add) element.superclass.takeIf { it !is NoType }?.let(this::add)
addAll(element.interfaces) addAll(element.interfaces)
} }
.mapTo(arrayListOf()) { SymbolBasedClassifierType(it, javac) } .mapTo(arrayListOf()) { SymbolBasedClassifierType(it, javac) }
.apply { .apply {
if (isEmpty() && element.qualifiedName.toString() != CommonClassNames.JAVA_LANG_OBJECT) { if (isEmpty() && element.qualifiedName.toString() != CommonClassNames.JAVA_LANG_OBJECT) {
javac.JAVA_LANG_OBJECT?.let { add(it) } javac.JAVA_LANG_OBJECT?.let { add(it) }
}
} }
}
} }
val innerClasses: Map<Name, JavaClass> val innerClasses: Map<Name, JavaClass>
by lazy { by lazy {
enclosedElements enclosedElements
.filterIsInstance(TypeElement::class.java) .filterIsInstance(TypeElement::class.java)
.map { SymbolBasedClass(it, javac, classId?.createNestedClassId(Name.identifier(it.simpleName.toString())), file) } .map { SymbolBasedClass(it, javac, classId?.createNestedClassId(Name.identifier(it.simpleName.toString())), file) }
.associateBy(JavaClass::name) .associateBy(JavaClass::name)
} }
override val outerClass: JavaClass? override val outerClass: JavaClass?
by lazy { by lazy {
element.enclosingElement?.let { element.enclosingElement?.let {
if (it.asType().kind != TypeKind.DECLARED) null else SymbolBasedClass(it as TypeElement, javac, classId?.outerClassId, file) if (it.asType().kind != TypeKind.DECLARED) null else SymbolBasedClass(
it as TypeElement,
javac,
classId?.outerClassId,
file
)
} }
} }
@@ -107,8 +112,8 @@ class SymbolBasedClass(
override val methods: Collection<JavaMethod> override val methods: Collection<JavaMethod>
get() = enclosedElements get() = enclosedElements
.filter { it.kind == ElementKind.METHOD && !isEnumValuesOrValueOf(it as ExecutableElement) } .filter { it.kind == ElementKind.METHOD && !isEnumValuesOrValueOf(it as ExecutableElement) }
.map { SymbolBasedMethod(it as ExecutableElement, this, javac) } .map { SymbolBasedMethod(it as ExecutableElement, this, javac) }
private fun isEnumValuesOrValueOf(method: ExecutableElement): Boolean { private fun isEnumValuesOrValueOf(method: ExecutableElement): Boolean {
return isEnum && when (method.simpleName.toString()) { return isEnum && when (method.simpleName.toString()) {
@@ -120,13 +125,13 @@ class SymbolBasedClass(
override val fields: Collection<JavaField> override val fields: Collection<JavaField>
get() = enclosedElements get() = enclosedElements
.filter { it.kind.isField && Name.isValidIdentifier(it.simpleName.toString()) } .filter { it.kind.isField && Name.isValidIdentifier(it.simpleName.toString()) }
.map { SymbolBasedField(it as VariableElement, this, javac) } .map { SymbolBasedField(it as VariableElement, this, javac) }
override val constructors: Collection<JavaConstructor> override val constructors: Collection<JavaConstructor>
get() = enclosedElements get() = enclosedElements
.filter { it.kind == ElementKind.CONSTRUCTOR } .filter { it.kind == ElementKind.CONSTRUCTOR }
.map { SymbolBasedConstructor(it as ExecutableElement, this, javac) } .map { SymbolBasedConstructor(it as ExecutableElement, this, javac) }
override val innerClassNames: Collection<Name> override val innerClassNames: Collection<Name>
get() = innerClasses.keys get() = innerClasses.keys