@@ -18,7 +18,7 @@ import javax.annotation.processing.Messager
1818import javax.lang.model.element.Element
1919import javax.lang.model.element.TypeElement
2020import javax.lang.model.util.Elements
21- import javax.tools.Diagnostic.Kind.*
21+ import javax.tools.Diagnostic.Kind.ERROR
2222
2323private const val FUNC_CLEAR_CACHE = " clearCache"
2424
@@ -34,27 +34,36 @@ class RepositoryFactory(private val messager: Messager, private val elements: El
3434 return null
3535 }
3636
37- val proto = kotlinMetadata.data.classProto
38- if (proto .classKind != INTERFACE ) {
37+ val classData : ClassData = kotlinMetadata.data
38+ if (classData.classProto .classKind != INTERFACE ) {
3939 messager.printMessage(ERROR , " @AppOmegaRepository can't be applied to $element : must be a Kotlin interface" )
4040 return null
4141 }
4242
43- val repositoryPackage = elements.packageOf(element)
44- val repositoryName = element.repositoryName
43+ val functions = classData.getFunctions(element).toMutableList()
44+ element.interfaces.forEach {
45+ functions + = create(it.asTypeElement())?.functions ? : return @forEach
46+ }
47+
48+ return Repository (
49+ element.repositoryPackage,
50+ element.repositoryName,
51+ element.superInterfaceClassName,
52+ classData.getParameters(),
53+ functions
54+ )
55+ }
4556
46- val classProto = kotlinMetadata.data.classProto
47- val nameResolver = kotlinMetadata.data.nameResolver
48- val superInterfaceClassName = ClassName .bestGuess(" ${elements.packageOf(element)} .${element.simpleName} " )
57+ private val Element .repositoryPackage
58+ get() = elements.packageOf(this )
4959
50- val properties = classProto.propertyList.mapNotNull { property ->
60+ private val Element .superInterfaceClassName
61+ get() = ClassName .bestGuess(" ${elements.packageOf(this )} .${this .simpleName} " )
62+
63+ private fun ClassData.getParameters (): List <Parameter > {
64+ return classProto.propertyList.mapNotNull { property ->
5165 property.toParameter(nameResolver)
5266 }
53- val functions = classProto.functionList.mapNotNull {
54- it.toFunction(element, nameResolver)
55- }
56-
57- return Repository (repositoryPackage, repositoryName, superInterfaceClassName, properties, functions)
5867 }
5968
6069 private fun ProtoBuf.Property.toParameter (nameResolver : NameResolver ): Parameter ? {
@@ -63,16 +72,20 @@ class RepositoryFactory(private val messager: Messager, private val elements: El
6372 val className = returnType.getClassName(nameResolver)
6473 val parameterizedBy = getParameterTypes(returnType, nameResolver)
6574
66- messager.printMessage(WARNING , " parameterName $parameterName $parameterizedBy " )
67-
6875 return Parameter (parameterName, Type (className, parameterizedBy, returnType.nullable))
6976 }
7077
78+ private fun ClassData.getFunctions (element : Element ): List <Function > {
79+ return classProto.functionList.mapNotNull { function ->
80+ function.toFunction(element, nameResolver)
81+ }
82+ }
83+
7184 private fun ProtoBuf.Function.toFunction (element : Element , nameResolver : NameResolver ): Function ? {
7285 if (modality != ProtoBuf .Modality .ABSTRACT ) return null
7386
7487 val functionName = nameResolver.getName(this )
75- if (functionName == FUNC_CLEAR_CACHE ) return null
88+ if (functionName == FUNC_CLEAR_CACHE ) return null
7689
7790 val parameters = valueParameterList.map {
7891 it.toParameter(nameResolver)
0 commit comments