| Index: base/test/android/javatests/src/org/chromium/base/test/util/CommandLineFlags.java
|
| diff --git a/base/test/android/javatests/src/org/chromium/base/test/util/CommandLineFlags.java b/base/test/android/javatests/src/org/chromium/base/test/util/CommandLineFlags.java
|
| index d5579e3b1017e482c739957a7b3deecf5552bb42..6a0d9238d6aa56239593c205b60f1f3ad313de52 100644
|
| --- a/base/test/android/javatests/src/org/chromium/base/test/util/CommandLineFlags.java
|
| +++ b/base/test/android/javatests/src/org/chromium/base/test/util/CommandLineFlags.java
|
| @@ -14,12 +14,13 @@ import org.chromium.base.test.BaseTestResult.PreTestHook;
|
| import org.chromium.base.test.util.parameter.BaseParameter;
|
|
|
| import java.lang.annotation.ElementType;
|
| -import java.lang.annotation.Inherited;
|
| +import java.lang.annotation.Repeatable;
|
| import java.lang.annotation.Retention;
|
| import java.lang.annotation.RetentionPolicy;
|
| import java.lang.annotation.Target;
|
| import java.lang.reflect.AnnotatedElement;
|
| import java.lang.reflect.Method;
|
| +import java.util.ArrayList;
|
| import java.util.Arrays;
|
| import java.util.HashSet;
|
| import java.util.List;
|
| @@ -40,25 +41,37 @@ public final class CommandLineFlags {
|
| /**
|
| * Adds command-line flags to the {@link org.chromium.base.CommandLine} for this test.
|
| */
|
| - @Inherited
|
| + @Repeatable(AddContainer.class)
|
| @Retention(RetentionPolicy.RUNTIME)
|
| @Target({ElementType.METHOD, ElementType.TYPE})
|
| public @interface Add {
|
| String[] value();
|
| }
|
|
|
| + @Retention(RetentionPolicy.RUNTIME)
|
| + @Target({ElementType.METHOD, ElementType.TYPE})
|
| + public @interface AddContainer {
|
| + Add[] value() default {};
|
| + }
|
| +
|
| /**
|
| * Removes command-line flags from the {@link org.chromium.base.CommandLine} from this test.
|
| *
|
| * Note that this can only remove flags added via {@link Add} above.
|
| */
|
| - @Inherited
|
| + @Repeatable(RemoveContainer.class)
|
| @Retention(RetentionPolicy.RUNTIME)
|
| @Target({ElementType.METHOD, ElementType.TYPE})
|
| public @interface Remove {
|
| String[] value();
|
| }
|
|
|
| + @Retention(RetentionPolicy.RUNTIME)
|
| + @Target({ElementType.METHOD, ElementType.TYPE})
|
| + public @interface RemoveContainer {
|
| + Remove[] value() default {};
|
| + }
|
| +
|
| /**
|
| * Sets up the CommandLine with the appropriate flags.
|
| *
|
| @@ -84,16 +97,26 @@ public final class CommandLineFlags {
|
| private static Set<String> getFlags(AnnotatedElement element) {
|
| AnnotatedElement parent = (element instanceof Method)
|
| ? ((Method) element).getDeclaringClass()
|
| - : ((Class) element).getSuperclass();
|
| + : ((Class<?>) element).getSuperclass();
|
| Set<String> flags = (parent == null) ? new HashSet<String>() : getFlags(parent);
|
|
|
| - if (element.isAnnotationPresent(CommandLineFlags.Add.class)) {
|
| + if (element.isAnnotationPresent(CommandLineFlags.AddContainer.class)) {
|
| + for (Add addflag : element.getAnnotation(CommandLineFlags.AddContainer.class).value()) {
|
| + flags.addAll(Arrays.asList(addflag.value()));
|
| + }
|
| + } else if (element.isAnnotationPresent(CommandLineFlags.Add.class)) {
|
| flags.addAll(
|
| Arrays.asList(element.getAnnotation(CommandLineFlags.Add.class).value()));
|
| }
|
|
|
| - if (element.isAnnotationPresent(CommandLineFlags.Remove.class)) {
|
| - List<String> flagsToRemove =
|
| + List<String> flagsToRemove = new ArrayList<>();
|
| + if (element.isAnnotationPresent(CommandLineFlags.RemoveContainer.class)) {
|
| + for (Remove removeflag :
|
| + element.getAnnotation(CommandLineFlags.RemoveContainer.class).value()) {
|
| + flagsToRemove.addAll(Arrays.asList(removeflag.value()));
|
| + }
|
| + } else if (element.isAnnotationPresent(CommandLineFlags.Remove.class)) {
|
| + flagsToRemove =
|
| Arrays.asList(element.getAnnotation(CommandLineFlags.Remove.class).value());
|
| for (String flagToRemove : flagsToRemove) {
|
| // If your test fails here, you have tried to remove a command-line flag via
|
| @@ -102,8 +125,8 @@ public final class CommandLineFlags {
|
| Assert.assertFalse("Unable to remove command-line flag \"" + flagToRemove + "\".",
|
| CommandLine.getInstance().hasSwitch(flagToRemove));
|
| }
|
| - flags.removeAll(flagsToRemove);
|
| }
|
| + flags.removeAll(flagsToRemove);
|
|
|
| return flags;
|
| }
|
|
|