| // Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| package com.android.tools.r8.keepanno.annotations; |
| |
| import java.lang.annotation.ElementType; |
| import java.lang.annotation.Retention; |
| import java.lang.annotation.RetentionPolicy; |
| import java.lang.annotation.Target; |
| |
| /** |
| * Annotation to mark a class, field or method as part of a library API surface. |
| * |
| * <p>When a class is annotated, member patterns can be used to define which members are to be kept. |
| * When no member patterns are specified the default pattern is to match all public and protected |
| * members. |
| * |
| * <p>When a member is annotated, the member patterns cannot be used as the annotated member itself |
| * fully defines the item to be kept (i.e., itself). |
| */ |
| @Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR}) |
| @Retention(RetentionPolicy.CLASS) |
| public @interface KeepForApi { |
| String description() default ""; |
| |
| /** Additional targets to be kept as part of the API surface. */ |
| KeepTarget[] additionalTargets() default {}; |
| |
| /** |
| * The target kind to be kept. |
| * |
| * <p>Default kind is CLASS_AND_MEMBERS, meaning the annotated class and/or member is to be kept. |
| * When annotating a class this can be set to ONLY_CLASS to avoid patterns on any members. That |
| * can be useful when the API members are themselves explicitly annotated. |
| * |
| * <p>It is not possible to use ONLY_CLASS if annotating a member. Also, it is never valid to use |
| * kind ONLY_MEMBERS as the API surface must keep the class if any member it to be accessible. |
| */ |
| KeepItemKind kind() default KeepItemKind.DEFAULT; |
| |
| // Member patterns. See KeepTarget for documentation. |
| MemberAccessFlags[] memberAccess() default {}; |
| |
| MethodAccessFlags[] methodAccess() default {}; |
| |
| String methodName() default ""; |
| |
| String methodReturnType() default ""; |
| |
| String[] methodParameters() default {""}; |
| |
| FieldAccessFlags[] fieldAccess() default {}; |
| |
| String fieldName() default ""; |
| |
| String fieldType() default ""; |
| } |