aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google')
-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
2 files changed, 26 insertions, 0 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());
}