diff --git a/services/core/Android.bp b/services/core/Android.bp index 052c371dc1455..4e80977f7d119 100644 --- a/services/core/Android.bp +++ b/services/core/Android.bp @@ -48,7 +48,7 @@ genrule { ":services.core.protolog.json", ], cmd: "cp $(location :generate-protolog.json) $(out) && " + - "{ diff $(out) $(location :services.core.protolog.json) >/dev/null 2>&1 || " + + "{ ! (diff $(out) $(location :services.core.protolog.json) | grep -q '^<') || " + "{ echo -e '\\n\\n################################################################\\n#\\n" + "# ERROR: ProtoLog viewer config is stale. To update it, run:\\n#\\n" + "# cp $(location :generate-protolog.json) " + diff --git a/tools/protologtool/src/com/android/protolog/tool/ProtoLogTool.kt b/tools/protologtool/src/com/android/protolog/tool/ProtoLogTool.kt index 97f3de2c12211..70ac0bee59b32 100644 --- a/tools/protologtool/src/com/android/protolog/tool/ProtoLogTool.kt +++ b/tools/protologtool/src/com/android/protolog/tool/ProtoLogTool.kt @@ -50,14 +50,19 @@ object ProtoLogTool { command.javaSourceArgs.forEach { path -> val file = File(path) val text = file.readText() - val code = tryParse(text, path) - val pack = if (code.packageDeclaration.isPresent) code.packageDeclaration - .get().nameAsString else "" - val newPath = pack.replace('.', '/') + '/' + file.name - val outSrc = when { - containsProtoLogText(text, command.protoLogClassNameArg) -> + val newPath = path + val outSrc = try { + val code = tryParse(text, path) + if (containsProtoLogText(text, command.protoLogClassNameArg)) { transformer.processClass(text, newPath, code) - else -> text + } else { + text + } + } catch (ex: ParsingException) { + // If we cannot parse this file, skip it (and log why). Compilation will fail + // in a subsequent build step. + println("\n${ex.message}\n") + text } outJar.putNextEntry(ZipEntry(newPath)) outJar.write(outSrc.toByteArray()) @@ -91,11 +96,17 @@ object ProtoLogTool { val file = File(path) val text = file.readText() if (containsProtoLogText(text, command.protoLogClassNameArg)) { - val code = tryParse(text, path) - val pack = if (code.packageDeclaration.isPresent) code.packageDeclaration - .get().nameAsString else "" - val newPath = pack.replace('.', '/') + '/' + file.name - builder.processClass(code, newPath) + try { + val code = tryParse(text, path) + val pack = if (code.packageDeclaration.isPresent) code.packageDeclaration + .get().nameAsString else "" + val newPath = pack.replace('.', '/') + '/' + file.name + builder.processClass(code, newPath) + } catch (ex: ParsingException) { + // If we cannot parse this file, skip it (and log why). Compilation will fail + // in a subsequent build step. + println("\n${ex.message}\n") + } } } val out = FileOutputStream(command.viewerConfigJsonArg)