В связанной заметке вы можете использовать замыкание Xtend для реализации интерфейса провайдера Guice.
Например, вызов IResourceScopeCache.get в Java:
@Inject
private IResourceScopeCache cache;
public EvaluatedResource getEvaluatedResource(EObject object) {
final Resource resource = object.eResource();
return cache.get("key", resource, new Provider<Object>() {
public Object get() {
return evaluate(resource);
}
});
}
public EvaluatedResource evaluate(Resource resource) {
...; // create EvaluatedResource evaluatedResource
return evaluatedResource; // return it
}
в Xtend становится:
@Inject
IResourceScopeCache cache
def getEvaluatedResource(EObject object) {
val resource = object.eResource
cache.get("key", resource, [|evaluate(resource)])
}
def evaluate(Resource resource) {
... // create EvaluatedResource evaluatedResource
evaluatedResource // return it
}
Хитрость в том, что [|...]
- это функция с нулевыми параметрами, в данном случае Provider.get()
.