xref: /aosp_15_r20/external/angle/build/android/chromium_annotations.flags (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1# Copyright 2022 The Chromium Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5# Contains flags related to annotations in //build/android that can be safely
6# shared with Cronet, and thus would be appropriate for third-party apps to
7# include.
8
9# Keep all annotation related attributes that can affect runtime
10-keepattributes RuntimeVisible*Annotations
11-keepattributes AnnotationDefault
12
13# Keeps for class level annotations.
14-keep,allowaccessmodification @org.chromium.build.annotations.UsedByReflection class ** {}
15
16# Keeps for method level annotations.
17-keepclasseswithmembers,allowaccessmodification class ** {
18  @org.chromium.build.annotations.UsedByReflection <methods>;
19}
20-keepclasseswithmembers,allowaccessmodification class ** {
21  @org.chromium.build.annotations.UsedByReflection <fields>;
22}
23
24# Never inline classes, methods, or fields with this annotation, but allow
25# shrinking and obfuscation.
26# Relevant to fields when they are needed to store strong references to objects
27# that are held as weak references by native code.
28-if @org.chromium.build.annotations.DoNotInline class * {
29    *** *(...);
30}
31-keep,allowobfuscation,allowaccessmodification class <1> {
32    *** <2>(...);
33}
34-keepclassmembers,allowobfuscation,allowaccessmodification class * {
35   @org.chromium.build.annotations.DoNotInline <methods>;
36}
37-keepclassmembers,allowobfuscation,allowaccessmodification class * {
38   @org.chromium.build.annotations.DoNotInline <fields>;
39}
40
41-alwaysinline class * {
42    @org.chromium.build.annotations.AlwaysInline *;
43}
44
45# Keep all logs (Log.VERBOSE = 2). R8 does not allow setting to 0.
46-maximumremovedandroidloglevel 1 class ** {
47   @org.chromium.build.annotations.DoNotStripLogs <methods>;
48}
49-maximumremovedandroidloglevel 1 @org.chromium.build.annotations.DoNotStripLogs class ** {
50   <methods>;
51}
52
53# Never merge classes horizontally or vertically with this annotation.
54# Relevant to classes being used as a key in maps or sets.
55-keep,allowaccessmodification,allowobfuscation,allowshrinking @org.chromium.build.annotations.DoNotClassMerge class *
56
57# Mark members annotated with IdentifierNameString as identifier name strings
58-identifiernamestring class * {
59    @org.chromium.build.annotations.IdentifierNameString *;
60}
61
62# Mark fields with this to help R8 figure out that they cannot be null.
63# Use assumevalues in addition to assumenosideeffects block because Google3 proguard cannot parse
64# assumenosideeffects blocks which overwrite return value.
65-assumevalues class ** {
66  @org.chromium.build.annotations.AssumeNonNull *** *(...) return _NONNULL_;
67}
68-assumenosideeffects class ** {
69  @org.chromium.build.annotations.AssumeNonNull *** *(...);
70}
71-assumevalues class ** {
72  @org.chromium.build.annotations.AssumeNonNull *** * return _NONNULL_;
73}
74-assumenosideeffects class ** {
75  @org.chromium.build.annotations.AssumeNonNull *** *;
76}
77