Author: hlship
Date: Thu Mar  4 02:11:37 2010
New Revision: 918816

URL: http://svn.apache.org/viewvc?rev=918816&view=rev
Log:
TAP5-993: Only create a static method access method for private methods

Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TransformField.java
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/InternalClassTransformationImplTest.java
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/pages/MethodAccessSubject.java
    
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/ClassFabUtils.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java?rev=918816&r1=918815&r2=918816&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java
 Thu Mar  4 02:11:37 2010
@@ -196,18 +196,18 @@
 
         private MethodAccess createMethodAccess()
         {
-            if (isPublic())
-                return createPublicMethodAccess();
+            if (isPrivate())
+                return createPrivateMethodAccess();
 
-            return createNonPublicMethodAccess();
+            return createNonPrivateMethodAccess();
         }
 
-        private boolean isPublic()
+        private boolean isPrivate()
         {
-            return Modifier.isPublic(sig.getModifiers());
+            return Modifier.isPrivate(sig.getModifiers());
         }
 
-        private MethodAccess createPublicMethodAccess()
+        private MethodAccess createNonPrivateMethodAccess()
         {
             // For a public method, given the instance, we can just invoke the 
method directly
             // from the MethodAccess object.
@@ -271,8 +271,12 @@
 
         private MethodAccess instantiateMethodAccessFromBody(String body)
         {
-            ClassFab cf = 
classFactory.newClass(ClassFabUtils.generateClassName(MethodAccess.class),
-                    AbstractMethodAccess.class);
+            // The access object is created in the same package as the 
component, so that it can access
+            // protected and package private methods.
+            String accessClassName = String.format("%s$MethodAccess_%s_%s", 
getClassName(), sig.getMethodName(),
+                    ClassFabUtils.nextUID());
+
+            ClassFab cf = classFactory.newClass(accessClassName, 
AbstractMethodAccess.class);
 
             cf.addMethod(Modifier.PUBLIC, INVOKE_SIGNATURE, body);
 
@@ -293,7 +297,7 @@
             }
         }
 
-        private MethodAccess createNonPublicMethodAccess()
+        private MethodAccess createPrivateMethodAccess()
         {
             // As with Java inner classes, we have to create a static bridge 
method.
 
@@ -410,8 +414,6 @@
 
         private final String name, type;
 
-        private final boolean primitive;
-
         private boolean added;
 
         private List<Annotation> annotations;
@@ -437,8 +439,6 @@
             {
                 throw new RuntimeException(ex);
             }
-
-            primitive = ClassFabUtils.isPrimitiveType(type);
         }
 
         @Override
@@ -463,11 +463,6 @@
             return type;
         }
 
