String parent = "java.lang.Object";
if (configuration.containsKey("extends")) {
parent = (String) configuration.get("extends");
}
String name = "$Golo$Adapter$" + nextId.getAndIncrement();
AdapterDefinition definition = new AdapterDefinition(classLoader, name, parent);
if (configuration.containsKey("interfaces")) {
@SuppressWarnings("unchecked")
Iterable<String> interfaces = (Iterable<String>) configuration.get("interfaces");
for (String iface : interfaces) {
definition.implementsInterface(iface);
}
}
if (configuration.containsKey("implements")) {
@SuppressWarnings("unchecked")
Map<String, MethodHandle> implementations = (Map<String, MethodHandle>) configuration.get("implements");
for (Map.Entry<String, MethodHandle> implementation : implementations.entrySet()) {
definition.implementsMethod(implementation.getKey(), implementation.getValue());
}
}
if (configuration.containsKey("overrides")) {
@SuppressWarnings("unchecked")
Map<String, MethodHandle> overrides = (Map<String, MethodHandle>) configuration.get("overrides");
for (Map.Entry<String, MethodHandle> override : overrides.entrySet()) {
definition.overridesMethod(override.getKey(), override.getValue());
}
}
definition.validate();
Class<?> adapterClass = adapterGenerator.generateIntoDefinitionClassloader(definition);
return new Maker(definition, adapterClass);
}