diff options
author | 2025-03-18 14:39:03 +0000 | |
---|---|---|
committer | 2025-03-18 16:10:42 +0000 | |
commit | c90355f794af4e9f238a85d6e0ddb3b3c31e358a (patch) | |
tree | 6a59965ff86825be2dc7fb830d179336afa65b11 /tools | |
parent | 483768d275d4046033e6c000083d42e22e357f59 (diff) |
Handle invalid protolog message format more gracefully
Will now throw error with the following prefix: 'Code processing error in MyFile.java:123'
Bug: 403564102
Test: atest com.android.protolog.tool.ProtoLogCallProcessorImplTest
Flag: EXEMPT minor error handling change
Change-Id: Ifa7d566fae22d1bd2607a41e735113119bfbd7e0
Diffstat (limited to 'tools')
-rw-r--r-- | tools/protologtool/src/com/android/protolog/tool/Exceptions.kt (renamed from tools/protologtool/src/com/android/protolog/tool/exceptions.kt) | 25 | ||||
-rw-r--r-- | tools/protologtool/src/com/android/protolog/tool/ProtoLogCallProcessorImpl.kt | 14 | ||||
-rw-r--r-- | tools/protologtool/tests/com/android/protolog/tool/ProtoLogCallProcessorImplTest.kt | 37 |
3 files changed, 62 insertions, 14 deletions
diff --git a/tools/protologtool/src/com/android/protolog/tool/exceptions.kt b/tools/protologtool/src/com/android/protolog/tool/Exceptions.kt index ae00df123353..4f7e8d13c4ba 100644 --- a/tools/protologtool/src/com/android/protolog/tool/exceptions.kt +++ b/tools/protologtool/src/com/android/protolog/tool/Exceptions.kt @@ -18,21 +18,24 @@ package com.android.protolog.tool import java.lang.Exception -open class CodeProcessingException(message: String, context: ParsingContext) - : Exception("Code processing error in ${context.filePath}:${context.lineNumber}:\n" + - " $message") +open class CodeProcessingException( + message: String, context: ParsingContext, cause: Throwable? = null +) : Exception("Code processing error in ${context.filePath}:${context.lineNumber}:\n" + + " $message", cause) -class HashCollisionException(message: String, context: ParsingContext) : - CodeProcessingException(message, context) +class HashCollisionException( + message: String, context: ParsingContext, cause: Throwable? = null +) : CodeProcessingException(message, context, cause) -class IllegalImportException(message: String, context: ParsingContext) : - CodeProcessingException("Illegal import: $message", context) +class IllegalImportException(message: String, context: ParsingContext, cause: Throwable? = null) : + CodeProcessingException("Illegal import: $message", context, cause) -class InvalidProtoLogCallException(message: String, context: ParsingContext) - : CodeProcessingException("InvalidProtoLogCall: $message", context) +class InvalidProtoLogCallException( + message: String, context: ParsingContext, cause: Throwable? = null +) : CodeProcessingException("InvalidProtoLogCall: $message", context, cause) -class ParsingException(message: String, context: ParsingContext) - : CodeProcessingException(message, context) +class ParsingException(message: String, context: ParsingContext, cause: Throwable? = null) : + CodeProcessingException(message, context, cause) class InvalidViewerConfigException(message: String) : Exception(message) diff --git a/tools/protologtool/src/com/android/protolog/tool/ProtoLogCallProcessorImpl.kt b/tools/protologtool/src/com/android/protolog/tool/ProtoLogCallProcessorImpl.kt index 272d8bb1793d..1f6db5fe2d37 100644 --- a/tools/protologtool/src/com/android/protolog/tool/ProtoLogCallProcessorImpl.kt +++ b/tools/protologtool/src/com/android/protolog/tool/ProtoLogCallProcessorImpl.kt @@ -118,9 +118,17 @@ class ProtoLogCallProcessorImpl( "- not a ProtoLogGroup enum member: $call", context) } - logCallVisitor?.processCall(call, messageString, getLevelForMethodName( - call.name.toString(), call, context), groupMap.getValue(groupName), - context.lineNumber) + try { + logCallVisitor?.processCall( + call, messageString, getLevelForMethodName( + call.name.toString(), call, context + ), groupMap.getValue(groupName), + context.lineNumber + ) + } catch (e: Throwable) { + throw InvalidProtoLogCallException("Error processing log call: $call", + context, e) + } } else if (call.name.id == "init") { // No processing } else { diff --git a/tools/protologtool/tests/com/android/protolog/tool/ProtoLogCallProcessorImplTest.kt b/tools/protologtool/tests/com/android/protolog/tool/ProtoLogCallProcessorImplTest.kt index 004d97babbad..732824ae841c 100644 --- a/tools/protologtool/tests/com/android/protolog/tool/ProtoLogCallProcessorImplTest.kt +++ b/tools/protologtool/tests/com/android/protolog/tool/ProtoLogCallProcessorImplTest.kt @@ -16,11 +16,14 @@ package com.android.protolog.tool +import com.android.internal.protolog.common.InvalidFormatStringException import com.android.internal.protolog.common.LogLevel import com.github.javaparser.StaticJavaParser import com.github.javaparser.ast.expr.MethodCallExpr import org.junit.Assert.assertEquals +import org.junit.Assert.assertThrows import org.junit.Test +import com.google.common.truth.Truth class ProtoLogCallProcessorImplTest { private data class LogCall( @@ -228,4 +231,38 @@ class ProtoLogCallProcessorImplTest { visitor.process(StaticJavaParser.parse(code), processor, "") checkCalls() } + + @Test + fun throws_clear_error_message_on_invalid_format_exception() { + val code = """ + package org.example; + + class Test { + void test() { + ProtoLog.d(ProtoLogGroup.TEST, "Invalid message %9 %"); + } + } + """ + groupMap["TEST"] = LogGroup("TEST", false, true, "WindowManager") + + val processor = object : ProtoLogCallVisitor { + override fun processCall( + call: MethodCallExpr, + messageString: String, + level: LogLevel, + group: LogGroup, + lineNumber: Int, + ) { + throw InvalidFormatStringException("Invalid Protolog message format") + } + } + + val exception = assertThrows(InvalidProtoLogCallException::class.java) { + visitor.process(StaticJavaParser.parse(code), processor, "MyTestFile.java") + } + Truth.assertThat(exception).hasMessageThat() + .contains("Code processing error in MyTestFile.java:6") + Truth.assertThat(exception.cause).hasMessageThat() + .contains("Invalid Protolog message format") + } } |