105bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin// Copyright 2017 The Bazel Authors. All rights reserved.
205bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin//
305bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin// Licensed under the Apache License, Version 2.0 (the "License");
405bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin// you may not use this file except in compliance with the License.
505bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin// You may obtain a copy of the License at
605bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin//
705bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin//    http://www.apache.org/licenses/LICENSE-2.0
805bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin//
905bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin// Unless required by applicable law or agreed to in writing, software
1005bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin// distributed under the License is distributed on an "AS IS" BASIS,
1105bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1205bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin// See the License for the specific language governing permissions and
1305bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin// limitations under the License.
1405bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarinpackage com.google.devtools.common.options;
1505bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin
1605bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarinimport javax.annotation.Nullable;
1705bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin
1805bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin/**
1905bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin * Contains metadata describing the origin of an option. This includes its priority, a message about
2005bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin * where it came from, and whether it was set explicitly or expanded/implied by other flags.
2105bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin */
2205bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarinpublic class OptionInstanceOrigin {
2305bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin  private final OptionPriority priority;
2405bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin  @Nullable private final String source;
2505bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin  @Nullable private final OptionDefinition implicitDependent;
2605bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin  @Nullable private final OptionDefinition expandedFrom;
2705bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin
2805bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin  public OptionInstanceOrigin(
2905bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin      OptionPriority priority,
3005bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin      String source,
3105bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin      OptionDefinition implicitDependent,
3205bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin      OptionDefinition expandedFrom) {
3305bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin    this.priority = priority;
3405bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin    this.source = source;
3505bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin    this.implicitDependent = implicitDependent;
3605bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin    this.expandedFrom = expandedFrom;
3705bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin  }
3805bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin
3905bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin  public OptionPriority getPriority() {
4005bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin    return priority;
4105bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin  }
4205bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin
4305bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin  @Nullable
4405bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin  public String getSource() {
4505bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin    return source;
4605bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin  }
4705bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin
4805bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin  @Nullable
4905bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin  public OptionDefinition getImplicitDependent() {
5005bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin    return implicitDependent;
5105bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin  }
5205bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin
5305bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin  @Nullable
5405bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin  public OptionDefinition getExpandedFrom() {
5505bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin    return expandedFrom;
5605bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin  }
5705bb5c28c6be8320c06d8bb1bafd0be586678138ccalvarin}
58