1 // Copyright 2017 The Bazel Authors. All rights reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 package com.google.devtools.common.options; 15 16 /** 17 * On top of categorizing options by their intended purpose, these tags should identify options that 18 * are either not supported or are intended to break old behavior. 19 */ 20 public enum OptionMetadataTag { 21 /** 22 * This option triggers an experimental feature with no guarantees of functionality. 23 * 24 * <p>Note: this is separate from UNDOCUMENTED flags, which are flags we don't want listed and 25 * shouldn't be widely used. Experimental flags should probably also be undocumented, but not all 26 * undocumented flags should be labeled experimental. 27 */ 28 EXPERIMENTAL(0), 29 30 /** 31 * This option triggers a backwards-incompatible change. It will be off by default when the option 32 * is first introduced, and later switched on by default on a major Blaze release. Use this option 33 * to test your migration readiness or get early access to the feature. The option may be 34 * deprecated some time after the feature's release. 35 */ 36 INCOMPATIBLE_CHANGE(1), 37 38 /** 39 * This flag is deprecated. It might either no longer have any effect, or might no longer be 40 * supported. 41 */ 42 DEPRECATED(2), 43 44 /** 45 * These are flags that should never be set by a user. This tag is used to make sure that options 46 * that form the protocol between the client and the server are not logged. 47 * 48 * <p>These should be in category {@code OptionDocumentationCategory.UNDOCUMENTED}. 49 */ 50 HIDDEN(3), 51 52 /** 53 * Options which are INTERNAL are not recognized by the parser at all, and so cannot be used as 54 * flags. 55 * 56 * <p>These should be in category {@code OptionDocumentationCategory.UNDOCUMENTED}. 57 */ 58 INTERNAL(4), 59 60 /** 61 * Options that are triggered by --all_incompatible_changes. 62 * 63 * <p>These must also be labelled {@link OptionMetadataTag#INCOMPATIBLE_CHANGE} and have the 64 * prefix --incompatible_. Note that the option name prefix is also a triggering case for the 65 * --all_incompatible_changes expansion, and so all options that start with the "incompatible_" 66 * prefix must have this tag. 67 */ 68 TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES(5); 69 70 private final int value; 71 72 OptionMetadataTag(int value) { 73 this.value = value; 74 } 75 76 public int getValue() { 77 return value; 78 } 79 } 80