Commit 869824a4 authored by Eric Stevenson's avatar Eric Stevenson Committed by Commit Bot

Andorid: Add a reason field for @CheckDiscards.

To make debugging failures a bit easier.

Also add reasons for LifetimeAssert and JNI wrapper classes.

Bug: 1020936
Change-Id: Iccd027fa73baa6f7a56d97b6ac32e1d7283f48b5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1904752
Commit-Queue: Eric Stevenson <estevenson@chromium.org>
Auto-Submit: Eric Stevenson <estevenson@chromium.org>
Reviewed-by: default avatarAndrew Grieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/master@{#715443}
parent dcc3128c
......@@ -28,7 +28,7 @@ import java.util.Set;
* }
* }
*/
@CheckDiscard
@CheckDiscard("Lifetime assertions aren't used when DCHECK is off.")
public class LifetimeAssert {
interface TestHook {
void onCleaned(WrappedReference ref, String msg);
......
......@@ -17,4 +17,10 @@ import java.lang.annotation.Target;
*/
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.CLASS)
public @interface CheckDiscard {}
public @interface CheckDiscard {
/**
* Describes why the element should be discarded.
* @return reason for discarding (crbug links are preferred unless reason is trivial).
*/
String value();
}
......@@ -67,6 +67,7 @@ public class JniProcessor extends AbstractProcessor {
private static final Class<NativeMethods> JNI_STATIC_NATIVES_CLASS = NativeMethods.class;
private static final Class<MainDex> MAIN_DEX_CLASS = MainDex.class;
private static final Class<CheckDiscard> CHECK_DISCARD_CLASS = CheckDiscard.class;
private static final String CHECK_DISCARD_CRBUG = "crbug.com/993421";
private static final String NATIVE_WRAPPER_CLASS_POSTFIX = "Jni";
......@@ -126,7 +127,8 @@ public class JniProcessor extends AbstractProcessor {
// State of mNativesBuilder needs to be preserved between processing rounds.
mNativesBuilder = TypeSpec.classBuilder(mNativeClassName)
.addAnnotation(createGeneratedAnnotation())
.addAnnotation(createAnnotationWithValue(
Generated.class, JniProcessor.class.getCanonicalName()))
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
.addField(testingFlagBuilder.build())
.addField(throwFlagBuilder.build());
......@@ -302,9 +304,9 @@ public class JniProcessor extends AbstractProcessor {
/**
* Creates a generated annotation that contains the name of this class.
*/
static AnnotationSpec createGeneratedAnnotation() {
return AnnotationSpec.builder(Generated.class)
.addMember("value", String.format("\"%s\"", JniProcessor.class.getCanonicalName()))
static AnnotationSpec createAnnotationWithValue(Class<?> annotationClazz, String value) {
return AnnotationSpec.builder(annotationClazz)
.addMember("value", String.format("\"%s\"", value))
.build();
}
......@@ -344,14 +346,15 @@ public class JniProcessor extends AbstractProcessor {
TypeSpec.Builder builder = TypeSpec.classBuilder(name)
.addSuperinterface(nativeInterfaceType)
.addModifiers(Modifier.FINAL)
.addAnnotation(createGeneratedAnnotation());
.addAnnotation(createAnnotationWithValue(Generated.class,
JniProcessor.class.getCanonicalName()));
if (isPublic) {
builder.addModifiers(Modifier.PUBLIC);
}
if (isMainDex) {
builder.addAnnotation(MAIN_DEX_CLASS);
}
builder.addAnnotation(CHECK_DISCARD_CLASS);
builder.addAnnotation(createAnnotationWithValue(CHECK_DISCARD_CLASS, CHECK_DISCARD_CRBUG));
// Start by adding all the native method wrappers.
for (Element enclosed : nativeInterface.getEnclosedElements()) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment