0

Android: Make missing dep suggestions more copy / pasteable

Bug: None
Change-Id: I01b59489312ea1c367f50f3c229ea9396bd8b2fa
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3457782
Reviewed-by: Peter Wen <wnwen@chromium.org>
Reviewed-by: Sky Malice <skym@chromium.org>
Commit-Queue: Andrew Grieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/main@{#970697}
This commit is contained in:
Andrew Grieve
2022-02-14 17:58:54 +00:00
committed by Chromium LUCI CQ
parent 35d3490b2c
commit 048ea3976d
4 changed files with 21 additions and 15 deletions
build/android
chrome/android/features/android_library_factory/test
docs

@ -25,7 +25,9 @@ import lookup_dep
class JavacOutputProcessor:
def __init__(self, target_name):
self._target_name = target_name
self._target_name = self._RemoveSuffixesIfPresent(
["__compile_java", "__errorprone", "__header"], target_name)
self._suggested_deps = set()
# Example: ../../ui/android/java/src/org/chromium/ui/base/Clipboard.java:45:
fileline_prefix = (
@ -40,8 +42,7 @@ class JavacOutputProcessor:
# Matches output modification performed by _ElaborateLineForUnknownSymbol()
# so that it can be colorized.
# Example: org.chromium.base.Log found in dep //base:base_java.
self._please_add_dep_re = re.compile(
r'(?P<full_message>Please add //[\w/:]+ dep to //[\w/:]+.*)$')
self._please_add_dep_re = re.compile(r'(?P<full_message>Hint:.*)$')
# First element in pair is bool which indicates whether the missing
# class/package is part of the error message.
@ -80,7 +81,13 @@ class JavacOutputProcessor:
- Suggests GN dep to add for 'unresolved symbol in Java import' errors.
"""
lines = self._ElaborateLinesForUnknownSymbol(iter(lines))
return (self._ApplyColors(l) for l in lines)
for line in lines:
yield self._ApplyColors(line)
if self._suggested_deps:
# Show them in quotes so they can be copy/pasted into BUILD.gn files.
yield "Full list of deps to add to {}:".format(self._target_name)
for dep in sorted(self._suggested_deps):
yield ' "{}",'.format(dep)
def _ElaborateLinesForUnknownSymbol(self, lines):
""" Elaborates passed-in javac output for unresolved symbols.
@ -152,15 +159,14 @@ class JavacOutputProcessor:
suggested_target = suggested_deps[0].target
target_name = self._RemoveSuffixesIfPresent(
["__compile_java", "__errorprone", "__header"], self._target_name)
if not has_missing_symbol_in_error_msg:
line = "{} {}".format(line, class_to_lookup)
self._suggested_deps.add(suggested_target)
return [
line,
"Please add {} dep to {}. ".format(suggested_target, target_name) +
"File a crbug if this suggestion is incorrect.",
'Hint: Add "{}" to deps of {}'.format(suggested_target,
self._target_name),
]
@staticmethod

@ -55,12 +55,12 @@ if (enable_java_templates) {
rebase_path(import_child_missing_symbol_test_nocompile_sources,
"",
"nocompile_gn")
expected_compile_output_regex = "error: package test\.missing_symbol\.sub does not exist\nPlease add //build/android/test/nocompile_gn:sub_b_java dep to //build/android/test/nocompile_gn:import_child_missing_symbol_test_java\."
expected_compile_output_regex = "error: package test\.missing_symbol\.sub does not exist\nHint: Add \"//build/android/test/nocompile_gn:sub_b_java\" to deps of //build/android/test/nocompile_gn:import_child_missing_symbol_test_java"
},
{
target = "nocompile_gn:import_parent_missing_symbol_test_java"
nocompile_sources = []
expected_compile_output_regex = "error: cannot find symbol test\.missing_symbol\.B\nPlease add //build/android/test/nocompile_gn:b_java dep to //build/android/test/nocompile_gn:import_parent_missing_symbol_test_java\."
expected_compile_output_regex = "error: cannot find symbol test\.missing_symbol\.B\nHint: Add \"//build/android/test/nocompile_gn:b_java\" to deps of //build/android/test/nocompile_gn:import_parent_missing_symbol_test_java"
},
{
target = "nocompile_gn:import_turbine_missing_symbol_test_java"
@ -68,17 +68,17 @@ if (enable_java_templates) {
rebase_path(import_turbine_missing_symbol_test_nocompile_sources,
"",
"nocompile_gn")
expected_compile_output_regex = "error: symbol not found test\.missing_symbol\.B\nPlease add //build/android/test/nocompile_gn:b_java dep to //build/android/test/nocompile_gn:import_turbine_missing_symbol_test_java\."
expected_compile_output_regex = "error: symbol not found test\.missing_symbol\.B\nHint: Add \"//build/android/test/nocompile_gn:b_java\" to deps of //build/android/test/nocompile_gn:import_turbine_missing_symbol_test_java"
},
{
target = "nocompile_gn:prebuilt_missing_symbol_test_java"
nocompile_sources = []
expected_compile_output_regex = "error: cannot find symbol test\.missing_symbol\.C\nPlease add //build/android/test/nocompile_gn:c_prebuilt_java dep to //build/android/test/nocompile_gn:prebuilt_missing_symbol_test_java\."
expected_compile_output_regex = "error: cannot find symbol test\.missing_symbol\.C\nHint: Add \"//build/android/test/nocompile_gn:c_prebuilt_java\" to deps of //build/android/test/nocompile_gn:prebuilt_missing_symbol_test_java"
},
{
target = "nocompile_gn:cpp_template_missing_symbol_test_java"
nocompile_sources = []
expected_compile_output_regex = "error: cannot find symbol test\.missing_symbol\.D\nPlease add //build/android/test/nocompile_gn:d_java dep to //build/android/test/nocompile_gn:cpp_template_missing_symbol_test_java\."
expected_compile_output_regex = "error: cannot find symbol test\.missing_symbol\.D\nHint: Add \"//build/android/test/nocompile_gn:d_java\" to deps of //build/android/test/nocompile_gn:cpp_template_missing_symbol_test_java"
},
]
}

@ -19,7 +19,7 @@ android_nocompile_test_suite("android_lookup_dep_tests") {
{
target = "nocompile_gn:android_library_factory_missing_symbol_test_java"
nocompile_sources = []
expected_compile_output_regex = "error: package org\.chromium\.chrome\.browser\.android_library_factory does not exist\nPlease add //chrome/android/features/android_library_factory/test/nocompile_gn:b_factory_java dep to //chrome/android/features/android_library_factory/test/nocompile_gn:android_library_factory_missing_symbol_test_java\."
expected_compile_output_regex = "error: package org\.chromium\.chrome\.browser\.android_library_factory does not exist\nHint: Add \"//chrome/android/features/android_library_factory/test/nocompile_gn:b_factory_java\" to deps of //chrome/android/features/android_library_factory/test/nocompile_gn:android_library_factory_missing_symbol_test_java"
},
]
}

@ -166,7 +166,7 @@ You may see an error like this when compiling:
$ autoninja -C out/Default base/foo_java
util.build_utils.CalledProcessError: Command failed: ...
org/chromium/chrome/FooBar.java:13: error: symbol not found androidx.annotation.IntDef
Please add //third_party/androidx:androidx_annotation_annotation_java dep to //base/foo_java. File a crbug if this suggestion is incorrect.
Hint: Add "//third_party/androidx:androidx_annotation_annotation_java" to deps of //base/foo_java
import androidx.annotation.IntDef;
^
org/chromium/chrome/FooBar.java:18: error: could not resolve IntDef