blob: 02eb5dfc1cb42ba693d82f7dc7729c890d157435 [file] [log] [blame]
// Copyright (c) 2022, 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;
/**
* Utility class for referencing the various keep annotations and their structure.
*
* <p>Use of these references avoids poluting the Java namespace with imports of the java
* annotations which overlap in name with the actual semantic AST types.
*/
public final class KeepConstants {
public static String getDescriptor(Class<?> clazz) {
return "L" + clazz.getTypeName().replace('.', '/') + ";";
}
public static String getBinaryNameFromClassTypeName(String classTypeName) {
return classTypeName.replace('.', '/');
}
public static boolean isKeepAnnotation(String descriptor, boolean visible) {
if (visible) {
return false;
}
return descriptor.equals(Edge.DESCRIPTOR)
|| descriptor.equals(UsesReflection.DESCRIPTOR)
|| descriptor.equals(Condition.DESCRIPTOR)
|| descriptor.equals(Target.DESCRIPTOR);
}
public static final class Edge {
public static final Class<KeepEdge> CLASS = KeepEdge.class;
public static final String DESCRIPTOR = getDescriptor(CLASS);
public static final String description = "description";
public static final String preconditions = "preconditions";
public static final String consequences = "consequences";
}
public static final class UsesReflection {
public static final Class<com.android.tools.r8.keepanno.annotations.UsesReflection> CLASS =
com.android.tools.r8.keepanno.annotations.UsesReflection.class;
public static final String DESCRIPTOR = getDescriptor(CLASS);
public static final String description = "description";
public static final String value = "value";
public static final String additionalPreconditions = "additionalPreconditions";
}
// Implicit hidden item which is "super type" of Condition and Target.
public static final class Item {
public static final String className = "className";
public static final String classConstant = "classConstant";
public static final String extendsClassName = "extendsClassName";
public static final String extendsClassConstant = "extendsClassConstant";
public static final String methodName = "methodName";
public static final String methodReturnType = "methodReturnType";
public static final String methodParameters = "methodParameters";
public static final String fieldName = "fieldName";
public static final String fieldType = "fieldType";
// Default values for the optional entries. The defaults should be chosen such that they do
// not coincide with any actual valid value. E.g., the empty string in place of a name or type.
// These must be 1:1 with the value defined on the actual annotation definition.
public static final String classNameDefault = "";
public static final Class<?> classConstantDefault = Object.class;
public static final String extendsClassNameDefault = "";
public static final Class<?> extendsClassConstantDefault = Object.class;
public static final String methodNameDefaultValue = "";
public static final String methodReturnTypeDefaultValue = "";
public static final String[] methodParametersDefaultValue = new String[] {""};
public static final String fieldNameDefaultValue = "";
public static final String fieldTypeDefaultValue = "";
}
public static final class Condition {
public static final Class<KeepCondition> CLASS = KeepCondition.class;
public static final String DESCRIPTOR = getDescriptor(CLASS);
}
public static final class Target {
public static final Class<KeepTarget> CLASS = KeepTarget.class;
public static final String DESCRIPTOR = getDescriptor(CLASS);
public static final String allow = "allow";
public static final String disallow = "disallow";
}
public static final class Option {
public static final Class<KeepOption> CLASS = KeepOption.class;
public static final String DESCRIPTOR = getDescriptor(CLASS);
public static final String SHRINKING = "SHRINKING";
public static final String OBFUSCATION = "OBFUSCATION";
public static final String OPTIMIZATION = "OPTIMIZATION";
public static final String ACCESS_MODIFICATION = "ACCESS_MODIFICATION";
public static final String ANNOTATION_REMOVAL = "ANNOTATION_REMOVAL";
}
}