0

Revert "Add _CheckAndroidNullAwayAnnotatedClasses PRESUBMIT check"

This reverts commit cfe861e365.

Reason for revert: Doesn't ignore comments

Original change's description:
> Add _CheckAndroidNullAwayAnnotatedClasses PRESUBMIT check
>
> Warn when a .java file is missing @NullMarked and @NullUnmarked.
>
> Temporarily disabled in //android_webview and //chrome while migrating.
>
> Bug: 404884589
> Change-Id: I38e331bcec6f3a3f2147c0999fd4dca8fef145d5
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6373892
> Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
> Reviewed-by: Andrew Grieve <agrieve@chromium.org>
> Cr-Commit-Position: refs/heads/main@{#1435461}

Bug: 404884589
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Change-Id: I669658f3f21cab9365f0c50b4e0191a1e6a608a0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6377728
Auto-Submit: Henrique Nakashima <hnakashima@chromium.org>
Commit-Queue: Andrew Grieve <agrieve@chromium.org>
Reviewed-by: Andrew Grieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1435593}
This commit is contained in:
Henrique Nakashima
2025-03-20 12:04:35 -07:00
committed by Chromium LUCI CQ
parent 5e4c27959e
commit ae8498e751
2 changed files with 0 additions and 154 deletions

@ -5957,7 +5957,6 @@ def ChecksAndroidSpecificOnUpload(input_api, output_api):
results.extend(_CheckNewImagesWarning(input_api, output_api))
results.extend(_CheckAndroidNoBannedImports(input_api, output_api))
results.extend(_CheckAndroidInfoBarDeprecation(input_api, output_api))
results.extend(_CheckAndroidNullAwayAnnotatedClasses(input_api, output_api))
return results
@ -7579,53 +7578,6 @@ a subclass of it), or use "@Rule BaseRobolectricTestRule".
return results
def _CheckAndroidNullAwayAnnotatedClasses(input_api, output_api):
"""Checks that Java classes/interfaces/annotations are null-annotated."""
nullmarked_annotation = input_api.re.compile(r'^\s*@(NullMarked|NullUnmarked)')
class_declaration = input_api.re.compile(r'\s(class|@?interface)\s')
missing_annotation_errors = []
def _FilterFile(affected_file):
return input_api.FilterSourceFile(
affected_file,
files_to_skip=(_EXCLUDED_PATHS + _TEST_CODE_EXCLUDED_PATHS + input_api.
DEFAULT_FILES_TO_SKIP + (
r'.*Test.*\.java',
r'^android_webview/.*', # Temporary, crbug.com/389129271
r'^build/.*',
r'^chrome/.*', # Temporary, crbug.com/389129271
r'^chromecast/.*',
r'^components/cronet/.*',
r'^tools/.*',
)),
files_to_check=[r'.*\.java$'])
for f in input_api.AffectedSourceFiles(_FilterFile):
nullmarked_matched = None
for line in f.NewContents():
if not nullmarked_matched:
nullmarked_matched = nullmarked_annotation.search(line)
if class_declaration.search(line):
break
if not nullmarked_matched:
missing_annotation_errors.append(str(f.LocalPath()))
results = []
if missing_annotation_errors:
results.append(
output_api.PresubmitPromptWarning(
"""
Please add @NullMarked and fix the NullAway warnings in the following files:
(see https://chromium.googlesource.com/chromium/src/+/main/styleguide/java/nullaway.md)
""", missing_annotation_errors))
return results
def CheckNoJsInIos(input_api, output_api):
"""Checks to make sure that JavaScript files are not used on iOS."""

