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());
}