diff options
author | Adrian Roos <roosa@google.com> | 2019-10-03 17:30:14 +0200 |
---|---|---|
committer | Adrian Roos <roosa@google.com> | 2019-10-18 18:22:30 +0200 |
commit | 2ca5d8601c09ecb9466d286a7d8e2f5eb520510b (patch) | |
tree | d11ba4c47995d69e69a0d67d38bc556b4e014b07 /tools/protologtool | |
parent | cd45b2ab20987665ec9324ac81a8e16a995a5da9 (diff) |
ProtoLog: Cache the result of ProtoLogImpl.isEnabled(ProtoLogGroup)
We introduce a generated class ProtoLog$Cache, which contains a field
for each ProtoLogGroup to cache whether it is enabled or not.
This both makes lookup faster, and reduces code size.
Test: make droid
Change-Id: I581c87849c875918b182eff85996b6d19a6755ec
Diffstat (limited to 'tools/protologtool')
6 files changed, 166 insertions, 30 deletions
diff --git a/tools/protologtool/src/com/android/protolog/tool/CommandOptions.kt b/tools/protologtool/src/com/android/protolog/tool/CommandOptions.kt index 3dfa4d216cc2..bfbbf7a32c22 100644 --- a/tools/protologtool/src/com/android/protolog/tool/CommandOptions.kt +++ b/tools/protologtool/src/com/android/protolog/tool/CommandOptions.kt @@ -27,19 +27,21 @@ class CommandOptions(args: Array<String>) { private const val PROTOLOG_CLASS_PARAM = "--protolog-class" private const val PROTOLOGIMPL_CLASS_PARAM = "--protolog-impl-class" + private const val PROTOLOGCACHE_CLASS_PARAM = "--protolog-cache-class" private const val PROTOLOGGROUP_CLASS_PARAM = "--loggroups-class" private const val PROTOLOGGROUP_JAR_PARAM = "--loggroups-jar" private const val VIEWER_CONFIG_JSON_PARAM = "--viewer-conf" private const val OUTPUT_SOURCE_JAR_PARAM = "--output-srcjar" private val parameters = setOf(PROTOLOG_CLASS_PARAM, PROTOLOGIMPL_CLASS_PARAM, - PROTOLOGGROUP_CLASS_PARAM, PROTOLOGGROUP_JAR_PARAM, VIEWER_CONFIG_JSON_PARAM, - OUTPUT_SOURCE_JAR_PARAM) + PROTOLOGCACHE_CLASS_PARAM, PROTOLOGGROUP_CLASS_PARAM, PROTOLOGGROUP_JAR_PARAM, + VIEWER_CONFIG_JSON_PARAM, OUTPUT_SOURCE_JAR_PARAM) val USAGE = """ Usage: ${Constants.NAME} <command> [<args>] Available commands: $TRANSFORM_CALLS_CMD $PROTOLOG_CLASS_PARAM <class name> $PROTOLOGIMPL_CLASS_PARAM + <class name> $PROTOLOGCACHE_CLASS_PARAM <class name> $PROTOLOGGROUP_CLASS_PARAM <class name> $PROTOLOGGROUP_JAR_PARAM <config.jar> $OUTPUT_SOURCE_JAR_PARAM <output.srcjar> [<input.java>] - processes java files replacing stub calls with logging code. @@ -54,7 +56,7 @@ class CommandOptions(args: Array<String>) { """.trimIndent() private fun validateClassName(name: String): String { - if (!Pattern.matches("^([a-z]+[A-Za-z0-9]*\\.)+([A-Za-z0-9]+)$", name)) { + if (!Pattern.matches("^([a-z]+[A-Za-z0-9]*\\.)+([A-Za-z0-9$]+)$", name)) { throw InvalidCommandException("Invalid class name $name") } return name @@ -121,6 +123,7 @@ class CommandOptions(args: Array<String>) { val protoLogClassNameArg: String val protoLogGroupsClassNameArg: String val protoLogImplClassNameArg: String + val protoLogCacheClassNameArg: String val protoLogGroupsJarArg: String val viewerConfigJsonArg: String val outputSourceJarArg: String @@ -170,6 +173,8 @@ class CommandOptions(args: Array<String>) { params)) protoLogImplClassNameArg = validateClassName(getParam(PROTOLOGIMPL_CLASS_PARAM, params)) + protoLogCacheClassNameArg = validateClassName(getParam(PROTOLOGCACHE_CLASS_PARAM, + params)) protoLogGroupsJarArg = validateJarName(getParam(PROTOLOGGROUP_JAR_PARAM, params)) viewerConfigJsonArg = validateNotSpecified(VIEWER_CONFIG_JSON_PARAM, params) outputSourceJarArg = validateSrcJarName(getParam(OUTPUT_SOURCE_JAR_PARAM, params)) @@ -181,6 +186,7 @@ class CommandOptions(args: Array<String>) { protoLogGroupsClassNameArg = validateClassName(getParam(PROTOLOGGROUP_CLASS_PARAM, params)) protoLogImplClassNameArg = validateNotSpecified(PROTOLOGIMPL_CLASS_PARAM, params) + protoLogCacheClassNameArg = validateNotSpecified(PROTOLOGCACHE_CLASS_PARAM, params) protoLogGroupsJarArg = validateJarName(getParam(PROTOLOGGROUP_JAR_PARAM, params)) viewerConfigJsonArg = validateJSONName(getParam(VIEWER_CONFIG_JSON_PARAM, params)) outputSourceJarArg = validateNotSpecified(OUTPUT_SOURCE_JAR_PARAM, params) @@ -191,6 +197,7 @@ class CommandOptions(args: Array<String>) { protoLogClassNameArg = validateNotSpecified(PROTOLOG_CLASS_PARAM, params) protoLogGroupsClassNameArg = validateNotSpecified(PROTOLOGGROUP_CLASS_PARAM, params) protoLogImplClassNameArg = validateNotSpecified(PROTOLOGIMPL_CLASS_PARAM, params) + protoLogCacheClassNameArg = validateNotSpecified(PROTOLOGCACHE_CLASS_PARAM, params) protoLogGroupsJarArg = validateNotSpecified(PROTOLOGGROUP_JAR_PARAM, params) viewerConfigJsonArg = validateJSONName(getParam(VIEWER_CONFIG_JSON_PARAM, params)) outputSourceJarArg = validateNotSpecified(OUTPUT_SOURCE_JAR_PARAM, params) diff --git a/tools/protologtool/src/com/android/protolog/tool/ProtoLogTool.kt b/tools/protologtool/src/com/android/protolog/tool/ProtoLogTool.kt index a8b9839a6226..629f720314b2 100644 --- a/tools/protologtool/src/com/android/protolog/tool/ProtoLogTool.kt +++ b/tools/protologtool/src/com/android/protolog/tool/ProtoLogTool.kt @@ -53,7 +53,8 @@ object ProtoLogTool { command.javaSourceArgs.map { path -> executor.submitCallable { - val transformer = SourceTransformer(command.protoLogImplClassNameArg, processor) + val transformer = SourceTransformer(command.protoLogImplClassNameArg, + command.protoLogCacheClassNameArg, processor) val file = File(path) val text = file.readText() val outSrc = try { @@ -80,10 +81,53 @@ object ProtoLogTool { executor.shutdown() + val cacheSplit = command.protoLogCacheClassNameArg.split(".") + val cacheName = cacheSplit.last() + val cachePackage = cacheSplit.dropLast(1).joinToString(".") + val cachePath = "gen/${cacheSplit.joinToString("/")}.java" + + outJar.putNextEntry(ZipEntry(cachePath)) + outJar.write(generateLogGroupCache(cachePackage, cacheName, groups, + command.protoLogImplClassNameArg, command.protoLogGroupsClassNameArg).toByteArray()) + outJar.close() out.close() } + fun generateLogGroupCache( + cachePackage: String, + cacheName: String, + groups: Map<String, LogGroup>, + protoLogImplClassName: String, + protoLogGroupsClassName: String + ): String { + val fields = groups.values.map { + "public static boolean ${it.name}_enabled = false;" + }.joinToString("\n") + + val updates = groups.values.map { + "${it.name}_enabled = " + + "$protoLogImplClassName.isEnabled($protoLogGroupsClassName.${it.name});" + }.joinToString("\n") + + return """ + package $cachePackage; + + public class $cacheName { +${fields.replaceIndent(" ")} + + static { + $protoLogImplClassName.sCacheUpdater = $cacheName::update; + update(); + } + + static void update() { +${updates.replaceIndent(" ")} + } + } + """.trimIndent() + } + private fun tryParse(code: String, fileName: String): CompilationUnit { try { return StaticJavaParser.parse(code) diff --git a/tools/protologtool/src/com/android/protolog/tool/SourceTransformer.kt b/tools/protologtool/src/com/android/protolog/tool/SourceTransformer.kt index 9a3877323048..0ad8091f97a2 100644 --- a/tools/protologtool/src/com/android/protolog/tool/SourceTransformer.kt +++ b/tools/protologtool/src/com/android/protolog/tool/SourceTransformer.kt @@ -16,7 +16,6 @@ package com.android.protolog.tool -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 @@ -45,6 +44,7 @@ import com.github.javaparser.printer.PrettyPrinterConfiguration class SourceTransformer( protoLogImplClassName: String, + protoLogCacheClassName: String, private val protoLogCallProcessor: ProtoLogCallProcessor ) : ProtoLogCallVisitor { override fun processCall( @@ -91,10 +91,9 @@ class SourceTransformer( // Replace call to a stub method with an actual implementation. // Out: com.android.server.protolog.ProtoLogImpl.e(GROUP, 1234, null, arg) newCall.setScope(protoLogImplClassNode) - // 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())) + // Create a call to ProtoLog$Cache.GROUP_enabled + // Out: com.android.server.protolog.ProtoLog$Cache.GROUP_enabled + val isLogEnabled = FieldAccessExpr(protoLogCacheClassNode, "${group.name}_enabled") if (argTypes.size != call.arguments.size - 2) { throw InvalidProtoLogCallException( "Number of arguments (${argTypes.size} does not mach format" + @@ -211,6 +210,8 @@ class SourceTransformer( private val protoLogImplClassNode = StaticJavaParser.parseExpression<FieldAccessExpr>(protoLogImplClassName) + private val protoLogCacheClassNode = + StaticJavaParser.parseExpression<FieldAccessExpr>(protoLogCacheClassName) private var processedCode: MutableList<String> = mutableListOf() private var offsets: IntArray = IntArray(0) private var fileName: String = "" diff --git a/tools/protologtool/tests/com/android/protolog/tool/CommandOptionsTest.kt b/tools/protologtool/tests/com/android/protolog/tool/CommandOptionsTest.kt index 615712e10bcf..cf36651c3e39 100644 --- a/tools/protologtool/tests/com/android/protolog/tool/CommandOptionsTest.kt +++ b/tools/protologtool/tests/com/android/protolog/tool/CommandOptionsTest.kt @@ -30,6 +30,7 @@ class CommandOptionsTest { ) private const val TEST_PROTOLOG_CLASS = "com.android.server.wm.ProtoLog" private const val TEST_PROTOLOGIMPL_CLASS = "com.android.server.wm.ProtoLogImpl" + private const val TEST_PROTOLOGCACHE_CLASS = "com.android.server.wm.ProtoLog\$Cache" private const val TEST_PROTOLOGGROUP_CLASS = "com.android.server.wm.ProtoLogGroup" private const val TEST_PROTOLOGGROUP_JAR = "out/soong/.intermediates/frameworks/base/" + "services/core/services.core.wm.protologgroups/android_common/javac/" + @@ -56,6 +57,7 @@ class CommandOptionsTest { fun transformClasses() { val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + + "--protolog-cache-class $TEST_PROTOLOGCACHE_CLASS " + "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" @@ -73,6 +75,7 @@ class CommandOptionsTest { fun transformClasses_noProtoLogClass() { val testLine = "transform-protolog-calls " + "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + + "--protolog-cache-class $TEST_PROTOLOGCACHE_CLASS " + "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" @@ -82,6 +85,17 @@ class CommandOptionsTest { @Test(expected = InvalidCommandException::class) fun transformClasses_noProtoLogImplClass() { val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + + "--protolog-cache-class $TEST_PROTOLOGCACHE_CLASS " + + "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + + "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + + "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" + CommandOptions(testLine.split(' ').toTypedArray()) + } + + @Test(expected = InvalidCommandException::class) + fun transformClasses_noProtoLogCacheClass() { + val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + + "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" @@ -92,6 +106,7 @@ class CommandOptionsTest { fun transformClasses_noProtoLogGroupClass() { val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + + "--protolog-cache-class $TEST_PROTOLOGCACHE_CLASS " + "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" CommandOptions(testLine.split(' ').toTypedArray()) @@ -101,6 +116,7 @@ class CommandOptionsTest { fun transformClasses_noProtoLogGroupJar() { val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + + "--protolog-cache-class $TEST_PROTOLOGCACHE_CLASS " + "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" CommandOptions(testLine.split(' ').toTypedArray()) @@ -110,6 +126,7 @@ class CommandOptionsTest { fun transformClasses_noOutJar() { val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + + "--protolog-cache-class $TEST_PROTOLOGCACHE_CLASS " + "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + TEST_JAVA_SRC.joinToString(" ") @@ -120,6 +137,7 @@ class CommandOptionsTest { fun transformClasses_noJavaInput() { val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + + "--protolog-cache-class $TEST_PROTOLOGCACHE_CLASS " + "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + "--output-srcjar $TEST_SRC_JAR" @@ -130,6 +148,7 @@ class CommandOptionsTest { fun transformClasses_invalidProtoLogClass() { val testLine = "transform-protolog-calls --protolog-class invalid " + "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + + "--protolog-cache-class $TEST_PROTOLOGCACHE_CLASS " + "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" @@ -140,6 +159,18 @@ class CommandOptionsTest { fun transformClasses_invalidProtoLogImplClass() { val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + "--protolog-impl-class invalid " + + "--protolog-cache-class $TEST_PROTOLOGCACHE_CLASS " + + "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + + "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + + "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" + CommandOptions(testLine.split(' ').toTypedArray()) + } + + @Test(expected = InvalidCommandException::class) + fun transformClasses_invalidProtoLogCacheClass() { + val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + + "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + + "--protolog-cache-class invalid " + "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" @@ -150,6 +181,7 @@ class CommandOptionsTest { fun transformClasses_invalidProtoLogGroupClass() { val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + + "--protolog-cache-class $TEST_PROTOLOGCACHE_CLASS " + "--loggroups-class invalid " + "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" @@ -160,6 +192,7 @@ class CommandOptionsTest { fun transformClasses_invalidProtoLogGroupJar() { val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + + "--protolog-cache-class $TEST_PROTOLOGCACHE_CLASS " + "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + "--loggroups-jar invalid.txt " + "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" @@ -170,6 +203,7 @@ class CommandOptionsTest { fun transformClasses_invalidOutJar() { val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + + "--protolog-cache-class $TEST_PROTOLOGCACHE_CLASS " + "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + "--output-srcjar invalid.db ${TEST_JAVA_SRC.joinToString(" ")}" @@ -180,6 +214,7 @@ class CommandOptionsTest { fun transformClasses_invalidJavaInput() { val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + "--protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + + "--protolog-cache-class $TEST_PROTOLOGCACHE_CLASS " + "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + "--output-srcjar $TEST_SRC_JAR invalid.py" @@ -190,6 +225,7 @@ class CommandOptionsTest { fun transformClasses_unknownParam() { val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + "--unknown test --protolog-impl-class $TEST_PROTOLOGIMPL_CLASS " + + "--protolog-cache-class $TEST_PROTOLOGCACHE_CLASS " + "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" @@ -200,6 +236,7 @@ class CommandOptionsTest { fun transformClasses_noValue() { val testLine = "transform-protolog-calls --protolog-class $TEST_PROTOLOG_CLASS " + "--protolog-impl-class " + + "--protolog-cache-class $TEST_PROTOLOGCACHE_CLASS " + "--loggroups-class $TEST_PROTOLOGGROUP_CLASS " + "--loggroups-jar $TEST_PROTOLOGGROUP_JAR " + "--output-srcjar $TEST_SRC_JAR ${TEST_JAVA_SRC.joinToString(" ")}" diff --git a/tools/protologtool/tests/com/android/protolog/tool/ProtoLogToolTest.kt b/tools/protologtool/tests/com/android/protolog/tool/ProtoLogToolTest.kt new file mode 100644 index 000000000000..ea9a58d859af --- /dev/null +++ b/tools/protologtool/tests/com/android/protolog/tool/ProtoLogToolTest.kt @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.protolog.tool + +import org.junit.Assert.assertEquals +import org.junit.Test + +class ProtoLogToolTest { + + @Test + fun generateLogGroupCache() { + val groups = mapOf( + "GROUP1" to LogGroup("GROUP1", true, true, "TAG1"), + "GROUP2" to LogGroup("GROUP2", true, true, "TAG2") + ) + val code = ProtoLogTool.generateLogGroupCache("org.example", "ProtoLog\$Cache", + groups, "org.example.ProtoLogImpl", "org.example.ProtoLogGroups") + + assertEquals(""" + package org.example; + + public class ProtoLog${'$'}Cache { + public static boolean GROUP1_enabled = false; + public static boolean GROUP2_enabled = false; + + static { + org.example.ProtoLogImpl.sCacheUpdater = ProtoLog${'$'}Cache::update; + update(); + } + + static void update() { + GROUP1_enabled = org.example.ProtoLogImpl.isEnabled(org.example.ProtoLogGroups.GROUP1); + GROUP2_enabled = org.example.ProtoLogImpl.isEnabled(org.example.ProtoLogGroups.GROUP2); + } + } + """.trimIndent(), code) + } +}
\ No newline at end of file diff --git a/tools/protologtool/tests/com/android/protolog/tool/SourceTransformerTest.kt b/tools/protologtool/tests/com/android/protolog/tool/SourceTransformerTest.kt index e746300646c8..6f5955cd030b 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 (org.example.ProtoLogImpl.isEnabled(TEST_GROUP)) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; org.example.ProtoLogImpl.w(TEST_GROUP, 1698911065, 9, "test %d %f", protoLogParam0, protoLogParam1); } + if (org.example.ProtoLogCache.TEST_GROUP_enabled) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; org.example.ProtoLogImpl.w(TEST_GROUP, 1698911065, 9, "test %d %f", protoLogParam0, protoLogParam1); } } } """.trimIndent() @@ -88,7 +88,7 @@ class SourceTransformerTest { class Test { void test() { - 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, 1780316587, 9, "test %d %f " + "abc %s\n test", protoLogParam0, protoLogParam1, protoLogParam2); + if (org.example.ProtoLogCache.TEST_GROUP_enabled) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; String protoLogParam2 = String.valueOf("test"); org.example.ProtoLogImpl.w(TEST_GROUP, 1780316587, 9, "test %d %f " + "abc %s\n test", protoLogParam0, protoLogParam1, protoLogParam2); } } @@ -100,8 +100,8 @@ class SourceTransformerTest { class Test { void test() { - if (org.example.ProtoLogImpl.isEnabled(TEST_GROUP)) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; org.example.ProtoLogImpl.w(TEST_GROUP, 1698911065, 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, 1698911065, 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, 1698911065, 9, "test %d %f", protoLogParam0, protoLogParam1); } + if (org.example.ProtoLogCache.TEST_GROUP_enabled) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; org.example.ProtoLogImpl.w(TEST_GROUP, 1698911065, 9, "test %d %f", protoLogParam0, protoLogParam1); } /* ProtoLog.w(TEST_GROUP, "test %d %f", 100, 0.1); */ if (org.example.ProtoLogCache.TEST_GROUP_enabled) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; org.example.ProtoLogImpl.w(TEST_GROUP, 1698911065, 9, "test %d %f", protoLogParam0, protoLogParam1); } + if (org.example.ProtoLogCache.TEST_GROUP_enabled) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; org.example.ProtoLogImpl.w(TEST_GROUP, 1698911065, 9, "test %d %f", protoLogParam0, protoLogParam1); } } } """.trimIndent() @@ -111,7 +111,7 @@ class SourceTransformerTest { class Test { void test() { - if (org.example.ProtoLogImpl.isEnabled(TEST_GROUP)) { org.example.ProtoLogImpl.w(TEST_GROUP, -1741986185, 0, "test", (Object[]) null); } + if (org.example.ProtoLogCache.TEST_GROUP_enabled) { org.example.ProtoLogImpl.w(TEST_GROUP, -1741986185, 0, "test", (Object[]) null); } } } """.trimIndent() @@ -121,7 +121,7 @@ class SourceTransformerTest { class Test { void test() { - if (org.example.ProtoLogImpl.isEnabled(TEST_GROUP)) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; org.example.ProtoLogImpl.w(TEST_GROUP, 1698911065, 9, null, protoLogParam0, protoLogParam1); } + if (org.example.ProtoLogCache.TEST_GROUP_enabled) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; org.example.ProtoLogImpl.w(TEST_GROUP, 1698911065, 9, null, protoLogParam0, protoLogParam1); } } } """.trimIndent() @@ -131,7 +131,7 @@ class SourceTransformerTest { class Test { void test() { - 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, 1780316587, 9, null, protoLogParam0, protoLogParam1, protoLogParam2); + if (org.example.ProtoLogCache.TEST_GROUP_enabled) { long protoLogParam0 = 100; double protoLogParam1 = 0.1; String protoLogParam2 = String.valueOf("test"); org.example.ProtoLogImpl.w(TEST_GROUP, 1780316587, 9, null, protoLogParam0, protoLogParam1, protoLogParam2); } } @@ -165,8 +165,9 @@ class SourceTransformerTest { } private val processor: ProtoLogCallProcessor = Mockito.mock(ProtoLogCallProcessor::class.java) - private val implPath = "org.example.ProtoLogImpl" - private val sourceJarWriter = SourceTransformer(implPath, processor) + private val implName = "org.example.ProtoLogImpl" + private val cacheName = "org.example.ProtoLogCache" + private val sourceJarWriter = SourceTransformer(implName, cacheName, processor) private fun <T> any(type: Class<T>): T = Mockito.any<T>(type) @@ -191,8 +192,7 @@ class SourceTransformerTest { val ifStmts = code.findAll(IfStmt::class.java) assertEquals(1, ifStmts.size) val ifStmt = ifStmts[0] - assertEquals("$implPath.${Constants.IS_ENABLED_METHOD}(TEST_GROUP)", - ifStmt.condition.toString()) + assertEquals("$cacheName.TEST_GROUP_enabled", ifStmt.condition.toString()) assertFalse(ifStmt.elseStmt.isPresent) assertEquals(3, ifStmt.thenStmt.childNodes.size) val methodCall = ifStmt.thenStmt.findAll(MethodCallExpr::class.java)[0] as MethodCallExpr @@ -234,8 +234,7 @@ class SourceTransformerTest { val ifStmts = code.findAll(IfStmt::class.java) assertEquals(3, ifStmts.size) val ifStmt = ifStmts[1] - assertEquals("$implPath.${Constants.IS_ENABLED_METHOD}(TEST_GROUP)", - ifStmt.condition.toString()) + assertEquals("$cacheName.TEST_GROUP_enabled", ifStmt.condition.toString()) assertFalse(ifStmt.elseStmt.isPresent) assertEquals(3, ifStmt.thenStmt.childNodes.size) val methodCall = ifStmt.thenStmt.findAll(MethodCallExpr::class.java)[0] as MethodCallExpr @@ -273,8 +272,7 @@ class SourceTransformerTest { val ifStmts = code.findAll(IfStmt::class.java) assertEquals(1, ifStmts.size) val ifStmt = ifStmts[0] - assertEquals("$implPath.${Constants.IS_ENABLED_METHOD}(TEST_GROUP)", - ifStmt.condition.toString()) + assertEquals("$cacheName.TEST_GROUP_enabled", ifStmt.condition.toString()) assertFalse(ifStmt.elseStmt.isPresent) assertEquals(4, ifStmt.thenStmt.childNodes.size) val methodCall = ifStmt.thenStmt.findAll(MethodCallExpr::class.java)[1] as MethodCallExpr @@ -311,8 +309,7 @@ class SourceTransformerTest { val ifStmts = code.findAll(IfStmt::class.java) assertEquals(1, ifStmts.size) val ifStmt = ifStmts[0] - assertEquals("$implPath.${Constants.IS_ENABLED_METHOD}(TEST_GROUP)", - ifStmt.condition.toString()) + assertEquals("$cacheName.TEST_GROUP_enabled", ifStmt.condition.toString()) assertFalse(ifStmt.elseStmt.isPresent) assertEquals(1, ifStmt.thenStmt.childNodes.size) val methodCall = ifStmt.thenStmt.findAll(MethodCallExpr::class.java)[0] as MethodCallExpr @@ -346,8 +343,7 @@ class SourceTransformerTest { val ifStmts = code.findAll(IfStmt::class.java) assertEquals(1, ifStmts.size) val ifStmt = ifStmts[0] - assertEquals("$implPath.${Constants.IS_ENABLED_METHOD}(TEST_GROUP)", - ifStmt.condition.toString()) + assertEquals("$cacheName.TEST_GROUP_enabled", ifStmt.condition.toString()) assertFalse(ifStmt.elseStmt.isPresent) assertEquals(3, ifStmt.thenStmt.childNodes.size) val methodCall = ifStmt.thenStmt.findAll(MethodCallExpr::class.java)[0] as MethodCallExpr @@ -385,8 +381,7 @@ class SourceTransformerTest { val ifStmts = code.findAll(IfStmt::class.java) assertEquals(1, ifStmts.size) val ifStmt = ifStmts[0] - assertEquals("$implPath.${Constants.IS_ENABLED_METHOD}(TEST_GROUP)", - ifStmt.condition.toString()) + assertEquals("$cacheName.TEST_GROUP_enabled", ifStmt.condition.toString()) assertFalse(ifStmt.elseStmt.isPresent) assertEquals(4, ifStmt.thenStmt.childNodes.size) val methodCall = ifStmt.thenStmt.findAll(MethodCallExpr::class.java)[1] as MethodCallExpr |