-        public boolean isPrimitive()
-        {
-            return primitive;
-        }
-
         public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
         {
             failIfFrozen();

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=918816&r1=918815&r2=918816&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
 Thu Mar  4 02:11:37 2010
@@ -32,19 +32,13 @@
     String getName();
 
     /**
-     * Returns the field's type, either a primitive name
+     * Returns the field's type, either a primitive name (such as "int" or 
"boolean")
      * or a fully qualified class name, or an array type name
-     * (in Java source syntax).
+     * (in Java source syntax, i.e., "java.lang.String[]").
      */
     String getType();
 
     /**
-     * True if the field is a primitive type, not an object type.
-     * Array types are object types.
-     */
-    boolean isPrimitive();
-
-    /**
      * Claims the field so as to ensure that only a single annotation is 
applied to any single field.
      * When a transformation occurs (driven by a field annotation), the field 
is claimed (using the
      * annotation object as the tag). If a field has multiple conflicting 
annotations, this will be discovered when
@@ -83,7 +77,6 @@
      */
     void replaceAccess(FieldValueConduit conduit);
 
-
     /** Returns the modifiers for the field. */
     int getModifiers();
 

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/InternalClassTransformationImplTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/InternalClassTransformationImplTest.java?rev=918816&r1=918815&r2=918816&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/InternalClassTransformationImplTest.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/InternalClassTransformationImplTest.java
 Thu Mar  4 02:11:37 2010
@@ -19,8 +19,6 @@
 
 import java.lang.annotation.Documented;
 import java.lang.annotation.Target;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.net.URL;
 import java.net.URLClassLoader;
@@ -41,17 +39,14 @@
 import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.internal.model.MutableComponentModelImpl;
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
-import org.apache.tapestry5.internal.transform.FieldRemoval;
 import org.apache.tapestry5.internal.transform.InheritedAnnotation;
 import org.apache.tapestry5.internal.transform.TestPackageAwareLoader;
 import org.apache.tapestry5.internal.transform.pages.*;
-import org.apache.tapestry5.internal.util.Holder;
 import org.apache.tapestry5.ioc.internal.services.ClassFactoryClassPool;
 import org.apache.tapestry5.ioc.internal.services.ClassFactoryImpl;
 import org.apache.tapestry5.ioc.internal.services.CtClassSourceImpl;
 import org.apache.tapestry5.ioc.services.ClassFactory;
 import org.apache.tapestry5.ioc.services.PropertyAccess;
-import org.apache.tapestry5.ioc.util.BodyBuilder;
 import org.apache.tapestry5.model.MutableComponentModel;
 import org.apache.tapestry5.runtime.Component;
 import org.apache.tapestry5.runtime.ComponentResourcesAware;
@@ -534,7 +529,7 @@
     public static final TransformMethodSignature RUN = new 
TransformMethodSignature("run");
 
     @Test
-    public void access_to_public_void_no_args_method() throws Exception
+    public void access_to_protected_void_no_args_method() throws Exception
     {
         Object instance = transform(MethodAccessSubject.class, new 
ComponentClassTransformWorker()
         {
@@ -542,7 +537,8 @@
             {
                 transformation.addImplementedInterface(Runnable.class);
 
-                TransformMethodSignature targetMethodSignature = new 
TransformMethodSignature("publicVoidNoArgs");
+                TransformMethodSignature targetMethodSignature = new 
TransformMethodSignature(Modifier.PROTECTED,
+                        "void", "protectedVoidNoArgs", null, null);
                 TransformMethod pvna = 
transformation.getOrCreateMethod(targetMethodSignature);
 
                 final MethodAccess pvnaAccess = pvna.getAccess();
@@ -565,7 +561,7 @@
 
         r.run();
 
-        assertEquals(access.get(r, "marker"), "publicVoidNoArgs");
+        assertEquals(access.get(r, "marker"), "protectedVoidNoArgs");
     }
 
     @Test
@@ -1038,8 +1034,7 @@
 
         verify();
     }
-   
- 
+
     private Component instantiate(Class<?> expectedClass, 
InternalClassTransformation ct,
             InternalComponentResources resources) throws Exception
     {
@@ -1048,8 +1043,6 @@
         return ins.newInstance(resources);
     }
 
-
-  
     @Test
     public void get_method_identifier() throws Exception
     {

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/pages/MethodAccessSubject.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/pages/MethodAccessSubject.java?rev=918816&r1=918815&r2=918816&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/pages/MethodAccessSubject.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/transform/pages/MethodAccessSubject.java
 Thu Mar  4 02:11:37 2010
@@ -31,9 +31,9 @@
         return marker;
     }
 
-    public void publicVoidNoArgs()
+    protected void protectedVoidNoArgs()
     {
-        marker = "publicVoidNoArgs";
+        marker = "protectedVoidNoArgs";
     }
 
     public void publicVoidNoArgsFail()

Modified: 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/ClassFabUtils.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/ClassFabUtils.java?rev=918816&r1=918815&r2=918816&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/ClassFabUtils.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/ClassFabUtils.java
 Thu Mar  4 02:11:37 2010
@@ -30,7 +30,7 @@
 {
     private static final AtomicLong UID_GENERATOR = new 
AtomicLong(System.currentTimeMillis());
 
-    private static String nextUID()
+    public static String nextUID()
     {
         return Long.toHexString(UID_GENERATOR.getAndIncrement());
     }


Reply via email to