You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2011/04/30 00:53:39 UTC

svn commit: r1097981 - in /tapestry/tapestry5/trunk: tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/ tapestry-core/src/main/java/org/apache/tapestry5/services/ tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/

Author: hlship
Date: Fri Apr 29 22:53:38 2011
New Revision: 1097981

URL: http://svn.apache.org/viewvc?rev=1097981&view=rev
Log:
TAP5-853: Initial work on converting component class transformation to work on top of Plastic

Added:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BridgeClassTransformation.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/CCTWToCCTW2Coercion.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker2.java
Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodAdvice.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodInvocation.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentValueProvider.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/MethodAccess.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformField.java
    tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/FieldValueConduit.java

Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BridgeClassTransformation.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BridgeClassTransformation.java?rev=1097981&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BridgeClassTransformation.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/BridgeClassTransformation.java Fri Apr 29 22:53:38 2011
@@ -0,0 +1,569 @@
+// Copyright 2011 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.internal.transform;
+
+import java.lang.annotation.Annotation;
+import java.util.List;
+
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.func.F;
+import org.apache.tapestry5.func.Mapper;
+import org.apache.tapestry5.func.Predicate;
+import org.apache.tapestry5.internal.plastic.PlasticInternalUtils;
+import org.apache.tapestry5.ioc.internal.util.InternalUtils;
+import org.apache.tapestry5.ioc.services.FieldValueConduit;
+import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.plastic.ComputedValue;
+import org.apache.tapestry5.plastic.FieldConduit;
+import org.apache.tapestry5.plastic.FieldHandle;
+import org.apache.tapestry5.plastic.InstanceContext;
+import org.apache.tapestry5.plastic.MethodAdvice;
+import org.apache.tapestry5.plastic.MethodDescription;
+import org.apache.tapestry5.plastic.MethodHandle;
+import org.apache.tapestry5.plastic.MethodInvocation;
+import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.plastic.PlasticField;
+import org.apache.tapestry5.plastic.PlasticMethod;
+import org.apache.tapestry5.plastic.PlasticUtils;
+import org.apache.tapestry5.runtime.Component;
+import org.apache.tapestry5.runtime.ComponentEvent;
+import org.apache.tapestry5.services.ClassTransformation;
+import org.apache.tapestry5.services.ComponentEventHandler;
+import org.apache.tapestry5.services.ComponentInstanceOperation;
+import org.apache.tapestry5.services.ComponentMethodAdvice;
+import org.apache.tapestry5.services.ComponentMethodInvocation;
+import org.apache.tapestry5.services.ComponentValueProvider;
+import org.apache.tapestry5.services.FieldAccess;
+import org.apache.tapestry5.services.MethodAccess;
+import org.apache.tapestry5.services.MethodInvocationResult;
+import org.apache.tapestry5.services.TransformConstants;
+import org.apache.tapestry5.services.TransformField;
+import org.apache.tapestry5.services.TransformMethod;
+import org.apache.tapestry5.services.TransformMethodSignature;
+import org.slf4j.Logger;
+
+/**
+ * A re-implementation of {@link ClassTransformation} around an instance of {@link PlasticClass}, acting as a bridge
+ * for code written against the 5.2 and earlier APIs to work with the 5.3 API.
+ * 
+ * @since 5.3.0
+ */
+@SuppressWarnings("deprecation")
+public class BridgeClassTransformation implements ClassTransformation
+{
+    private final PlasticClass plasticClass;
+
+    private final MutableComponentModel model;
+
+    private static <T> ComputedValue<T> toComputedValue(final ComponentValueProvider<T> provider)
+    {
+        return new ComputedValue<T>()
+        {
+            public T get(InstanceContext context)
+            {
+                ComponentResources resources = context.get(ComponentResources.class);
+
+                return provider.get(resources);
+            }
+        };
+    }
+
+    private static class BridgeTransformField implements TransformField
+    {
+        private final PlasticField plasticField;
+
+        public BridgeTransformField(PlasticField plasticField)
+        {
+            this.plasticField = plasticField;
+        }
+
+        public int compareTo(TransformField o)
+        {
+            throw new IllegalStateException("compareTo() not yet implemented.");
+        }
+
+        public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+        {
+            return plasticField.getAnnotation(annotationClass);
+        }
+
+        public String getName()
+        {
+            return plasticField.getName();
+        }
+
+        public String getType()
+        {
+            return plasticField.getTypeName();
+        }
+
+        public String getSignature()
+        {
+            throw new IllegalStateException("getSignature() not yet implemented.");
+        }
+
+        public void claim(Object tag)
+        {
+            plasticField.claim(tag);
+        }
+
+        public void replaceAccess(final ComponentValueProvider<FieldValueConduit> conduitProvider)
+        {
+            throw new IllegalStateException("replaceAccess() not yet implemented.");
+        }
+
+        public void replaceAccess(TransformField conduitField)
+        {
+            throw new IllegalStateException("replaceAccess() not yet implemented.");
+        }
+
+        public void replaceAccess(final FieldValueConduit conduit)
+        {
+            plasticField.setConduit(new FieldConduit()
+            {
+                public Object get(InstanceContext context)
+                {
+                    return conduit.get();
+                }
+
+                public void set(InstanceContext context, Object newValue)
+                {
+                    conduit.set(newValue);
+                }
+            });
+        }
+
+        public int getModifiers()
+        {
+            throw new IllegalStateException("getModifiers() not yet implemented.");
+        }
+
+        public void inject(Object value)
+        {
+            plasticField.inject(value);
+        }
+
+        public <T> void injectIndirect(ComponentValueProvider<T> provider)
+        {
+            plasticField.injectComputed(toComputedValue(provider));
+        }
+
+        public FieldAccess getAccess()
+        {
+            final FieldHandle handle = plasticField.getHandle();
+
+            return new FieldAccess()
+            {
+
+                public void write(Object instance, Object value)
+                {
+                    handle.set(instance, value);
+                }
+
+                public Object read(Object instance)
+                {
+                    return handle.get(instance);
+                }
+            };
+        }
+    }
+
+    private static Mapper<PlasticField, TransformField> TO_TRANSFORM_FIELD = new Mapper<PlasticField, TransformField>()
+    {
+        public TransformField map(PlasticField element)
+        {
+            return new BridgeTransformField(element);
+        }
+    };
+
+    private static class BridgeTransformMethod implements TransformMethod
+    {
+        private final PlasticMethod plasticMethod;
+
+        public BridgeTransformMethod(PlasticMethod plasticMethod)
+        {
+            this.plasticMethod = plasticMethod;
+        }
+
+        public int compareTo(TransformMethod o)
+        {
+            throw new IllegalStateException("compareTo() not yet implemented.");
+        }
+
+        public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+        {
+            return plasticMethod.getAnnotation(annotationClass);
+        }
+
+        public TransformMethodSignature getSignature()
+        {
+            throw new IllegalStateException("getSignature() not yet implemented.");
+        }
+
+        public String getName()
+        {
+            return plasticMethod.getDescription().methodName;
+        }
+
+        public MethodAccess getAccess()
+        {
+            final MethodHandle handle = plasticMethod.getHandle();
+
+            return new MethodAccess()
+            {
+                public MethodInvocationResult invoke(Object target, Object... arguments)
+                {
+                    final org.apache.tapestry5.plastic.MethodInvocationResult plasticResult = handle.invoke(target,
+                            arguments);
+
+                    return new MethodInvocationResult()
+                    {
+                        public void rethrow()
+                        {
+                            plasticResult.rethrow();
+                        }
+
+                        public boolean isFail()
+                        {
+                            return plasticResult.didThrowCheckedException();
+                        }
+
+                        public <T extends Throwable> T getThrown(Class<T> throwableClass)
+                        {
+                            return plasticResult.getCheckedException(throwableClass);
+                        }
+
+                        public Object getReturnValue()
+                        {
+                            return plasticResult.getReturnValue();
+                        }
+                    };
+                }
+            };
+        }
+
+        public void addAdvice(final ComponentMethodAdvice advice)
+        {
+            MethodAdvice plasticAdvice = new MethodAdvice()
+            {
+                public void advise(final MethodInvocation invocation)
+                {
+                    advice.advise(new ComponentMethodInvocation()
+                    {
+                        public ComponentResources getComponentResources()
+                        {
+                            return invocation.getInstanceContext().get(ComponentResources.class);
+                        }
+
+                        public void rethrow()
+                        {
+                            invocation.rethrow();
+                        }
+
+                        public void proceed()
+                        {
+                            invocation.proceed();
+                        }
+
+                        public void overrideThrown(Exception thrown)
+                        {
+                            invocation.setCheckedException(thrown);
+                        }
+
+                        public void overrideResult(Object newResult)
+                        {
+                            invocation.setReturnValue(newResult);
+                        }
+
+                        public void override(int index, Object newParameter)
+                        {
+                            invocation.setParameter(index, newParameter);
+                        }
+
+                        public boolean isFail()
+                        {
+                            return invocation.didThrowCheckedException();
+                        }
+
+                        public <T extends Throwable> T getThrown(Class<T> throwableClass)
+                        {
+                            return invocation.getCheckedException(throwableClass);
+                        }
+
+                        public Class getResultType()
+                        {
+                            return invocation.getReturnType();
+                        }
+
+                        public Object getResult()
+                        {
+                            return invocation.getReturnValue();
+                        }
+
+                        public Class getParameterType(int index)
+                        {
+                            return invocation.getParameterType(index);
+                        }
+
+                        public int getParameterCount()
+                        {
+                            return invocation.getParameterCount();
+                        }
+
+                        public Object getParameter(int index)
+                        {
+                            return invocation.getParameter(index);
+                        }
+
+                        public String getMethodName()
+                        {
+                            return invocation.getMethodName();
+                        }
+
+                        public <T extends Annotation> T getMethodAnnotation(Class<T> annotationClass)
+                        {
+                            return invocation.getAnnotation(annotationClass);
+                        }
+
+                        public Component getInstance()
+                        {
+                            return (Component) invocation.getInstance();
+                        }
+                    });
+                }
+            };
+
+            plasticMethod.addAdvice(plasticAdvice);
+        }
+
+        public void addOperationBefore(final ComponentInstanceOperation operation)
+        {
+            addAdvice(new ComponentMethodAdvice()
+            {
+                public void advise(ComponentMethodInvocation invocation)
+                {
+                    operation.invoke(invocation.getInstance());
+
+                    invocation.proceed();
+                }
+            });
+        }
+
+        public void addOperationAfter(final ComponentInstanceOperation operation)
+        {
+            addAdvice(new ComponentMethodAdvice()
+            {
+                public void advise(ComponentMethodInvocation invocation)
+                {
+                    invocation.proceed();
+
+                    operation.invoke(invocation.getInstance());
+                }
+            });
+        }
+
+        public String getMethodIdentifier()
+        {
+            throw new IllegalStateException("getMethodIdentifer() not yet implemented");
+        }
+
+        public boolean isOverride()
+        {
+            throw new IllegalStateException("isOverride() not yet implemented");
+        }
+
+        public <A extends Annotation> A getParameterAnnotation(int index, Class<A> annotationType)
+        {
+            return plasticMethod.getParameters().get(index).getAnnotation(annotationType);
+        }
+
+    }
+
+    private static final Mapper<PlasticMethod, TransformMethod> TO_TRANSFORM_METHOD = new Mapper<PlasticMethod, TransformMethod>()
+    {
+        public TransformMethod map(PlasticMethod element)
+        {
+            return new BridgeTransformMethod(element);
+        }
+    };
+
+    public BridgeClassTransformation(PlasticClass plasticClass, MutableComponentModel model)
+    {
+        this.plasticClass = plasticClass;
+        this.model = model;
+    }
+
+    public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
+    {
+        return plasticClass.getAnnotation(annotationClass);
+    }
+
+    public String getClassName()
+    {
+        return plasticClass.getClassName();
+    }
+
+    public String newMemberName(String suggested)
+    {
+        return newMemberName("_", PlasticInternalUtils.toPropertyName(suggested));
+    }
+
+    public String newMemberName(String prefix, String baseName)
+    {
+        return new StringBuilder(prefix).append(PlasticUtils.nextUID()).append(baseName).toString();
+    }
+
+    public List<TransformField> matchFieldsWithAnnotation(Class<? extends Annotation> annotationClass)
+    {
+        return F.flow(plasticClass.getFieldsWithAnnotation(annotationClass)).map(TO_TRANSFORM_FIELD).toList();
+    }
+
+    public List<TransformMethod> matchMethods(Predicate<TransformMethod> predicate)
+    {
+        return F.flow(plasticClass.getMethods()).map(TO_TRANSFORM_METHOD).filter(predicate).toList();
+    }
+
+    public List<TransformMethod> matchMethodsWithAnnotation(Class<? extends Annotation> annotationType)
+    {
+        return F.flow(plasticClass.getMethodsWithAnnotation(annotationType)).map(TO_TRANSFORM_METHOD).toList();
+    }
+
+    public List<TransformField> matchFields(Predicate<TransformField> predicate)
+    {
+        return F.flow(plasticClass.getUnclaimedFields()).map(TO_TRANSFORM_FIELD).filter(predicate).toList();
+    }
+
+    public TransformField getField(String fieldName)
+    {
+        throw new IllegalArgumentException("getField() not yet implemented.");
+    }
+
+    public List<TransformField> matchUnclaimedFields()
+    {
+        return F.flow(plasticClass.getUnclaimedFields()).map(TO_TRANSFORM_FIELD).toList();
+    }
+
+    public boolean isField(String fieldName)
+    {
+        throw new IllegalArgumentException("isField() not yet implemented.");
+    }
+
+    public TransformField createField(int modifiers, String type, String suggestedName)
+    {
+        // TODO: modifiers are ignored
+
+        PlasticField newField = plasticClass.introduceField(type, suggestedName);
+
+        return new BridgeTransformField(newField);
+    }
+
+    public String addInjectedField(Class type, String suggestedName, Object value)
+    {
+        // TODO: The injected field is not actually protected or shared
+
+        PlasticField field = plasticClass.introduceField(type, suggestedName).inject(value);
+
+        return field.getName();
+    }
+
+    public <T> TransformField addIndirectInjectedField(Class<T> type, String suggestedName,
+            ComponentValueProvider<T> provider)
+    {
+
+        PlasticField field = plasticClass.introduceField(type, suggestedName).injectComputed(toComputedValue(provider));
+
+        return new BridgeTransformField(field);
+    }
+
+    public void addImplementedInterface(Class interfaceClass)
+    {
+        plasticClass.introduceInterface(interfaceClass);
+    }
+
+    public Class toClass(String type)
+    {
+        throw new IllegalArgumentException("toClass() not yet implemented.");
+    }
+
+    public Logger getLogger()
+    {
+        return model.getLogger();
+    }
+
+    public boolean isRootTransformation()
+    {
+        throw new IllegalArgumentException("isRootTransformation() not yet implemented.");
+    }
+
+    public TransformMethod getOrCreateMethod(TransformMethodSignature signature)
+    {
+        MethodDescription md = new MethodDescription(signature.getModifiers(), signature.getReturnType(),
+                signature.getMethodName(), signature.getParameterTypes(), signature.getExceptionTypes());
+
+        PlasticMethod plasticMethod = plasticClass.introduceMethod(md);
+
+        return new BridgeTransformMethod(plasticMethod);
+    }
+
+    public boolean isDeclaredMethod(TransformMethodSignature signature)
+    {
+        throw new IllegalArgumentException("isDeclaredMethod() not yet implemented.");
+    }
+
+    // TODO: This is very handy, there should be an additional object passed around that encapsulates
+    // this kind of logic.
+
+    public void addComponentEventHandler(String eventType, int minContextValues, String methodDescription,
+            ComponentEventHandler handler)
+    {
+        assert InternalUtils.isNonBlank(eventType);
+        assert InternalUtils.isNonBlank(methodDescription);
+        assert handler != null;
+
+        model.addEventHandler(eventType);
+
+        getOrCreateMethod(TransformConstants.DISPATCH_COMPONENT_EVENT).addAdvice(
+                createEventHandlerAdvice(eventType, minContextValues, methodDescription, handler));
+
+    }
+
+    private static ComponentMethodAdvice createEventHandlerAdvice(final String eventType, final int minContextValues,
+            final String methodDescription, final ComponentEventHandler handler)
+    {
+        return new ComponentMethodAdvice()
+        {
+            public void advise(ComponentMethodInvocation invocation)
+            {
+                // Invoke the super-class implementation first.
+
+                invocation.proceed();
+
+                ComponentEvent event = (ComponentEvent) invocation.getParameter(0);
+
+                if (!event.isAborted() && event.matches(eventType, "", minContextValues))
+                {
+                    event.setMethodDescription(methodDescription);
+
+                    handler.handleEvent(invocation.getInstance(), event);
+
+                    // Ensure that the caller knows that some event handler method
+                    // was invoked.
+                    invocation.overrideResult(true);
+                }
+            }
+        };
+    }
+
+}

Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/CCTWToCCTW2Coercion.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/CCTWToCCTW2Coercion.java?rev=1097981&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/CCTWToCCTW2Coercion.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/CCTWToCCTW2Coercion.java Fri Apr 29 22:53:38 2011
@@ -0,0 +1,43 @@
+// Copyright 2011 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.internal.transform;
+
+import org.apache.tapestry5.ioc.services.Coercion;
+import org.apache.tapestry5.ioc.services.CoercionTuple;
+import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.services.ClassTransformation;
+import org.apache.tapestry5.services.ComponentClassTransformWorker;
+import org.apache.tapestry5.services.ComponentClassTransformWorker2;
+
+@SuppressWarnings("deprecation")
+public class CCTWToCCTW2Coercion implements Coercion<ComponentClassTransformWorker, ComponentClassTransformWorker2>
+{
+    public ComponentClassTransformWorker2 coerce(final ComponentClassTransformWorker oldStyleWorker)
+    {
+        return new ComponentClassTransformWorker2()
+        {
+            public void transform(PlasticClass plasticClass, MutableComponentModel model)
+            {
+                ClassTransformation ct = new BridgeClassTransformation(plasticClass, model);
+
+                oldStyleWorker.transform(ct, model);
+            }
+        };
+    }
+
+    public static final CoercionTuple<ComponentClassTransformWorker, ComponentClassTransformWorker2> TUPLE = new CoercionTuple<ComponentClassTransformWorker, ComponentClassTransformWorker2>(
+            ComponentClassTransformWorker.class, ComponentClassTransformWorker2.class, new CCTWToCCTW2Coercion());
+}

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java?rev=1097981&r1=1097980&r2=1097981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ClassTransformation.java Fri Apr 29 22:53:38 2011
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008, 2010 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2010, 2011 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,6 +21,7 @@ import org.apache.tapestry5.ComponentRes
 import org.apache.tapestry5.func.Predicate;
 import org.apache.tapestry5.ioc.AnnotationProvider;
 import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.plastic.PlasticClass;
 import org.apache.tapestry5.runtime.Component;
 import org.apache.tapestry5.runtime.Event;
 import org.slf4j.Logger;
