@@ -6,7 +6,6 @@ import cn.wzbos.android.rudolph.annotations.Component
66import cn.wzbos.android.rudolph.annotations.Export
77import cn.wzbos.android.rudolph.annotations.Extra
88import cn.wzbos.android.rudolph.annotations.Route
9- import com.google.auto.service.AutoService
109import com.squareup.javapoet.*
1110import org.apache.commons.collections4.CollectionUtils
1211import org.apache.commons.lang3.StringUtils
@@ -28,7 +27,6 @@ import javax.tools.StandardLocation
2827 * Router Processor
2928 * Created by wuzongbo on 2017/5/30.
3029 */
31- @AutoService(Processor ::class )
3230@SupportedSourceVersion(SourceVersion .RELEASE_8 )
3331@SupportedAnnotationTypes(Constant .ANNOTATION_TYPE_ROUTE , Constant .ANNOTATION_TYPE_COMPONENT )
3432class RudolphProcessor : AbstractProcessor () {
@@ -54,7 +52,7 @@ class RudolphProcessor : AbstractProcessor() {
5452 private val Gson = ClassName .get(" com.google.gson" , " Gson" )
5553 private val Base64 = ClassName .get(" android.util" , " Base64" )
5654 private val TypeToken = ClassName .get(" com.google.gson.reflect" , " TypeToken" )
57- private val clsApplication = ClassName .get(" android.app " , " Application " )
55+ private val clsContext = ClassName .get(" android.content " , " Context " )
5856 private val Bundle = ClassName .get(" android.os" , " Bundle" )
5957 }
6058
@@ -95,17 +93,31 @@ class RudolphProcessor : AbstractProcessor() {
9593 override fun process (annotations : Set <TypeElement >, roundEnvironment : RoundEnvironment ): Boolean {
9694 if (CollectionUtils .isNotEmpty(annotations)) {
9795 try {
98- // 构件路由表类的初始化方法 init(Application application)
99- val builder = MethodSpec .methodBuilder(" init" )
96+
97+ val clsName = routeClsName
98+ val superInterfaceType = elements!! .getTypeElement(Constant .ROUTE_TABLE )
99+
100+ val clsBuilder = TypeSpec .classBuilder(clsName)
101+ .addJavadoc(Constant .WARNING_TIPS )
102+ .addSuperinterface(ClassName .get(superInterfaceType))
103+ .addModifiers(Modifier .PUBLIC );
104+
105+ // 构件路由表类的初始化方法 init(Context context)
106+ val initMethodBuilder = MethodSpec .methodBuilder(" init" )
100107 .addAnnotation(Override ::class .java)
101108 .addModifiers(Modifier .PUBLIC )
102- .addParameter(ParameterSpec .builder(clsApplication , " application " ).build())
109+ .addParameter(ParameterSpec .builder(clsContext , " context " ).build())
103110 val components = roundEnvironment.getElementsAnnotatedWith(Component ::class .java)
104111 if (CollectionUtils .isNotEmpty(components)) {
105112 for (element in components) {
106- builder .addStatement(" new \$ T().init(application )" , element)
113+ initMethodBuilder .addStatement(" new \$ T().init(context )" , element)
107114 }
108115 }
116+
117+ // 构件路由表类的初始化方法 register()
118+ val registerMethodBuilder = MethodSpec .methodBuilder(" register" )
119+ .addAnnotation(Override ::class .java)
120+ .addModifiers(Modifier .PUBLIC )
109121 val routers = roundEnvironment.getElementsAnnotatedWith(Route ::class .java)
110122 if (CollectionUtils .isNotEmpty(routers)) {
111123 var routetype: RouteType
@@ -144,18 +156,13 @@ class RudolphProcessor : AbstractProcessor() {
144156 logger.error(" UnKnown route type:$kind " )
145157 continue
146158 }
147- generateRouteTable(builder , element, target, route, routetype)
159+ generateRouteTable(registerMethodBuilder , element, target, route, routetype)
148160 }
149161 }
150- val superInterfaceType = elements!! .getTypeElement(Constant .ROUTE_TABLE )
151- val clsName = routeClsName
152- JavaFile .builder(Constant .PACKAGE_NAME ,
153- TypeSpec .classBuilder(clsName)
154- .addJavadoc(Constant .WARNING_TIPS )
155- .addSuperinterface(ClassName .get(superInterfaceType))
156- .addModifiers(Modifier .PUBLIC )
157- .addMethod(builder.build())
158- .build()
162+ JavaFile .builder(Constant .PACKAGE_NAME , clsBuilder
163+ .addMethod(registerMethodBuilder.build())
164+ .addMethod(initMethodBuilder.build())
165+ .build()
159166 ).build().writeTo(mFiler)
160167 writeClsNameToAssets(clsName)
161168 logger.info(" >>> Generated $clsName <<<" )
@@ -344,13 +351,13 @@ class RudolphProcessor : AbstractProcessor() {
344351 .addJavadoc(" create new instance\n " )
345352 .returns(interfaceClsName)
346353 .addModifiers(Modifier .PUBLIC , Modifier .STATIC )
347- .addStatement(" return builder()" )
354+ .addStatement(" return ( \$ T) builder().build().open() " , interfaceClsName )
348355 .build())
349356 }
350357 }
351358
352359
353- if (routeType != RouteType .SERVICE && ! route.singleton) {
360+ if (routeType != RouteType .SERVICE || ! route.singleton) {
354361 val routerBuilderClsName = ClassName .get(clsName, " Builder" )
355362 val builderTypeSpec = generate(interfaceClsName, routerBuilderClsName, element, routeType)
356363 clsRouterBuilder.addType(builderTypeSpec)
0 commit comments