xref: /aosp_15_r20/external/cronet/build/android/chromium_annotations.flags (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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-assumenosideeffects class ** {
64  @org.chromium.build.annotations.AssumeNonNull *** *(...) return _NONNULL_;
65}
66-assumenosideeffects class ** {
67  @org.chromium.build.annotations.AssumeNonNull *** * return _NONNULL_;
68}
69