| /* |
| * Copyright (c) 2013, the Dart project authors. |
| * |
| * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except |
| * in compliance with the License. You may obtain a copy of the License at |
| * |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Unless required by applicable law or agreed to in writing, software distributed under the License |
| * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express |
| * or implied. See the License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| package com.google.dart.engine.constant; |
| |
| import com.google.dart.engine.error.AnalysisError; |
| |
| /** |
| * Instances of the class {@code EvaluationResult} represent the result of attempting to evaluate an |
| * expression. |
| */ |
| public class EvaluationResult { |
| /** |
| * Return an evaluation result representing the result of evaluating an expression that is not a |
| * compile-time constant because of the given errors. |
| * |
| * @param errors the errors that should be reported for the expression(s) that were evaluated |
| * @return the result of evaluating an expression that is not a compile-time constant |
| */ |
| public static EvaluationResult forErrors(AnalysisError[] errors) { |
| return new EvaluationResult(null, errors); |
| } |
| |
| /** |
| * Return an evaluation result representing the result of evaluating an expression that is a |
| * compile-time constant that evaluates to the given value. |
| * |
| * @param value the value of the expression |
| * @return the result of evaluating an expression that is a compile-time constant |
| */ |
| public static EvaluationResult forValue(DartObject value) { |
| return new EvaluationResult(value, null); |
| } |
| |
| /** |
| * The value of the expression. |
| */ |
| private DartObject value; |
| |
| /** |
| * The errors that should be reported for the expression(s) that were evaluated. |
| */ |
| private AnalysisError[] errors; |
| |
| /** |
| * Initialize a newly created result object with the given state. Clients should use one of the |
| * factory methods: {@link #forErrors(AnalysisError[])} and {@link #forValue(Object)}. |
| * |
| * @param value the value of the expression |
| * @param errors the errors that should be reported for the expression(s) that were evaluated |
| */ |
| private EvaluationResult(DartObject value, AnalysisError[] errors) { |
| this.value = value; |
| this.errors = errors; |
| } |
| |
| /** |
| * Return an array containing the errors that should be reported for the expression(s) that were |
| * evaluated. If there are no such errors, the array will be empty. The array can be empty even if |
| * the expression is not a valid compile time constant if the errors would have been reported by |
| * other parts of the analysis engine. |
| */ |
| public AnalysisError[] getErrors() { |
| return errors == null ? AnalysisError.NO_ERRORS : errors; |
| } |
| |
| /** |
| * Return the value of the expression, or {@code null} if the expression evaluated to {@code null} |
| * or if the expression could not be evaluated, either because it was not a compile-time constant |
| * expression or because it would throw an exception when evaluated. |
| * |
| * @return the value of the expression |
| */ |
| public DartObject getValue() { |
| return value; |
| } |
| |
| /** |
| * Return {@code true} if the expression is a compile-time constant expression that would not |
| * throw an exception when evaluated. |
| * |
| * @return {@code true} if the expression is a valid compile-time constant expression |
| */ |
| public boolean isValid() { |
| return errors == null; |
| } |
| } |