Implementing a Resolver¶
To create your own a resolver subclass ReferenceResolver and implement the method resolve.
Name your resolver using by annotating your class with the @Type(string). The name provided by
this annotation will expose your resolver to the Gyro language as $(<name>). Resolvers can be namespaced, similar
to how resources are namespaced by provider, by adding package-info.java to the package with your
resolver. Annotate the package declaration in package-info.java with the @Namespace(<name>) annotation. With
a namespace defined your resolver will be available as $(<namespace>::<type>).
Your resolver’s resolve method will be called whenever Gyro encounters a reference with the name
of your resolver in it. Your resolver will be passed in a Scope
object, this gives you access to Gyro’s internal scope (map of values), and a List<Object> of
arguments that have already been resolved.
Your resolver should return a value that can be used by the Gyro configuration language. Typically this means returning a basic type (integer, string, list, or map) or a Resource.
Example¶
The following example shows the implementation of a simple resolver called the string-concat
that concatenates two or more stings.
@Type("string-concat")
public class StringConcatResolver extends ReferenceResolver {
@Override
public Object resolve(Scope scope, List<Object> arguments) throws Exception {
if (arguments.size() < 2) {
throw GyroException("The 'String-concat' resolver needs at least two arguments");
}
return String.join(" ", arguments);
}
}