Loading tools/protologtool/src/com/android/protolog/tool/ProtoLogTool.kt +48 −27 Original line number Diff line number Diff line Loading @@ -24,9 +24,10 @@ import com.github.javaparser.ParseProblemException import com.github.javaparser.ParserConfiguration import com.github.javaparser.StaticJavaParser import com.github.javaparser.ast.CompilationUnit import com.github.javaparser.ast.Modifier import com.github.javaparser.ast.NodeList import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration import com.github.javaparser.ast.body.InitializerDeclaration import com.github.javaparser.ast.expr.AssignExpr import com.github.javaparser.ast.expr.FieldAccessExpr import com.github.javaparser.ast.expr.MethodCallExpr import com.github.javaparser.ast.expr.NameExpr Loading @@ -34,7 +35,10 @@ import com.github.javaparser.ast.expr.NullLiteralExpr import com.github.javaparser.ast.expr.ObjectCreationExpr import com.github.javaparser.ast.expr.SimpleName import com.github.javaparser.ast.expr.StringLiteralExpr import com.github.javaparser.ast.expr.VariableDeclarationExpr import com.github.javaparser.ast.stmt.BlockStmt import com.github.javaparser.ast.stmt.ReturnStmt import com.github.javaparser.ast.type.ClassOrInterfaceType import java.io.File import java.io.FileInputStream import java.io.FileNotFoundException Loading Loading @@ -180,6 +184,7 @@ object ProtoLogTool { groups: Map<String, LogGroup>, protoLogGroupsClassName: String ) { var needsCreateLogGroupsMap = false classDeclaration.fields.forEach { field -> field.getAnnotationByClass(ProtoLogToolInjected::class.java) .ifPresent { annotationExpr -> Loading Loading @@ -207,38 +212,54 @@ object ProtoLogTool { } ?: NullLiteralExpr()) } ProtoLogToolInjected.Value.LOG_GROUPS.name -> { val initializerBlockStmt = BlockStmt() needsCreateLogGroupsMap = true field.setFinal(true) field.variables.first().setInitializer( MethodCallExpr().setName("createLogGroupsMap")) } else -> error("Unhandled ProtoLogToolInjected value: $valueName.") } } } } if (needsCreateLogGroupsMap) { val body = BlockStmt() body.addStatement(AssignExpr( VariableDeclarationExpr( ClassOrInterfaceType("TreeMap<String, IProtoLogGroup>"), "result" ), ObjectCreationExpr().setType("TreeMap<String, IProtoLogGroup>"), AssignExpr.Operator.ASSIGN )) for (group in groups) { initializerBlockStmt.addStatement( MethodCallExpr() .setName("put") .setArguments( NodeList(StringLiteralExpr(group.key), body.addStatement( MethodCallExpr( NameExpr("result"), "put", NodeList( StringLiteralExpr(group.key), FieldAccessExpr() .setScope( NameExpr( protoLogGroupsClassName )) .setName(group.value.name))) .setName(group.value.name) ) ) ) group.key } body.addStatement(ReturnStmt(NameExpr("result"))) val treeMapCreation = ObjectCreationExpr() .setType("TreeMap<String, IProtoLogGroup>") .setAnonymousClassBody(NodeList( InitializerDeclaration().setBody( initializerBlockStmt val method = classDeclaration.addMethod( "createLogGroupsMap", Modifier.Keyword.PRIVATE, Modifier.Keyword.STATIC, Modifier.Keyword.FINAL ) )) field.setFinal(true) field.variables.first().setInitializer(treeMapCreation) } else -> error("Unhandled ProtoLogToolInjected value: $valueName.") } } } method.setType("TreeMap<String, IProtoLogGroup>") method.setBody(body) } } Loading Loading
tools/protologtool/src/com/android/protolog/tool/ProtoLogTool.kt +48 −27 Original line number Diff line number Diff line Loading @@ -24,9 +24,10 @@ import com.github.javaparser.ParseProblemException import com.github.javaparser.ParserConfiguration import com.github.javaparser.StaticJavaParser import com.github.javaparser.ast.CompilationUnit import com.github.javaparser.ast.Modifier import com.github.javaparser.ast.NodeList import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration import com.github.javaparser.ast.body.InitializerDeclaration import com.github.javaparser.ast.expr.AssignExpr import com.github.javaparser.ast.expr.FieldAccessExpr import com.github.javaparser.ast.expr.MethodCallExpr import com.github.javaparser.ast.expr.NameExpr Loading @@ -34,7 +35,10 @@ import com.github.javaparser.ast.expr.NullLiteralExpr import com.github.javaparser.ast.expr.ObjectCreationExpr import com.github.javaparser.ast.expr.SimpleName import com.github.javaparser.ast.expr.StringLiteralExpr import com.github.javaparser.ast.expr.VariableDeclarationExpr import com.github.javaparser.ast.stmt.BlockStmt import com.github.javaparser.ast.stmt.ReturnStmt import com.github.javaparser.ast.type.ClassOrInterfaceType import java.io.File import java.io.FileInputStream import java.io.FileNotFoundException Loading Loading @@ -180,6 +184,7 @@ object ProtoLogTool { groups: Map<String, LogGroup>, protoLogGroupsClassName: String ) { var needsCreateLogGroupsMap = false classDeclaration.fields.forEach { field -> field.getAnnotationByClass(ProtoLogToolInjected::class.java) .ifPresent { annotationExpr -> Loading Loading @@ -207,38 +212,54 @@ object ProtoLogTool { } ?: NullLiteralExpr()) } ProtoLogToolInjected.Value.LOG_GROUPS.name -> { val initializerBlockStmt = BlockStmt() needsCreateLogGroupsMap = true field.setFinal(true) field.variables.first().setInitializer( MethodCallExpr().setName("createLogGroupsMap")) } else -> error("Unhandled ProtoLogToolInjected value: $valueName.") } } } } if (needsCreateLogGroupsMap) { val body = BlockStmt() body.addStatement(AssignExpr( VariableDeclarationExpr( ClassOrInterfaceType("TreeMap<String, IProtoLogGroup>"), "result" ), ObjectCreationExpr().setType("TreeMap<String, IProtoLogGroup>"), AssignExpr.Operator.ASSIGN )) for (group in groups) { initializerBlockStmt.addStatement( MethodCallExpr() .setName("put") .setArguments( NodeList(StringLiteralExpr(group.key), body.addStatement( MethodCallExpr( NameExpr("result"), "put", NodeList( StringLiteralExpr(group.key), FieldAccessExpr() .setScope( NameExpr( protoLogGroupsClassName )) .setName(group.value.name))) .setName(group.value.name) ) ) ) group.key } body.addStatement(ReturnStmt(NameExpr("result"))) val treeMapCreation = ObjectCreationExpr() .setType("TreeMap<String, IProtoLogGroup>") .setAnonymousClassBody(NodeList( InitializerDeclaration().setBody( initializerBlockStmt val method = classDeclaration.addMethod( "createLogGroupsMap", Modifier.Keyword.PRIVATE, Modifier.Keyword.STATIC, Modifier.Keyword.FINAL ) )) field.setFinal(true) field.variables.first().setInitializer(treeMapCreation) } else -> error("Unhandled ProtoLogToolInjected value: $valueName.") } } } method.setType("TreeMap<String, IProtoLogGroup>") method.setBody(body) } } Loading