resolve method
MethodExecutor?
resolve(
- EvaluationContext context,
- Object target,
- String name,
- List<
Object?> arguments,
override
An executor that runs method name on target with arguments
(already evaluated), or null to let the next resolver try.
Throwing an AccessException here is reported as
problemLocatingMethod (EL1031E).
Implementation
@override
MethodExecutor? resolve(
EvaluationContext context,
Object target,
String name,
List<Object?> arguments,
) {
if (target is! PropertyResolver) {
return null;
}
final function = switch (name) {
'getProperty' => ([
String? key,
String? defaultValue,
]) => target.getProperty(key!, defaultValue: defaultValue),
'getRequiredProperty' => (String key) => target.getRequiredProperty(key),
'containsProperty' => (String key) => target.containsProperty(key),
'resolvePlaceholders' => (String text) => target.resolvePlaceholders(
text,
),
'resolveRequiredPlaceholders' => (
String text,
) => target.resolveRequiredPlaceholders(text),
'getActiveProfiles' when target is Environment =>
() => target.activeProfiles,
'getDefaultProfiles' when target is Environment =>
() => target.defaultProfiles,
'matchesProfiles' when target is Environment => VarargsFunction(
(List<Object?> expressions) =>
target.matchesProfiles([for (final e in expressions) '$e']),
),
_ => null,
};
if (function == null ||
(name == 'getProperty' && arguments.isEmpty) ||
!VarargsFunction.accepts(function, arguments.length)) {
return null;
}
return (_, _, args) => SpelTypeMethodResolver.callChecked(
function,
args,
() => SpelEvaluationException(
SpelMessage.methodNotFound,
inserts: ['$name(${args.length} arguments)', target.runtimeType],
),
);
}