private void finalizeIncompleteMethods() { Iterator i = _incompleteMethods.entrySet().iterator(); while(i.hasNext()) { Map.Entry e = (Map.Entry) i.next(); MethodSignature sig = (MethodSignature) e.getKey(); BodyBuilder builder = (BodyBuilder) e.getValue(); // Each BodyBuilder is created and given a begin(), this is // the matching end() builder.end(); _classFab.addMethod(Modifier.PUBLIC, sig, builder.toString()); } }
private void finalizeIncompleteMethods() { Iterator i = _incompleteMethods.entrySet().iterator(); while(i.hasNext()) { Map.Entry e = (Map.Entry) i.next(); MethodSignature sig = (MethodSignature) e.getKey(); BodyBuilder builder = (BodyBuilder) e.getValue(); // Each BodyBuilder is created and given a begin(), this is // the matching end() builder.end(); _classFab.addMethod(Modifier.PUBLIC, sig, builder.toString()); } }
void finalizeEnhancedClass() { finalizeIncompleteMethods(); if (_constructorBuilder != null) { _constructorBuilder.end(); Class[] types = (Class[]) _constructorTypes.toArray(new Class[_constructorTypes.size()]); _classFab.addConstructor(types, null, _constructorBuilder.toString()); } if (_log != null && _log.isDebugEnabled()) _log.debug("Creating class:\n\n" + _classFab); }
void finalizeEnhancedClass() { finalizeIncompleteMethods(); if (_constructorBuilder != null) { _constructorBuilder.end(); Class[] types = (Class[]) _constructorTypes.toArray(new Class[_constructorTypes.size()]); _classFab.addConstructor(types, null, _constructorBuilder.toString()); } if (_log != null && _log.isDebugEnabled()) _log.debug("Creating class:\n\n" + _classFab); }
void extendCleanupAfterRender(EnhancementOperation op, String fieldName) { BodyBuilder cleanupBody = new BodyBuilder(); cleanupBody.addln("{0} = null;", fieldName); op.extendMethodImplementation(IComponent.class, EnhanceUtils.CLEANUP_AFTER_RENDER_SIGNATURE, cleanupBody.toString()); } }
public void performEnhancement(EnhancementOperation op, IComponentSpecification spec, Method method, Location location) { Class<?> type = method.getReturnType(); if (type.equals(void.class)) throw new ApplicationRuntimeException( "Cached annotation cannot be used with a method that returns void"); String fieldName = "_$cached$" + method.getName(); MethodSignature signature = new MethodSignature(method); op.addField(fieldName, type); BodyBuilder builder = createCacheMethod(signature, fieldName); op.addMethod(Modifier.PUBLIC, signature, builder.toString(), location); extendCleanupAfterRender(op, fieldName); }
/** @since 1.1 */ private void addSerializable(String pointId) { _classFab.addInterface(Serializable.class); BodyBuilder bb = new BodyBuilder(); bb.add( "return {0}.getServiceSerializationSupport().getServiceTokenForService(\"{1}\");", ServiceSerializationHelper.class.getName(), pointId); MethodSignature sig = new MethodSignature(Object.class, "writeReplace", null, null); _classFab.addMethod(Modifier.PRIVATE, sig, bb.toString()); }
private void addPrimitive(EnhancementOperation op, String metaKey, String propertyName, MethodSignature sig, String sourceName, String parser, Location location) { BodyBuilder builder = new BodyBuilder(); builder.begin(); builder.addln("java.lang.String meta = {0}.getComponentProperty(this, \"{1}\");", sourceName, metaKey); builder.addln("return {0}(meta);", parser); builder.end(); op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location); }
private void addCharacterPrimitive(EnhancementOperation op, String metaKey, String propertyName, MethodSignature sig, String sourceName, Location location) { BodyBuilder builder = new BodyBuilder(); builder.begin(); builder.addln( "java.lang.String meta = {0}.getComponentProperty(this, \"{1}\");", sourceName, metaKey); builder.addln("return meta.charAt(0);"); builder.end(); op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location); }
private void addPrimitive(EnhancementOperation op, String metaKey, String propertyName, MethodSignature sig, String sourceName, String parser, Location location) { BodyBuilder builder = new BodyBuilder(); builder.begin(); builder.addln("java.lang.String meta = {0}.getComponentProperty(this, \"{1}\");", sourceName, metaKey); builder.addln("return {0}(meta);", parser); builder.end(); op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location); }
private void addBoolean(EnhancementOperation op, String metaKey, String propertyName, MethodSignature sig, String sourceName, Location location) { BodyBuilder builder = new BodyBuilder(); builder.begin(); builder.addln( "java.lang.String meta = {0}.getComponentProperty(this, \"{1}\");", sourceName, metaKey); builder.addln("return java.lang.Boolean.valueOf(meta).booleanValue();"); builder.end(); op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location); }
private void addBoolean(EnhancementOperation op, String metaKey, String propertyName, MethodSignature sig, String sourceName, Location location) { BodyBuilder builder = new BodyBuilder(); builder.begin(); builder.addln( "java.lang.String meta = {0}.getComponentProperty(this, \"{1}\");", sourceName, metaKey); builder.addln("return java.lang.Boolean.valueOf(meta).booleanValue();"); builder.end(); op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location); }
private void addCharacterPrimitive(EnhancementOperation op, String metaKey, String propertyName, MethodSignature sig, String sourceName, Location location) { BodyBuilder builder = new BodyBuilder(); builder.begin(); builder.addln( "java.lang.String meta = {0}.getComponentProperty(this, \"{1}\");", sourceName, metaKey); builder.addln("return meta.charAt(0);"); builder.end(); op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location); }
void extendCleanupAfterRender(EnhancementOperation op, String bindingFieldName, String fieldName, String defaultFieldName, String cachedFieldName) { BodyBuilder cleanupBody = new BodyBuilder(); // Cached is only set when the field is updated in the accessor or // mutator. // After rendering, we want to clear the cached value and cached flag // unless the binding is invariant, in which case it can stick around // for some future render. cleanupBody.addln("if ({0} && ! {1}.isInvariant())", cachedFieldName, bindingFieldName); cleanupBody.begin(); cleanupBody.addln("{0} = false;", cachedFieldName); cleanupBody.addln("{0} = {1};", fieldName, defaultFieldName); cleanupBody.end(); op.extendMethodImplementation(IComponent.class, EnhanceUtils.CLEANUP_AFTER_RENDER_SIGNATURE, cleanupBody.toString()); }
/** * Creates a method that delegates to the _delegate object; this is used for * methods that are not logged. */ private void addPassThruMethodImplementation(ClassFab classFab, MethodSignature sig) { BodyBuilder builder = new BodyBuilder(); builder.begin(); builder.add("return ($r) _delegate."); builder.add(sig.getName()); builder.addln("($$);"); builder.end(); classFab.addMethod(Modifier.PUBLIC, sig, builder.toString()); }
private void addObject(EnhancementOperation op, String metaKey, String propertyName, Class propertyType, MethodSignature sig, String sourceName, Location location) { String valueConverterName = op.addInjectedField("_$valueConverter", ValueConverter.class, _valueConverter); String classRef = op.getClassReference(propertyType); BodyBuilder builder = new BodyBuilder(); builder.begin(); builder.addln("java.lang.String meta = {0}.getComponentProperty(this, \"{1}\");", sourceName, metaKey); builder.addln("return ({0}) {1}.coerceValue(meta, {2});", ClassFabUtils .getJavaClassName(propertyType), valueConverterName, classRef); builder.end(); op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location); }
private void addObject(EnhancementOperation op, String metaKey, String propertyName, Class propertyType, MethodSignature sig, String sourceName, Location location) { String valueConverterName = op.addInjectedField("_$valueConverter", ValueConverter.class, _valueConverter); String classRef = op.getClassReference(propertyType); BodyBuilder builder = new BodyBuilder(); builder.begin(); builder.addln("java.lang.String meta = {0}.getComponentProperty(this, \"{1}\");", sourceName, metaKey); builder.addln("return ({0}) {1}.coerceValue(meta, {2});", ClassFabUtils .getJavaClassName(propertyType), valueConverterName, classRef); builder.end(); op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location); }
private void addMutator(EnhancementOperation op, String propertyName, Class propertyType, String fieldName, boolean persistent, Location location) { String methodName = EnhanceUtils.createMutatorMethodName(propertyName); BodyBuilder body = new BodyBuilder(); body.begin(); if (persistent) { body.add("org.apache.tapestry.Tapestry#fireObservedChange(this, "); body.addQuoted(propertyName); body.addln(", ($w) $1);"); } body.addln(fieldName + " = $1;"); body.end(); MethodSignature sig = new MethodSignature(void.class, methodName, new Class[] { propertyType }, null); op.addMethod(Modifier.PUBLIC, sig, body.toString(), location); }
private void addMutator(EnhancementOperation op, String propertyName, Class propertyType, String fieldName, boolean persistent, Location location) { String methodName = EnhanceUtils.createMutatorMethodName(propertyName); BodyBuilder body = new BodyBuilder(); body.begin(); if (persistent) { body.add("org.apache.tapestry.Tapestry#fireObservedChange(this, "); body.addQuoted(propertyName); body.addln(", ($w) $1);"); } body.addln(fieldName + " = $1;"); body.end(); MethodSignature sig = new MethodSignature(void.class, methodName, new Class[] { propertyType }, null); op.addMethod(Modifier.PUBLIC, sig, body.toString(), location); }
public void injectMessages(EnhancementOperation op, Location location) { Defense.notNull(op, "op"); op.claimReadonlyProperty(_messagesProperty); String sourceField = op.addInjectedField( "_$componentMessagesSource", ComponentMessagesSource.class, _componentMessagesSource); op.addField("_$messages", Messages.class); BodyBuilder builder = new BodyBuilder(); builder.begin(); builder.addln("if (_$messages == null)"); builder.addln(" _$messages = {0}.getMessages(this);", sourceField); builder.addln("return _$messages;"); builder.end(); op.addMethod(Modifier.PUBLIC, _methodSignature, builder.toString(), location); }