Skip to content

Commit

Permalink
Version 3.8.0-52.0.dev
Browse files Browse the repository at this point in the history
Merge ca6cb0e into dev
  • Loading branch information
Dart CI committed Jan 29, 2025
2 parents 0ab0deb + ca6cb0e commit 71772dc
Show file tree
Hide file tree
Showing 30 changed files with 621 additions and 389 deletions.
2 changes: 1 addition & 1 deletion DEPS
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ vars = {
"jsc_tag": "version:288804",

# https://chrome-infra-packages.appspot.com/p/fuchsia/third_party/clang
"clang_version": "git_revision:6d12b954a7df11e32acf110950d88bac282079b8",
"clang_version": "git_revision:84af3ee5124de3385b829c3a9980fd734f0d92e8",

# https://chrome-infra-packages.appspot.com/p/gn/gn
"gn_version": "git_revision:ed1abc107815210dc66ec439542bee2f6cbabc00",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,17 +152,17 @@ mixin EditableArgumentsMixin {
return null;
}

/// Returns a list of the constants of an enum constant prefixed with the enum
/// name.
List<String> getQualifiedEnumConstantNames(EnumElement2 element3) =>
element3.constants2.map(getQualifiedEnumConstantName).nonNulls.toList();

/// Returns the name of an enum constant prefixed with the enum name.
String? getQualifiedEnumConstantName(FieldElement2 enumConstant) {
static String? getQualifiedEnumConstantName(FieldElement2 enumConstant) {
var enumName = enumConstant.enclosingElement2.name3;
var name = enumConstant.name3;
return enumName != null && name != null ? '$enumName.$name' : null;
}

/// Returns a list of the constants of an enum constant prefixed with the enum
/// name.
List<String> getQualifiedEnumConstantNames(EnumElement2 element3) =>
element3.constants2.map(getQualifiedEnumConstantName).nonNulls.toList();
}

extension on InvocationExpressionImpl {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,12 +167,14 @@ class EditableArgumentsHandler
}) {
var valueExpression =
argument is NamedExpression ? argument.expression : argument;
var hasArgument = valueExpression != null;

// Lazily compute the values if we will use this parameter/argument.
late var values = _getValues(parameter, valueExpression);

String? type;
Object? value;
Object? defaultValue;
List<String>? options;

// Determine whether a value for this parameter is editable.
Expand All @@ -186,40 +188,39 @@ class EditableArgumentsHandler
if (parameter.type.isDartCoreDouble) {
type = 'double';
value =
(values.argumentValue ?? values.parameterValue)?.toDoubleValue() ??
(values.argumentValue ?? values.parameterValue)?.toIntValue();
values.argumentValue?.toDoubleValue() ??
values.argumentValue?.toIntValue();
defaultValue =
values.parameterValue?.toDoubleValue() ??
values.parameterValue?.toIntValue();
} else if (parameter.type.isDartCoreInt) {
type = 'int';
value = (values.argumentValue ?? values.parameterValue)?.toIntValue();
value = values.argumentValue?.toIntValue();
defaultValue = values.parameterValue?.toIntValue();
} else if (parameter.type.isDartCoreBool) {
type = 'bool';
value = (values.argumentValue ?? values.parameterValue)?.toBoolValue();
value = values.argumentValue?.toBoolValue();
defaultValue = values.parameterValue?.toBoolValue();
} else if (parameter.type.isDartCoreString) {
type = 'string';
value = (values.argumentValue ?? values.parameterValue)?.toStringValue();
value = values.argumentValue?.toStringValue();
defaultValue = values.parameterValue?.toStringValue();
} else if (parameter.type case InterfaceType(:EnumElement2 element3)) {
type = 'enum';
options = getQualifiedEnumConstantNames(element3);

// Try to match the argument value up with the enum.
var valueObject = values.argumentValue ?? values.parameterValue;
if (valueObject?.type case InterfaceType(
element3: EnumElement2 valueElement,
) when element3 == valueElement) {
var index = valueObject?.getField('index')?.toIntValue();
if (index != null) {
var enumConstant = element3.constants2.elementAtOrNull(index);
if (enumConstant != null) {
value = getQualifiedEnumConstantName(enumConstant);
}
}
}
value = values.argumentValue?.toEnumStringValue(element3);
defaultValue = values.parameterValue?.toEnumStringValue(element3);
} else {
// TODO(dantup): Determine which parameters we don't include (such as
// Widgets) and which we include just without values.
return null;
}

// If no argument is present, we always populate "value" with the default.
if (!hasArgument) {
value = defaultValue;
}

var isEditable = notEditableReason == null;

// Compute a displayValue.
Expand All @@ -246,6 +247,7 @@ class EditableArgumentsHandler
displayValue: displayValue,
options: options,
isDefault: values.isDefault,
defaultValue: defaultValue,
hasArgument: valueExpression != null,
isRequired: parameter.isRequired,
isNullable:
Expand All @@ -255,3 +257,23 @@ class EditableArgumentsHandler
);
}
}

extension on DartObject? {
Object? toEnumStringValue(EnumElement2 element3) {
var valueObject = this;
if (valueObject?.type case InterfaceType(
element3: EnumElement2 valueElement,
) when element3 == valueElement) {
var index = valueObject?.getField('index')?.toIntValue();
if (index != null) {
var enumConstant = element3.constants2.elementAtOrNull(index);
if (enumConstant != null) {
return EditableArgumentsMixin.getQualifiedEnumConstantName(
enumConstant,
);
}
}
}
return null;
}
}
Loading

0 comments on commit 71772dc

Please sign in to comment.