aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/common/options/Option.java1
-rw-r--r--src/main/java/com/google/devtools/common/options/processor/OptionProcessor.java25
-rw-r--r--src/test/java/com/google/devtools/build/lib/runtime/AllIncompatibleChangesExpansionTest.java3
-rw-r--r--src/test/java/com/google/devtools/common/options/OptionsParserTest.java2
4 files changed, 30 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/common/options/Option.java b/src/main/java/com/google/devtools/common/options/Option.java
index 4a65f69abc..92436fd5f6 100644
--- a/src/main/java/com/google/devtools/common/options/Option.java
+++ b/src/main/java/com/google/devtools/common/options/Option.java
@@ -197,5 +197,6 @@ public @interface Option {
* expansion flags to other flags, or as implicit requirements to other flags. Use the inner flags
* instead.
*/
+ @Deprecated
boolean wrapperOption() default false;
}
diff --git a/src/main/java/com/google/devtools/common/options/processor/OptionProcessor.java b/src/main/java/com/google/devtools/common/options/processor/OptionProcessor.java
index 5ccb868cee..fd7c023654 100644
--- a/src/main/java/com/google/devtools/common/options/processor/OptionProcessor.java
+++ b/src/main/java/com/google/devtools/common/options/processor/OptionProcessor.java
@@ -488,6 +488,30 @@ public final class OptionProcessor extends AbstractProcessor {
}
}
+ /**
+ * Some flags wrap other flags. They are objectively useless, as there is no difference between
+ * passing --wrapper=--foo and --foo other than the "source" information tracked. This
+ * functionality comes from requiring compatibility at some past point in time, but is actively
+ * being deprecated. No non-deprecated flag can use this feature.
+ */
+ private void checkWrapperOptions(VariableElement optionField) throws OptionProcessorException {
+ Option annotation = optionField.getAnnotation(Option.class);
+ if (annotation.wrapperOption()) {
+ if (annotation.deprecationWarning().isEmpty()) {
+ throw new OptionProcessorException(
+ optionField,
+ "Can't have non deprecated wrapper options, this feature is deprecated. "
+ + "Please add a deprecationWarning.");
+ }
+ if (!ImmutableList.copyOf(annotation.metadataTags()).contains(OptionMetadataTag.DEPRECATED)) {
+ throw new OptionProcessorException(
+ optionField,
+ "Can't have non deprecated wrapper options, this feature is deprecated. "
+ + "Please add the metadata tag DEPRECATED.");
+ }
+ }
+ }
+
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (Element annotatedElement : roundEnv.getElementsAnnotatedWith(Option.class)) {
@@ -504,6 +528,7 @@ public final class OptionProcessor extends AbstractProcessor {
checkConverter(optionField);
checkEffectTagRationality(optionField);
checkMetadataTagAndCategoryRationality(optionField);
+ checkWrapperOptions(optionField);
} catch (OptionProcessorException e) {
error(e.getElementInError(), e.getMessage());
}
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/AllIncompatibleChangesExpansionTest.java b/src/test/java/com/google/devtools/build/lib/runtime/AllIncompatibleChangesExpansionTest.java
index f8e8892c59..8b978d0e3d 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/AllIncompatibleChangesExpansionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/AllIncompatibleChangesExpansionTest.java
@@ -444,11 +444,12 @@ public class AllIncompatibleChangesExpansionTest {
@Option(
name = "incompatible_bad",
category = "incompatible changes",
- metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE},
+ metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE, OptionMetadataTag.DEPRECATED},
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.NO_OP},
defaultValue = "false",
help = "nohelp",
+ deprecationWarning = "wrapper options are deprecated, including this one.",
wrapperOption = true
)
public boolean bad;
diff --git a/src/test/java/com/google/devtools/common/options/OptionsParserTest.java b/src/test/java/com/google/devtools/common/options/OptionsParserTest.java
index e71307b272..56e1b969c7 100644
--- a/src/test/java/com/google/devtools/common/options/OptionsParserTest.java
+++ b/src/test/java/com/google/devtools/common/options/OptionsParserTest.java
@@ -1890,8 +1890,10 @@ public class OptionsParserTest {
@Option(
name = "wrapper",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
+ metadataTags = {OptionMetadataTag.DEPRECATED},
effectTags = {OptionEffectTag.NO_OP},
defaultValue = "null",
+ deprecationWarning = "wrapper options are deprecated, including this one.",
wrapperOption = true
)
public Void wrapperOption;