OSDN Git Service

apilint: Correctly parse packages with annotations
authorAdrian Roos <roosa@google.com>
Tue, 26 Feb 2019 10:54:40 +0000 (11:54 +0100)
committerAdrian Roos <roosa@google.com>
Tue, 26 Feb 2019 10:54:40 +0000 (11:54 +0100)
Test: python apilint_test.py
Change-Id: Ifce9fe3836b2bb46b0d0a255b912fd8bf0195621

tools/apilint/apilint.py
tools/apilint/apilint_test.py

index 75c3eba..9937ee3 100644 (file)
@@ -208,13 +208,14 @@ class Class():
 
 
 class Package():
+    NAME = re.compile("package(?: .*)? ([A-Za-z.]+)")
+
     def __init__(self, line, raw, blame):
         self.line = line
         self.raw = raw.strip(" {;")
         self.blame = blame
 
-        raw = raw.split()
-        self.name = raw[raw.index("package")+1]
+        self.name = Package.NAME.match(raw).group(1)
         self.name_path = self.name.split(".")
 
     def __repr__(self):
index 9c261d5..c0bf811 100644 (file)
@@ -352,5 +352,21 @@ class V2ParserTests(unittest.TestCase):
         m = self._method('method @NonNull public @NonNull String @NonNull [] split(@NonNull String, int);')
         self.assertEquals('java.lang.String[]', m.typ)
 
+class PackageTests(unittest.TestCase):
+    def _package(self, raw):
+        return apilint.Package(123, raw, "blame")
+
+    def test_regular_package(self):
+        p = self._package("package an.pref.int {")
+        self.assertEquals('an.pref.int', p.name)
+
+    def test_annotation_package(self):
+        p = self._package("package @RestrictTo(a.b.C) an.pref.int {")
+        self.assertEquals('an.pref.int', p.name)
+
+    def test_multi_annotation_package(self):
+        p = self._package("package @Rt(a.b.L_G_P) @RestrictTo(a.b.C) an.pref.int {")
+        self.assertEquals('an.pref.int', p.name)
+
 if __name__ == "__main__":
     unittest.main()