diff options
author | Adam Pardyl <apardyl@google.com> | 2019-09-24 17:56:44 +0200 |
---|---|---|
committer | Adam Pardyl <apardyl@google.com> | 2019-09-25 12:36:32 +0200 |
commit | a4e572d9449012b1f612e97b564f15aae95eff44 (patch) | |
tree | ebaa6e0cc074bc5a3f816439c61e845cdec48092 /tools/protologtool | |
parent | 5b2b3dc0d4603c9fe91f7ee89ab4256e0cb4b4b3 (diff) |
ProtoLog improvements
- Added log statement location info to viewer config
- Fixed a NPE in ProtoLogImpl
- Reworked early return for log calls
- Changed type of message hash field to signed (for Java compat)
- Fix flaky tests for ProtoLogImpl
Bug:
Test: atest protologtool-tests FrameworksServicesTests:com.android.server.protolog
Change-Id: I7874475083ab5d01fe46fd3013a058743acd3884
Diffstat (limited to 'tools/protologtool')
8 files changed, 131 insertions, 76 deletions
diff --git a/tools/protologtool/src/com/android/protolog/tool/CodeUtils.kt b/tools/protologtool/src/com/android/protolog/tool/CodeUtils.kt index 5c921612df45..cb2950802c5d 100644 --- a/tools/protologtool/src/com/android/protolog/tool/CodeUtils.kt +++ b/tools/protologtool/src/com/android/protolog/tool/CodeUtils.kt @@ -20,6 +20,7 @@ import com.github.javaparser.ast.CompilationUnit import com.github.javaparser.ast.ImportDeclaration import com.github.javaparser.ast.expr.BinaryExpr import com.github.javaparser.ast.expr.Expression +import com.github.javaparser.ast.expr.MethodCallExpr import com.github.javaparser.ast.expr.StringLiteralExpr object CodeUtils { @@ -27,8 +28,9 @@ object CodeUtils { * Returns a stable hash of a string. * We reimplement String::hashCode() for readability reasons. */ - fun hash(str: String, level: LogLevel): Int { - return (level.name + str).map { c -> c.toInt() }.reduce { h, c -> h * 31 + c } + fun hash(position: String, messageString: String, logLevel: LogLevel, logGroup: LogGroup): Int { + return (position + messageString + logLevel.name + logGroup.name) + .map { c -> c.toInt() }.reduce { h, c -> h * 31 + c } } fun isWildcardStaticImported(code: CompilationUnit, className: String): Boolean { @@ -71,4 +73,11 @@ object CodeUtils { "or concatenation of string literals.", expr) } } + + fun getPositionString(call: MethodCallExpr, fileName: String): String { + return when { + call.range.isPresent -> "$fileName:${call.range.get().begin.line}" + else -> fileName + } + } } diff --git a/tools/protologtool/src/com/android/protolog/tool/Constants.kt b/tools/protologtool/src/com/android/protolog/tool/Constants.kt index 83b3c00ebc28..aa3e00f2f4db 100644 --- a/tools/protologtool/src/com/android/protolog/tool/Constants.kt +++ b/tools/protologtool/src/com/android/protolog/tool/Constants.kt @@ -19,6 +19,6 @@ package com.android.protolog.tool object Constants { const val NAME = "protologtool" const val VERSION = "1.0.0" - const val IS_LOG_TO_ANY_METHOD = "isLogToAny" + const val IS_ENABLED_METHOD = "isEnabled" const val ENUM_VALUES_METHOD = "values" } diff --git a/tools/protologtool/src/com/android/protolog/tool/ProtoLogTool.kt b/tools/protologtool/src/com/android/protolog/tool/ProtoLogTool.kt index 9678ec3a02ba..53834a69ef9f 100644 --- a/tools/protologtool/src/com/android/protolog/tool/ProtoLogTool.kt +++ b/tools/protologtool/src/com/android/protolog/tool/ProtoLogTool.kt @@ -49,14 +49,14 @@ object ProtoLogTool { val file = File(path) val text = file.readText() val code = StaticJavaParser.parse(text) + val pack = if (code.packageDeclaration.isPresent) code.packageDeclaration + .get().nameAsString else "" + val newPath = pack.replace('.', '/') + '/' + file.name val outSrc = when { containsProtoLogText(text, command.protoLogClassNameArg) -> - transformer.processClass(text, code) + transformer.processClass(text, newPath, code) else -> text } - val pack = if (code.packageDeclaration.isPresent) code.packageDeclaration - .get().nameAsString else "" - val newPath = pack.replace('.', '/') + '/' + file.name outJar.putNextEntry(ZipEntry(newPath)) outJar.write(outSrc.toByteArray()) outJar.closeEntry() @@ -76,7 +76,11 @@ object ProtoLogTool { val file = File(path) val text = file.readText() if (containsProtoLogText(text, command.protoLogClassNameArg)) { - builder.processClass(StaticJavaParser.parse(text)) + val code = StaticJavaParser.parse(text) + val pack = if (code.packageDeclaration.isPresent) code.packageDeclaration + .get().nameAsString else "" + val newPath = pack.replace('.', '/') + '/' + file.name + builder.processClass(code, newPath) } } val out = FileOutputStream(command.viewerConfigJsonArg) diff --git a/tools/protologtool/src/com/android/protolog/tool/SourceTransformer.kt b/tools/protologtool/src/com/android/protolog/tool/SourceTransformer.kt index c3920780b22a..3f38bc01fc7c 100644 --- a/tools/protologtool/src/com/android/protolog/tool/SourceTransformer.kt +++ b/tools/protologtool/src/com/android/protolog/tool/SourceTransformer.kt @@ -16,7 +16,7 @@ package com.android.protolog.tool -import com.android.protolog.tool.Constants.IS_LOG_TO_ANY_METHOD +import com.android.protolog.tool.Constants.IS_ENABLED_METHOD import com.android.server.protolog.common.LogDataType import com.github.javaparser.StaticJavaParser import com.github.javaparser.ast.CompilationUnit @@ -73,7 +73,8 @@ class SourceTransformer( } val ifStmt: IfStmt if (group.enabled) { - val hash = CodeUtils.hash(messageString, level) + val position = CodeUtils.getPositionString(call, fileName) + val hash = CodeUtils.hash(position, messageString, level, group) val newCall = call.clone() if (!group.textEnabled) { // Remove message string if text logging is not enabled by default. @@ -90,12 +91,12 @@ class SourceTransformer( // Out: ProtoLog.e(GROUP, 1234, 0, null, arg) newCall.arguments.add(2, IntegerLiteralExpr(typeMask)) // Replace call to a stub method with an actual implementation. - // Out: com.android.server.wm.ProtoLogImpl.e(GROUP, 1234, null, arg) + // Out: com.android.server.protolog.ProtoLogImpl.e(GROUP, 1234, null, arg) newCall.setScope(protoLogImplClassNode) - // Create a call to GROUP.isLogAny() - // Out: GROUP.isLogAny() - val isLogAnyExpr = MethodCallExpr(newCall.arguments[0].clone(), - SimpleName(IS_LOG_TO_ANY_METHOD)) + // Create a call to ProtoLogImpl.isEnabled(GROUP) + // Out: com.android.server.protolog.ProtoLogImpl.isEnabled(GROUP) + val isLogEnabled = MethodCallExpr(protoLogImplClassNode, IS_ENABLED_METHOD, + NodeList<Expression>(newCall.arguments[0].clone())) if (argTypes.size != call.arguments.size - 2) { throw InvalidProtoLogCallException( "Number of arguments does not mach format string", call) @@ -120,11 +121,11 @@ class SourceTransformer( } blockStmt.addStatement(ExpressionStmt(newCall)) // Create an IF-statement with the previously created condition. - // Out: if (GROUP.isLogAny()) { + // Out: if (com.android.server.protolog.ProtoLogImpl.isEnabled(GROUP)) { // long protoLogParam0 = arg; - // com.android.server.wm.ProtoLogImpl.e(GROUP, 1234, 0, null, protoLogParam0); + // com.android.server.protolog.ProtoLogImpl.e(GROUP, 1234, 0, null, protoLogParam0); // } - ifStmt = IfStmt(isLogAnyExpr, blockStmt, null) + ifStmt = IfStmt(isLogEnabled, blockStmt, null) } else { // Surround with if (false). val newCall = parentStmt.clone() @@ -212,12 +213,15 @@ class SourceTransformer( StaticJavaParser.parseExpression<FieldAccessExpr>(protoLogImplClassName) private var processedCode: MutableList<String> = mutableListOf() private var offsets: IntArray = IntArray(0) + private var fileName: String = "" fun processClass( code: String, + path: String, compilationUnit: CompilationUnit = StaticJavaParser.parse(code) ): String { + fileName = path processedCode = code.split('\n').toMutableList() offsets = IntArray(processedCode.size) LexicalPreservingPrinter.setup(compilationUnit) diff --git a/tools/protologtool/src/com/android/protolog/tool/ViewerConfigBuilder.kt b/tools/protologtool/src/com/android/protolog/tool/ViewerConfigBuilder.kt index a75b5c9bbe4b..4c4179768b7f 100644 --- a/tools/protologtool/src/com/android/protolog/tool/ViewerConfigBuilder.kt +++ b/tools/protologtool/src/com/android/protolog/tool/ViewerConfigBuilder.kt @@ -32,24 +32,28 @@ class ViewerConfigBuilder( group: LogGroup ) { if (group.enabled) { - val key = CodeUtils.hash(messageString, level) + val position = CodeUtils.getPositionString(call, fileName) + val key = CodeUtils.hash(position, messageString, level, group) if (statements.containsKey(key)) { - if (statements[key] != Triple(messageString, level, group)) { + if (statements[key] != LogCall(messageString, level, group, position)) { throw HashCollisionException( "Please modify the log message \"$messageString\" " + "or \"${statements[key]}\" - their hashes are equal.") } } else { groups.add(group) - statements[key] = Triple(messageString, level, group) + statements[key] = LogCall(messageString, level, group, position) + call.range.isPresent } } } - private val statements: MutableMap<Int, Triple<String, LogLevel, LogGroup>> = mutableMapOf() + private val statements: MutableMap<Int, LogCall> = mutableMapOf() private val groups: MutableSet<LogGroup> = mutableSetOf() + private var fileName: String = "" - fun processClass(unit: CompilationUnit) { + fun processClass(unit: CompilationUnit, fileName: String) { + this.fileName = fileName protoLogCallVisitor.process(unit, this) } @@ -66,11 +70,13 @@ class ViewerConfigBuilder( writer.name(key.toString()) writer.beginObject() writer.name("message") - writer.value(value.first) + writer.value(value.messageString) writer.name("level") - writer.value(value.second.name) + writer.value(value.logLevel.name) writer.name("group") - writer.value(value.third.name) + writer.value(value.logGroup.name) + writer.name("at") + writer.value(value.position) writer.endObject() } writer.endObject() @@ -88,4 +94,11 @@ class ViewerConfigBuilder( stringWriter.buffer.append('\n') return stringWriter.toString() } + + data class LogCall( + val messageString: String, + val logLevel: LogLevel, + val logGroup: LogGroup, + val position: String + ) } diff --git a/tools/protologtool/tests/com/android/protolog/tool/CodeUtilsTest.kt b/tools/protologtool/tests/com/android/protolog/tool/CodeUtilsTest.kt index 337ed995891c..0acbc9074857 100644 --- a/tools/protologtool/tests/com/android/protolog/tool/CodeUtilsTest.kt +++ b/tools/protologtool/tests/com/android/protolog/tool/CodeUtilsTest.kt @@ -27,17 +27,32 @@ import org.junit.Test class CodeUtilsTest { @Test fun hash() { - assertEquals(-1704685243, CodeUtils.hash("test", LogLevel.DEBUG)) + assertEquals(-1259556708, CodeUtils.hash("Test.java:50", "test", + LogLevel.DEBUG, LogGroup("test", true, true, "TAG"))) + } + + @Test + fun hash_changeLocation() { + assertEquals(15793504, CodeUtils.hash("Test.java:10", "test2", + LogLevel.DEBUG, LogGroup("test", true, true, "TAG"))) } @Test fun hash_changeLevel() { - assertEquals(-1176900998, CodeUtils.hash("test", LogLevel.ERROR)) + assertEquals(-731772463, CodeUtils.hash("Test.java:50", "test", + LogLevel.ERROR, LogGroup("test", true, true, "TAG"))) } @Test fun hash_changeMessage() { - assertEquals(-1305634931, CodeUtils.hash("test2", LogLevel.DEBUG)) + assertEquals(-2026343204, CodeUtils.hash("Test.java:50", "test2", + LogLevel.DEBUG, LogGroup("test", true, true, "TAG"))) + } + + @Test + fun hash_changeGroup() { + assertEquals(1607870166, CodeUtils.hash("Test.java:50", "test2", + LogLevel.DEBUG, LogGroup("test2", true, true, "TAG"))) } @Test diff --git a/tools/protologtool/tests/com/android/protolog/tool/SourceTransformerTest.kt b/tools/protologtool/tests/com/android/protolog/tool/SourceTransformerTest.kt index d6e4a36dc3da..f221fbd216b9 100644 --- a/tools/protologtool/tests/com/android/protolog/tool/SourceTransformerTest.kt +++ b/tools/protologtool/tests/com/android/protolog/tool/SourceTransformerTest.kt @@ -78,7 +78,7 @@ class SourceTransformerTest { class Test { void test() { - if (TEST_GROUP.isLogToAny()) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; org.example.ProtoLogImpl.w(TEST_GROUP, 835524026, 9, "test %d %f", protoLogParam0, protoLogParam1); } + if (org.example.ProtoLogImpl.isEnabled(TEST_GROUP)) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; org.example.ProtoLogImpl.w(TEST_GROUP, 1922613844, 9, "test %d %f", protoLogParam0, protoLogParam1); } } } """.trimIndent() @@ -88,7 +88,7 @@ class SourceTransformerTest { class Test { void test() { - if (TEST_GROUP.isLogToAny()) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; String protoLogParam2 = String.valueOf("test"); org.example.ProtoLogImpl.w(TEST_GROUP, -986393606, 9, "test %d %f " + "abc %s\n test", protoLogParam0, protoLogParam1, protoLogParam2); + if (org.example.ProtoLogImpl.isEnabled(TEST_GROUP)) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; String protoLogParam2 = String.valueOf("test"); org.example.ProtoLogImpl.w(TEST_GROUP, 805272208, 9, "test %d %f " + "abc %s\n test", protoLogParam0, protoLogParam1, protoLogParam2); } } @@ -100,8 +100,8 @@ class SourceTransformerTest { class Test { void test() { - if (TEST_GROUP.isLogToAny()) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; org.example.ProtoLogImpl.w(TEST_GROUP, 835524026, 9, "test %d %f", protoLogParam0, protoLogParam1); } /* ProtoLog.w(TEST_GROUP, "test %d %f", 100, 0.1); */ if (TEST_GROUP.isLogToAny()) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; org.example.ProtoLogImpl.w(TEST_GROUP, 835524026, 9, "test %d %f", protoLogParam0, protoLogParam1); } - if (TEST_GROUP.isLogToAny()) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; org.example.ProtoLogImpl.w(TEST_GROUP, 835524026, 9, "test %d %f", protoLogParam0, protoLogParam1); } + if (org.example.ProtoLogImpl.isEnabled(TEST_GROUP)) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; org.example.ProtoLogImpl.w(TEST_GROUP, 1922613844, 9, "test %d %f", protoLogParam0, protoLogParam1); } /* ProtoLog.w(TEST_GROUP, "test %d %f", 100, 0.1); */ if (org.example.ProtoLogImpl.isEnabled(TEST_GROUP)) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; org.example.ProtoLogImpl.w(TEST_GROUP, 1922613844, 9, "test %d %f", protoLogParam0, protoLogParam1); } + if (org.example.ProtoLogImpl.isEnabled(TEST_GROUP)) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; org.example.ProtoLogImpl.w(TEST_GROUP, -154595499, 9, "test %d %f", protoLogParam0, protoLogParam1); } } } """.trimIndent() @@ -111,7 +111,7 @@ class SourceTransformerTest { class Test { void test() { - if (TEST_GROUP.isLogToAny()) { org.example.ProtoLogImpl.w(TEST_GROUP, 1282022424, 0, "test", (Object[]) null); } + if (org.example.ProtoLogImpl.isEnabled(TEST_GROUP)) { org.example.ProtoLogImpl.w(TEST_GROUP, 1913810354, 0, "test", (Object[]) null); } } } """.trimIndent() @@ -121,7 +121,7 @@ class SourceTransformerTest { class Test { void test() { - if (TEST_GROUP.isLogToAny()) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; org.example.ProtoLogImpl.w(TEST_GROUP, 835524026, 9, null, protoLogParam0, protoLogParam1); } + if (org.example.ProtoLogImpl.isEnabled(TEST_GROUP)) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; org.example.ProtoLogImpl.w(TEST_GROUP, 1922613844, 9, null, protoLogParam0, protoLogParam1); } } } """.trimIndent() @@ -131,7 +131,7 @@ class SourceTransformerTest { class Test { void test() { - if (TEST_GROUP.isLogToAny()) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; String protoLogParam2 = String.valueOf("test"); org.example.ProtoLogImpl.w(TEST_GROUP, -986393606, 9, null, protoLogParam0, protoLogParam1, protoLogParam2); + if (org.example.ProtoLogImpl.isEnabled(TEST_GROUP)) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; String protoLogParam2 = String.valueOf("test"); org.example.ProtoLogImpl.w(TEST_GROUP, 805272208, 9, null, protoLogParam0, protoLogParam1, protoLogParam2); } } @@ -160,10 +160,13 @@ class SourceTransformerTest { } """.trimIndent() /* ktlint-enable max-line-length */ + + private const val PATH = "com.example.Test.java" } private val processor: ProtoLogCallProcessor = Mockito.mock(ProtoLogCallProcessor::class.java) - private val sourceJarWriter = SourceTransformer("org.example.ProtoLogImpl", processor) + private val implPath = "org.example.ProtoLogImpl" + private val sourceJarWriter = SourceTransformer(implPath, processor) private fun <T> any(type: Class<T>): T = Mockito.any<T>(type) @@ -181,13 +184,13 @@ class SourceTransformerTest { invocation.arguments[0] as CompilationUnit } - val out = sourceJarWriter.processClass(TEST_CODE, code) + val out = sourceJarWriter.processClass(TEST_CODE, PATH, code) code = StaticJavaParser.parse(out) val ifStmts = code.findAll(IfStmt::class.java) assertEquals(1, ifStmts.size) val ifStmt = ifStmts[0] - assertEquals("TEST_GROUP.${Constants.IS_LOG_TO_ANY_METHOD}()", + assertEquals("$implPath.${Constants.IS_ENABLED_METHOD}(TEST_GROUP)", ifStmt.condition.toString()) assertFalse(ifStmt.elseStmt.isPresent) assertEquals(3, ifStmt.thenStmt.childNodes.size) @@ -196,7 +199,7 @@ class SourceTransformerTest { assertEquals("w", methodCall.name.asString()) assertEquals(6, methodCall.arguments.size) assertEquals("TEST_GROUP", methodCall.arguments[0].toString()) - assertEquals("835524026", methodCall.arguments[1].toString()) + assertEquals("1922613844", methodCall.arguments[1].toString()) assertEquals(0b1001.toString(), methodCall.arguments[2].toString()) assertEquals("\"test %d %f\"", methodCall.arguments[3].toString()) assertEquals("protoLogParam0", methodCall.arguments[4].toString()) @@ -223,13 +226,13 @@ class SourceTransformerTest { invocation.arguments[0] as CompilationUnit } - val out = sourceJarWriter.processClass(TEST_CODE_MULTICALLS, code) + val out = sourceJarWriter.processClass(TEST_CODE_MULTICALLS, PATH, code) code = StaticJavaParser.parse(out) val ifStmts = code.findAll(IfStmt::class.java) assertEquals(3, ifStmts.size) val ifStmt = ifStmts[1] - assertEquals("TEST_GROUP.${Constants.IS_LOG_TO_ANY_METHOD}()", + assertEquals("$implPath.${Constants.IS_ENABLED_METHOD}(TEST_GROUP)", ifStmt.condition.toString()) assertFalse(ifStmt.elseStmt.isPresent) assertEquals(3, ifStmt.thenStmt.childNodes.size) @@ -238,7 +241,7 @@ class SourceTransformerTest { assertEquals("w", methodCall.name.asString()) assertEquals(6, methodCall.arguments.size) assertEquals("TEST_GROUP", methodCall.arguments[0].toString()) - assertEquals("835524026", methodCall.arguments[1].toString()) + assertEquals("1922613844", methodCall.arguments[1].toString()) assertEquals(0b1001.toString(), methodCall.arguments[2].toString()) assertEquals("\"test %d %f\"", methodCall.arguments[3].toString()) assertEquals("protoLogParam0", methodCall.arguments[4].toString()) @@ -261,13 +264,13 @@ class SourceTransformerTest { invocation.arguments[0] as CompilationUnit } - val out = sourceJarWriter.processClass(TEST_CODE_MULTILINE, code) + val out = sourceJarWriter.processClass(TEST_CODE_MULTILINE, PATH, code) code = StaticJavaParser.parse(out) val ifStmts = code.findAll(IfStmt::class.java) assertEquals(1, ifStmts.size) val ifStmt = ifStmts[0] - assertEquals("TEST_GROUP.${Constants.IS_LOG_TO_ANY_METHOD}()", + assertEquals("$implPath.${Constants.IS_ENABLED_METHOD}(TEST_GROUP)", ifStmt.condition.toString()) assertFalse(ifStmt.elseStmt.isPresent) assertEquals(4, ifStmt.thenStmt.childNodes.size) @@ -276,7 +279,7 @@ class SourceTransformerTest { assertEquals("w", methodCall.name.asString()) assertEquals(7, methodCall.arguments.size) assertEquals("TEST_GROUP", methodCall.arguments[0].toString()) - assertEquals("-986393606", methodCall.arguments[1].toString()) + assertEquals("805272208", methodCall.arguments[1].toString()) assertEquals(0b001001.toString(), methodCall.arguments[2].toString()) assertEquals("protoLogParam0", methodCall.arguments[4].toString()) assertEquals("protoLogParam1", methodCall.arguments[5].toString()) @@ -298,13 +301,13 @@ class SourceTransformerTest { invocation.arguments[0] as CompilationUnit } - val out = sourceJarWriter.processClass(TEST_CODE_NO_PARAMS, code) + val out = sourceJarWriter.processClass(TEST_CODE_NO_PARAMS, PATH, code) code = StaticJavaParser.parse(out) val ifStmts = code.findAll(IfStmt::class.java) assertEquals(1, ifStmts.size) val ifStmt = ifStmts[0] - assertEquals("TEST_GROUP.${Constants.IS_LOG_TO_ANY_METHOD}()", + assertEquals("$implPath.${Constants.IS_ENABLED_METHOD}(TEST_GROUP)", ifStmt.condition.toString()) assertFalse(ifStmt.elseStmt.isPresent) assertEquals(1, ifStmt.thenStmt.childNodes.size) @@ -313,7 +316,7 @@ class SourceTransformerTest { assertEquals("w", methodCall.name.asString()) assertEquals(5, methodCall.arguments.size) assertEquals("TEST_GROUP", methodCall.arguments[0].toString()) - assertEquals("1282022424", methodCall.arguments[1].toString()) + assertEquals("1913810354", methodCall.arguments[1].toString()) assertEquals(0.toString(), methodCall.arguments[2].toString()) assertEquals(TRANSFORMED_CODE_NO_PARAMS, out) } @@ -332,13 +335,13 @@ class SourceTransformerTest { invocation.arguments[0] as CompilationUnit } - val out = sourceJarWriter.processClass(TEST_CODE, code) + val out = sourceJarWriter.processClass(TEST_CODE, PATH, code) code = StaticJavaParser.parse(out) val ifStmts = code.findAll(IfStmt::class.java) assertEquals(1, ifStmts.size) val ifStmt = ifStmts[0] - assertEquals("TEST_GROUP.${Constants.IS_LOG_TO_ANY_METHOD}()", + assertEquals("$implPath.${Constants.IS_ENABLED_METHOD}(TEST_GROUP)", ifStmt.condition.toString()) assertFalse(ifStmt.elseStmt.isPresent) assertEquals(3, ifStmt.thenStmt.childNodes.size) @@ -347,7 +350,7 @@ class SourceTransformerTest { assertEquals("w", methodCall.name.asString()) assertEquals(6, methodCall.arguments.size) assertEquals("TEST_GROUP", methodCall.arguments[0].toString()) - assertEquals("835524026", methodCall.arguments[1].toString()) + assertEquals("1922613844", methodCall.arguments[1].toString()) assertEquals(0b1001.toString(), methodCall.arguments[2].toString()) assertEquals("null", methodCall.arguments[3].toString()) assertEquals("protoLogParam0", methodCall.arguments[4].toString()) @@ -370,13 +373,13 @@ class SourceTransformerTest { invocation.arguments[0] as CompilationUnit } - val out = sourceJarWriter.processClass(TEST_CODE_MULTILINE, code) + val out = sourceJarWriter.processClass(TEST_CODE_MULTILINE, PATH, code) code = StaticJavaParser.parse(out) val ifStmts = code.findAll(IfStmt::class.java) assertEquals(1, ifStmts.size) val ifStmt = ifStmts[0] - assertEquals("TEST_GROUP.${Constants.IS_LOG_TO_ANY_METHOD}()", + assertEquals("$implPath.${Constants.IS_ENABLED_METHOD}(TEST_GROUP)", ifStmt.condition.toString()) assertFalse(ifStmt.elseStmt.isPresent) assertEquals(4, ifStmt.thenStmt.childNodes.size) @@ -385,7 +388,7 @@ class SourceTransformerTest { assertEquals("w", methodCall.name.asString()) assertEquals(7, methodCall.arguments.size) assertEquals("TEST_GROUP", methodCall.arguments[0].toString()) - assertEquals("-986393606", methodCall.arguments[1].toString()) + assertEquals("805272208", methodCall.arguments[1].toString()) assertEquals(0b001001.toString(), methodCall.arguments[2].toString()) assertEquals("null", methodCall.arguments[3].toString()) assertEquals("protoLogParam0", methodCall.arguments[4].toString()) @@ -408,7 +411,7 @@ class SourceTransformerTest { invocation.arguments[0] as CompilationUnit } - val out = sourceJarWriter.processClass(TEST_CODE, code) + val out = sourceJarWriter.processClass(TEST_CODE, PATH, code) code = StaticJavaParser.parse(out) val ifStmts = code.findAll(IfStmt::class.java) @@ -433,7 +436,7 @@ class SourceTransformerTest { invocation.arguments[0] as CompilationUnit } - val out = sourceJarWriter.processClass(TEST_CODE_MULTILINE, code) + val out = sourceJarWriter.processClass(TEST_CODE_MULTILINE, PATH, code) code = StaticJavaParser.parse(out) val ifStmts = code.findAll(IfStmt::class.java) diff --git a/tools/protologtool/tests/com/android/protolog/tool/ViewerConfigBuilderTest.kt b/tools/protologtool/tests/com/android/protolog/tool/ViewerConfigBuilderTest.kt index f435d4065256..d3f8c767e8b1 100644 --- a/tools/protologtool/tests/com/android/protolog/tool/ViewerConfigBuilderTest.kt +++ b/tools/protologtool/tests/com/android/protolog/tool/ViewerConfigBuilderTest.kt @@ -31,6 +31,10 @@ class ViewerConfigBuilderTest { private val TEST1 = ViewerConfigParser.ConfigEntry("test1", LogLevel.INFO.name, TAG1) private val TEST2 = ViewerConfigParser.ConfigEntry("test2", LogLevel.DEBUG.name, TAG2) private val TEST3 = ViewerConfigParser.ConfigEntry("test3", LogLevel.ERROR.name, TAG2) + private val GROUP1 = LogGroup("TEST_GROUP", true, true, TAG1) + private val GROUP2 = LogGroup("DEBUG_GROUP", true, true, TAG2) + private val GROUP3 = LogGroup("DEBUG_GROUP", true, true, TAG2) + private const val PATH = "/tmp/test.java" } private val processor: ProtoLogCallProcessor = Mockito.mock(ProtoLogCallProcessor::class.java) @@ -50,25 +54,25 @@ class ViewerConfigBuilderTest { val visitor = invocation.arguments[1] as ProtoLogCallVisitor visitor.processCall(MethodCallExpr(), TEST1.messageString, LogLevel.INFO, - LogGroup("TEST_GROUP", true, true, TAG1)) + GROUP1) visitor.processCall(MethodCallExpr(), TEST2.messageString, LogLevel.DEBUG, - LogGroup("DEBUG_GROUP", true, true, TAG2)) + GROUP2) visitor.processCall(MethodCallExpr(), TEST3.messageString, LogLevel.ERROR, - LogGroup("DEBUG_GROUP", true, true, TAG2)) + GROUP3) invocation.arguments[0] as CompilationUnit } - configBuilder.processClass(dummyCompilationUnit) + configBuilder.processClass(dummyCompilationUnit, PATH) val parsedConfig = parseConfig(configBuilder.build()) assertEquals(3, parsedConfig.size) - assertEquals(TEST1, parsedConfig[CodeUtils.hash(TEST1.messageString, - LogLevel.INFO)]) - assertEquals(TEST2, parsedConfig[CodeUtils.hash(TEST2.messageString, - LogLevel.DEBUG)]) - assertEquals(TEST3, parsedConfig[CodeUtils.hash(TEST3.messageString, - LogLevel.ERROR)]) + assertEquals(TEST1, parsedConfig[CodeUtils.hash(PATH, + TEST1.messageString, LogLevel.INFO, GROUP1)]) + assertEquals(TEST2, parsedConfig[CodeUtils.hash(PATH, TEST2.messageString, + LogLevel.DEBUG, GROUP2)]) + assertEquals(TEST3, parsedConfig[CodeUtils.hash(PATH, TEST3.messageString, + LogLevel.ERROR, GROUP3)]) } @Test @@ -78,20 +82,21 @@ class ViewerConfigBuilderTest { val visitor = invocation.arguments[1] as ProtoLogCallVisitor visitor.processCall(MethodCallExpr(), TEST1.messageString, LogLevel.INFO, - LogGroup("TEST_GROUP", true, true, TAG1)) + GROUP1) visitor.processCall(MethodCallExpr(), TEST1.messageString, LogLevel.INFO, - LogGroup("TEST_GROUP", true, true, TAG1)) + GROUP1) visitor.processCall(MethodCallExpr(), TEST1.messageString, LogLevel.INFO, - LogGroup("TEST_GROUP", true, true, TAG1)) + GROUP1) invocation.arguments[0] as CompilationUnit } - configBuilder.processClass(dummyCompilationUnit) + configBuilder.processClass(dummyCompilationUnit, PATH) val parsedConfig = parseConfig(configBuilder.build()) assertEquals(1, parsedConfig.size) - assertEquals(TEST1, parsedConfig[CodeUtils.hash(TEST1.messageString, LogLevel.INFO)]) + assertEquals(TEST1, parsedConfig[CodeUtils.hash(PATH, TEST1.messageString, + LogLevel.INFO, GROUP1)]) } @Test @@ -101,7 +106,7 @@ class ViewerConfigBuilderTest { val visitor = invocation.arguments[1] as ProtoLogCallVisitor visitor.processCall(MethodCallExpr(), TEST1.messageString, LogLevel.INFO, - LogGroup("TEST_GROUP", true, true, TAG1)) + GROUP1) visitor.processCall(MethodCallExpr(), TEST2.messageString, LogLevel.DEBUG, LogGroup("DEBUG_GROUP", false, true, TAG2)) visitor.processCall(MethodCallExpr(), TEST3.messageString, LogLevel.ERROR, @@ -110,11 +115,13 @@ class ViewerConfigBuilderTest { invocation.arguments[0] as CompilationUnit } - configBuilder.processClass(dummyCompilationUnit) + configBuilder.processClass(dummyCompilationUnit, PATH) val parsedConfig = parseConfig(configBuilder.build()) assertEquals(2, parsedConfig.size) - assertEquals(TEST1, parsedConfig[CodeUtils.hash(TEST1.messageString, LogLevel.INFO)]) - assertEquals(TEST3, parsedConfig[CodeUtils.hash(TEST3.messageString, LogLevel.ERROR)]) + assertEquals(TEST1, parsedConfig[CodeUtils.hash(PATH, TEST1.messageString, + LogLevel.INFO, GROUP1)]) + assertEquals(TEST3, parsedConfig[CodeUtils.hash(PATH, TEST3.messageString, + LogLevel.ERROR, LogGroup("DEBUG_GROUP", true, false, TAG2))]) } } |