diff options
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r-- | src/main/java/com/google/devtools/common/options/Option.java | 1 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/common/options/processor/OptionProcessor.java | 25 |
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()); } |