SymbolBasedClass: cleanup code
This commit is contained in:
+29
-24
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user