public JoObject call(JoCall call) { JoMessage message = call.getMessage(); String slotName = message.getName(); if (hasSlot(slotName)) { return call(getSlot(slotName), message.getArguments()); } Collection<JoSlot> values = objectSlot.values(); for (JoSlot _slot : values) { Class<? extends JoSlot> clazz = _slot.getClass(); if (!clazz.isAnnotationPresent(Nullable.class)) { continue; } Nullable nullable = clazz.getAnnotation(Nullable.class); if (!nullable.value()) { continue; } JoObject child = _slot.getBlock().call(null, null); if (child.hasSlot(slotName)) { return call(child.getSlot(slotName), message.getArguments()); } } throw new NoSuchMethodError(slotName); }
@Override public JoObject call(JoObject object, JoArguments arguments) { return self.createClone(); }
@Override public JoObject call(JoObject object, JoArguments parameter) { object.setSlot(object.toString(), parameter.get(0)); return object; }