@@ -55,6 +56,8 @@ import org.slf4j.Logger;
  * 
  * @see org.apache.tapestry5.services.TapestryModule#contributeComponentClassTransformWorker(org.apache.tapestry5.ioc.OrderedConfiguration,
  *      org.apache.tapestry5.ioc.ObjectLocator, InjectionProvider, ComponentClassResolver)
+ * @deprecated In 5.3
+ * @see {@link PlasticClass}
  */
 public interface ClassTransformation extends AnnotationProvider
 {

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker.java?rev=1097981&r1=1097980&r2=1097981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker.java Fri Apr 29 22:53:38 2011
@@ -1,10 +1,10 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2011 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
-//     http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
 // distributed under the License is distributed on an "AS IS" BASIS,
@@ -18,14 +18,18 @@ import org.apache.tapestry5.model.Mutabl
 
 /**
  * Interface for a set of objects that can perform component class transformations. Implementations should be
- * multithreaded, ideally they should be stateless (all necessary state can be stored in the {@link
- * org.apache.tapestry5.services.ClassTransformation}).
+ * multithreaded, ideally they should be stateless (all necessary state can be stored in the
+ * {@link org.apache.tapestry5.services.ClassTransformation}).
+ * 
+ * @deprecated In 5.3
+ * @see {@link ComponentClassTransformWorker2}
  */
 public interface ComponentClassTransformWorker
 {
     /**
-     * Invoked to perform a transformation on an as-yet unloaded component class, represented by the {@link
-     * ClassTransformation} instance. In some cases, the worker may make changes to the component model -- for example,
+     * Invoked to perform a transformation on an as-yet unloaded component class, represented by the
+     * {@link ClassTransformation} instance. In some cases, the worker may make changes to the component model -- for
+     * example,
      * a worker that deals with parameters may update the model to reflect those parameters.
      */
     void transform(ClassTransformation transformation, MutableComponentModel model);

Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker2.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker2.java?rev=1097981&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker2.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentClassTransformWorker2.java Fri Apr 29 22:53:38 2011
@@ -0,0 +1,37 @@
+// Copyright 2011 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.services;
+
+import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
+import org.apache.tapestry5.ioc.services.ChainBuilder;
+import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.plastic.PlasticClass;
+
+/**
+ * Interface for a set of objects that can perform transformation of component classes. Implementations should
+ * be thread safe and ideally stateless (all necessary state can be stored inside the {@link PlasticClass}).
+ * <p>
+ * The ComponentClassTransformWorker service uses an ordered configuration of these works as a {@linkplain ChainBuilder
+ * chain of command}. For compatibility with the code compiled for Tapestry 5.2, contributions of type
+ * {@link ComponentClassTransformWorker} are type coerced into this type automatically.
+ * 
+ * @since 5.3
+ * @see {@link PlasticClass}
+ */
+@UsesOrderedConfiguration(ComponentClassTransformWorker2.class)
+public interface ComponentClassTransformWorker2
+{
+    void transform(PlasticClass plasticClass, MutableComponentModel model);
+}

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodAdvice.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodAdvice.java?rev=1097981&r1=1097980&r2=1097981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodAdvice.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodAdvice.java Fri Apr 29 22:53:38 2011
@@ -1,4 +1,4 @@
-// Copyright 2008, 2010 The Apache Software Foundation
+// Copyright 2008, 2010, 2011 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -14,6 +14,10 @@
 
 package org.apache.tapestry5.services;
 
+import org.apache.tapestry5.plastic.MethodAdvice;
+import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.plastic.PlasticMethod;
+
 /**
  * An object that receives control around an "advised" method of a component. The advise can query or even replace
  * method parameters. After invoking {@link org.apache.tapestry5.services.ComponentMethodInvocation#proceed()}, the
@@ -21,6 +25,8 @@ package org.apache.tapestry5.services;
  * 
  * @see TransformMethod#addAdvice(ComponentMethodAdvice)
  * @see ComponentInstanceOperation
+ * @deprecated Deprecated in 5.3
+ * @see {@link PlasticClass}, {@link PlasticMethod}, {@link MethodAdvice}
  */
 public interface ComponentMethodAdvice
 {

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodInvocation.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodInvocation.java?rev=1097981&r1=1097980&r2=1097981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodInvocation.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentMethodInvocation.java Fri Apr 29 22:53:38 2011
@@ -1,4 +1,4 @@
-// Copyright 2008 The Apache Software Foundation
+// Copyright 2008, 2011 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -15,6 +15,10 @@
 package org.apache.tapestry5.services;
 
 import org.apache.tapestry5.ioc.Invocation;
+import org.apache.tapestry5.plastic.MethodAdvice;
+import org.apache.tapestry5.plastic.MethodInvocation;
+import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.plastic.PlasticMethod;
 import org.apache.tapestry5.runtime.Component;
 import org.apache.tapestry5.runtime.ComponentResourcesAware;
 
@@ -22,6 +26,9 @@ import org.apache.tapestry5.runtime.Comp
  * Encapsulates the parameters, thrown exceptions, and result of a method invocation, allowing a
  * {@link org.apache.tapestry5.services.ComponentMethodAdvice} to encapsulate the invocation. Extends Invocation with
  * the {@link org.apache.tapestry5.ComponentResources} of the component for which a method is being advised.
+ * 
+ * @deprecated Deprecated in 5.3
+ * @see {@link PlasticClass}, {@link PlasticMethod}, {@link MethodAdvice}, {@link MethodInvocation}
  */
 public interface ComponentMethodInvocation extends Invocation, ComponentResourcesAware
 {

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentValueProvider.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentValueProvider.java?rev=1097981&r1=1097980&r2=1097981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentValueProvider.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ComponentValueProvider.java Fri Apr 29 22:53:38 2011
@@ -1,4 +1,4 @@
-// Copyright 2010 The Apache Software Foundation
+// Copyright 2010, 2011 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -15,17 +15,20 @@
 package org.apache.tapestry5.services;
 
 import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.plastic.ComputedValue;
+import org.apache.tapestry5.plastic.PlasticField;
 
 /**
  * An object used to provide a value of a specific type to a component (represented by an
  * instance of {@link ComponentResources}). The provider will create and return the value
  * (some providers may be smart enough to cache a value, but should be implemented in
- * a thread-safe manner). Often the provider is an inner class of a
- * {@link ComponentClassTransformWorker}.
+ * a thread-safe manner). Often the provider is an inner class of a {@link ComponentClassTransformWorker}.
  * 
  * @param <T>
  *            type of object provided
  * @since 5.2.0
+ * @deprecated Deprecated in 5.3.0, using Plastic equivalents
+ * @see {@link PlasticField}, {@link ComputedValue}
  */
 public interface ComponentValueProvider<T>
 {

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/MethodAccess.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/MethodAccess.java?rev=1097981&r1=1097980&r2=1097981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/MethodAccess.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/MethodAccess.java Fri Apr 29 22:53:38 2011
@@ -1,4 +1,4 @@
-// Copyright 2010 The Apache Software Foundation
+// Copyright 2010, 2011 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -14,6 +14,10 @@
 
 package org.apache.tapestry5.services;
 
+import org.apache.tapestry5.plastic.MethodHandle;
+import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.plastic.PlasticMethod;
+
 /**
  * Represents a bridge to an object method, when that method may not be public. A MethodAccess object
  * encapsulates the approach for invoking the method and capturing the result (either the return value,
@@ -21,6 +25,8 @@ package org.apache.tapestry5.services;
  * 
  * @since 5.2.0
  * @see TransformMethod#getAccess()
+ * @deprecated Deprecated in 5.3.0
+ * @see {@link PlasticClass}, {@link {@link PlasticMethod}, {@link MethodHandle}
  */
 public interface MethodAccess
 {

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformField.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformField.java?rev=1097981&r1=1097980&r2=1097981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformField.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformField.java Fri Apr 29 22:53:38 2011
@@ -41,7 +41,7 @@ public interface TransformField extends 
     String getType();
 
     /**
-     * Returns the fields fully qualified generic type, or null if not defined.
+     * Returns the field's fully qualified generic type, or null if not defined.
      * (in Java source syntax, i.e., "()Ljava/util/List<Ljava/lang/String;>;"
      *
      * @since 5.3.0

Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/FieldValueConduit.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/FieldValueConduit.java?rev=1097981&r1=1097980&r2=1097981&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/FieldValueConduit.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/FieldValueConduit.java Fri Apr 29 22:53:38 2011
@@ -1,4 +1,4 @@
-// Copyright 2010 The Apache Software Foundation
+// Copyright 2010, 2011 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -14,11 +14,15 @@
 
 package org.apache.tapestry5.ioc.services;
 
+import org.apache.tapestry5.plastic.FieldConduit;
+import org.apache.tapestry5.plastic.PlasticField;
 
 /**
  * Used as a replacement for a field.
  * 
  * @since 5.2.0
+ * @deprecated Deprecated in 5.3.0, using Plastic equivalents
+ * @see {@link PlasticField}, {@link FieldConduit}
  */
 public interface FieldValueConduit
 {