@ -5138,112 +5138,6 @@ class CheckAndroidTestAnnotations(unittest.TestCase):
self.assertIn('OneTest.java', errors[0].items[0])
class CheckAndroidNullAwayAnnotatedClasses(unittest.TestCase):
"""Test the _CheckAndroidNullAwayAnnotatedClasses presubmit check."""
def testDetectsInClasses(self):
"""Tests that missing @NullMarked or @NullUnmarked are correctly flagged in classes."""
mock_input = MockInputApi()
mock_input.files = [
MockFile('path/OneMissing.java', ['public class OneMissing']),
MockFile('path/TwoMarked.java', [
'@NullMarked',
'public class TwoMarked {',
]),
MockFile('path/ThreeMarked.java', [
'@NullUnmarked',
'public class ThreeMarked {',
]),
MockFile('path/FourMissing.java', ['class FourMissing']),
]
results = PRESUBMIT._CheckAndroidNullAwayAnnotatedClasses(mock_input, MockOutputApi())
self.assertEqual(1, len(results))
self.assertEqual('warning', results[0].type)
self.assertEqual(2, len(results[0].items))
self.assertIn('OneMissing.java', results[0].items[0])
self.assertIn('FourMissing.java', results[0].items[1])
def testDetectsInAnnotations(self):
"""Tests that missing @NullMarked or @NullUnmarked are correctly flagged in annotations."""
mock_input = MockInputApi()
mock_input.files = [
MockFile('path/OneMissing.java', ['@interface OneMissing']),
MockFile('path/TwoMarked.java', [
'@NullMarked',
'@interface TwoMarked {',
]),
]
results = PRESUBMIT._CheckAndroidNullAwayAnnotatedClasses(mock_input, MockOutputApi())
self.assertEqual(1, len(results))
self.assertEqual('warning', results[0].type)
self.assertEqual(1, len(results[0].items))
self.assertIn('OneMissing.java', results[0].items[0])
def testDetectsInInterfaces(self):
"""Tests that missing @NullMarked or @NullUnmarked are correctly flagged in interfaces."""
mock_input = MockInputApi()
mock_input.files = [
MockFile('path/OneMissing.java', ['interface OneMissing']),
MockFile('path/TwoMarked.java', [
'@NullMarked',
'interface TwoMarked {',
]),
]
results = PRESUBMIT._CheckAndroidNullAwayAnnotatedClasses(mock_input, MockOutputApi())
self.assertEqual(1, len(results))
self.assertEqual('warning', results[0].type)
self.assertEqual(1, len(results[0].items))
self.assertIn('OneMissing.java', results[0].items[0])
def testExcludesTests(self):
"""Tests that missing @NullMarked or @NullUnmarked are not flagged in tests."""
mock_input = MockInputApi()
mock_input.files = [
MockFile('path/OneTest.java', ['public class OneTest']),
]
results = PRESUBMIT._CheckAndroidNullAwayAnnotatedClasses(mock_input, MockOutputApi())
self.assertEqual(0, len(results))
def testExcludesTestSupport(self):
"""Tests that missing @NullMarked or @NullUnmarked are not flagged in test support classes."""
mock_input = MockInputApi()
mock_input.files = [
MockFile('path/test/Two.java', [
'public class Two'
]),
]
results = PRESUBMIT._CheckAndroidNullAwayAnnotatedClasses(mock_input, MockOutputApi())
self.assertEqual(0, len(results))
def testAnnotatingMethodsIsNotEnough(self):
"""Tests that @NullUnmarked on a method is not enough to pass the check."""
mock_input = MockInputApi()
mock_input.files = [
MockFile('path/OnePartial.java', [
'public class OnePartial {',
' @NullUnmarked void foo() {}',
'}',
]),
MockFile('path/TwoPartial.java', [
'public @interface TwoPartial {',
' @NullUnmarked int FOO = 1;',
'}',
]),
MockFile('path/ThreePartial.java', [
'public interface ThreePartial {',
' @NullUnmarked void foo() {}',
'}',
]),
]
results = PRESUBMIT._CheckAndroidNullAwayAnnotatedClasses(mock_input, MockOutputApi())
self.assertEqual(1, len(results))
self.assertEqual('warning', results[0].type)
self.assertEqual(3, len(results[0].items))
self.assertIn('OnePartial.java', results[0].items[0])
self.assertIn('TwoPartial.java', results[0].items[1])
self.assertIn('ThreePartial.java', results[0].items[2])
class AssertNoJsInIosTest(unittest.TestCase):
def testErrorJs(self):
input_api = MockInputApi()