blob: bf6fea89de9063f100ede99d096f25bdb4606922 [file]
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:analyzer/dart/analysis/declared_variables.dart';
import 'package:analyzer/src/dart/constant/value.dart';
import 'package:analyzer/src/dart/element/type_system.dart';
class FromEnvironmentEvaluator {
final TypeSystemImpl _typeSystem;
final DeclaredVariables _declaredVariables;
FromEnvironmentEvaluator(this._typeSystem, this._declaredVariables);
/// Return the value of the variable with the given [name] interpreted as a
/// 'boolean' value.
///
/// If the variable is not defined, or the value cannot be parsed as a
/// boolean, return [defaultValue].
///
/// If [defaultValue] is `null`, return a `false` object.
DartObjectImpl getBool(String? name, DartObjectImpl? defaultValue) {
var str = name != null ? _declaredVariables.get(name) : null;
if (str == 'true') {
return DartObjectImpl(
_typeSystem,
_typeSystem.typeProvider.boolType,
BoolState.TRUE_STATE,
);
}
if (str == 'false') {
return DartObjectImpl(
_typeSystem,
_typeSystem.typeProvider.boolType,
BoolState.FALSE_STATE,
);
}
if (defaultValue != null) {
return defaultValue;
}
return DartObjectImpl(
_typeSystem,
_typeSystem.typeProvider.boolType,
BoolState.FALSE_STATE,
);
}
/// Return the value of the variable with the given [name] interpreted as an
/// integer value.
///
/// If the variable is not defined, or the value cannot be parsed as an
/// integer, return [defaultValue].
///
/// If [defaultValue] is `null`, return a `0` object.
DartObjectImpl getInt(String? name, DartObjectImpl? defaultValue) {
var str = name != null ? _declaredVariables.get(name) : null;
if (str != null) {
try {
var value = int.parse(str);
return DartObjectImpl(
_typeSystem,
_typeSystem.typeProvider.intType,
IntState(value),
);
} on FormatException {
// fallthrough
}
}
if (defaultValue != null) {
return defaultValue;
}
return DartObjectImpl(
_typeSystem,
_typeSystem.typeProvider.intType,
IntState(0),
);
}
/// Return the value of the variable with the given [name] interpreted as a
/// string value.
///
/// If the variable is not defined, or the value cannot be parsed as a
/// boolean, return [defaultValue].
///
/// If [defaultValue] is `null`, return an empty string object.
DartObjectImpl getString(String? name, DartObjectImpl? defaultValue) {
var str = name != null ? _declaredVariables.get(name) : null;
if (str != null) {
return DartObjectImpl(
_typeSystem,
_typeSystem.typeProvider.stringType,
StringState(str),
);
}
if (defaultValue != null) {
return defaultValue;
}
return DartObjectImpl(
_typeSystem,
_typeSystem.typeProvider.stringType,
StringState(''),
);
}
DartObjectImpl hasEnvironment(String? name) {
var value = name != null && _declaredVariables.get(name) != null;
return DartObjectImpl(
_typeSystem,
_typeSystem.typeProvider.boolType,
BoolState(value),
);
}
}