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 2006/04/23 08:55:56 UTC

svn commit: r396226 - in /tapestry/tapestry5/tapestry-core/trunk/src: main/aspect/org/apache/tapestry/internal/aspects/ main/java/org/apache/tapestry/internal/transform/ main/java/org/apache/tapestry/test/ main/java/org/apache/tapestry/util/ test/java/...

Author: hlship
Date: Sat Apr 22 23:55:55 2006
New Revision: 396226

URL: http://svn.apache.org/viewcvs?rev=396226&view=rev
Log:
More tweaks to the CheckNullParameters aspect support

Added:
    tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/CatchNullParameters.aj
    tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalCatchNullParameters.aj
      - copied, changed from r396187, tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalCatchNullParametersAspect.aj
    tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalUtilityChecks.aj
      - copied, changed from r396172, tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalUtilityAspect.aj
    tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/UtilityChecks.aj
Removed:
    tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/AbstractCatchNullParametersAspect.aj
    tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/AbstractUtilityAspect.aj
    tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalCatchNullParametersAspect.aj
    tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalUtilityAspect.aj
Modified:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ClassTransformerImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/InternalClassTransformationImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ReflectiveInstantiator.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/TestBase.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/util/Defense.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/util/IdAllocator.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/CatchNullParametersAspectTest.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/NullTarget.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/util/DefenseTest.java

Added: tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/CatchNullParameters.aj
URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/CatchNullParameters.aj?rev=396226&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/CatchNullParameters.aj (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/CatchNullParameters.aj Sat Apr 22 23:55:55 2006
@@ -0,0 +1,78 @@
+package org.apache.tapestry.internal.aspects;
+
+import org.apache.tapestry.internal.annotations.SuppressNullCheck;
+
+/**
+ * Adds code to targeted methods and constructors that prevents null values from being passed in as
+ * parameters.
+ * 
+ * @author Howard M. Lewis Ship
+ */
+@SuppressNullCheck
+public abstract aspect CatchNullParameters
+{
+    /**
+     * Overridden in concrete aspects to identify which classes are affected (typically, all within
+     * a particular package).
+     */
+    abstract pointcut targetClasses();
+
+    pointcut typeNotMarkedAsSuppressed() : 
+        !within(@SuppressNullCheck Object+);
+
+    /** Look for methods and constructors that do NOT have the SuppressNullCheck annotation. */
+    pointcut executionNotSuppressed() :  
+        execution(!@SuppressNullCheck !private * *(..)) ||
+        execution(!@SuppressNullCheck !private new(..));
+
+    /**
+     * Exclude methods (and constructors) with no parameters. Also, exclude equals() since it has to
+     * accept null (and we don't want to force you to put the
+     * 
+     * @SupportNullCheck annotation on every class that overrides equals().
+     */
+    pointcut excludedMethods() :
+         execution(boolean equals(Object));
+
+    /**
+     * Find methods to check, within the set of target classes, where neither the entire class, nor
+     * the specific method, have the
+     * 
+     * @SuppressNullCheck annotation, and limit to only applicable methods.
+     */
+    pointcut methodsToCheck() :
+        targetClasses() &&
+        typeNotMarkedAsSuppressed() &&
+        executionNotSuppressed() &&
+        !excludedMethods();
+
+    /**
+     * Selects each parameter. The specific useage here ensures that no-argument methods and
+     * constructors are skipped. Still trying to limit this so that primitive arguments aren't
+     * checked (currently, AspectJ is converting primitives to wrapper types and passing them into
+     * the advice method).
+     */
+    pointcut parametersToCheck(Object argumentValue) :
+        args(.., argumentValue);
+
+    /**
+     * Here's where the real work gets done. I think there may be a way to do this more efficiently
+     * where much more static logic is injected, triggered by arguments.
+     */
+    before(Object argumentValue) : methodsToCheck() && parametersToCheck(argumentValue) 
+    {
+        if (argumentValue == null)
+        {
+            // The method signature could provide the parameterName (which would be awesome),
+            // but we need to know the parameter index.
+
+            String message = String.format(
+                    "Parameter passed to method %s (at %s) was null.",
+                    thisJoinPoint.getSignature().toString(),
+                    thisJoinPoint.getSourceLocation());
+
+            throw new IllegalArgumentException(message);
+
+        }
+    }
+}

Copied: tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalCatchNullParameters.aj (from r396187, tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalCatchNullParametersAspect.aj)
URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalCatchNullParameters.aj?p2=tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalCatchNullParameters.aj&p1=tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalCatchNullParametersAspect.aj&r1=396187&r2=396226&rev=396226&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalCatchNullParametersAspect.aj (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalCatchNullParameters.aj Sat Apr 22 23:55:55 2006
@@ -1,14 +1,11 @@
 package org.apache.tapestry.internal.aspects;
 
-import org.apache.tapestry.internal.annotations.SuppressNullCheck;
-
 /**
  * Targets null checks to all the org.apache.tapestry classes.
  * 
  * @author Howard M. Lewis Ship
  */
-@SuppressNullCheck
-public aspect InternalCatchNullParametersAspect extends AbstractCatchNullParametersAspect
+public aspect InternalCatchNullParameters extends CatchNullParameters
 {
     pointcut targetClasses()  :
         within(org.apache.tapestry..*);

Copied: tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalUtilityChecks.aj (from r396172, tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalUtilityAspect.aj)
URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalUtilityChecks.aj?p2=tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalUtilityChecks.aj&p1=tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalUtilityAspect.aj&r1=396172&r2=396226&rev=396226&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalUtilityAspect.aj (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalUtilityChecks.aj Sat Apr 22 23:55:55 2006
@@ -1,11 +1,11 @@
 package org.apache.tapestry.internal.aspects;
 
 /**
- * Targets {@link AbstractUtilityAspect} at all the visible classes within org.apache.tapestry.
+ * Targets {@link UtilityChecks} at all the visible classes within org.apache.tapestry.
  * 
  * @author Howard M. Lewis Ship
  */
-public aspect InternalUtilityAspect extends AbstractUtilityAspect
+public aspect InternalUtilityChecks extends UtilityChecks
 {
     pointcut targetClasses()  :
         within(org.apache.tapestry..*);

Added: tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/UtilityChecks.aj
URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/UtilityChecks.aj?rev=396226&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/UtilityChecks.aj (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/UtilityChecks.aj Sat Apr 22 23:55:55 2006
@@ -0,0 +1,42 @@
+package org.apache.tapestry.internal.aspects;
+
+import org.apache.tapestry.internal.annotations.Utility;
+
+/**
+ * Abstract aspect that implements the rules for the {@link Utility} annotation.
+ * 
+ * @author Howard M. Lewis Ship
+ */
+public abstract aspect UtilityChecks
+{
+    /**
+     * Overridden in concrete aspects to identify which classes are affected (typically, all within
+     * a particular package).
+     */
+    abstract pointcut targetClasses();
+
+    pointcut markedClasses(): @within(Utility) && targetClasses();
+
+    pointcut instanceMethods():
+        markedClasses() && execution(!static * *(..));
+
+    /** Matches anything but the default, no arguments constructor. */
+    pointcut constructors(): markedClasses() && execution(new(*));
+
+    declare error : instanceMethods() :
+        "Utility classes may not have instance methods.";
+
+    declare error : constructors() :
+        "Utility classes may not be instantiated, and are not allowed to declare constructors.";
+
+    before() : markedClasses() && execution(new())
+    {
+        String message = String
+                .format(
+                        "Class %s has been marked as a utility class (with the @Utility annotation) and can not be instantiated.",
+                        thisJoinPoint.getThis().getClass().getName());
+
+        throw new RuntimeException(message);
+    }
+
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ClassTransformerImpl.java
URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ClassTransformerImpl.java?rev=396226&r1=396225&r2=396226&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ClassTransformerImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ClassTransformerImpl.java Sat Apr 22 23:55:55 2006
@@ -24,7 +24,6 @@
 import org.apache.tapestry.transform.ClassTransformWorker;
 
 import static org.apache.tapestry.util.CollectionFactory.newMap;
-import static org.apache.tapestry.util.Defense.notNull;
 
 /**
  * Implementation of {@link org.apache.tapestry.internal.transform.ClassTransformer}.
@@ -64,7 +63,7 @@
 
     public Instantiator createInstantiator(Class componentClass)
     {
-        String className = notNull(componentClass, "componentClass").getName();
+        String className = componentClass.getName();
 
         InternalClassTransformation ct = _nameToClassTransformation.get(className);
 

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImpl.java
URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImpl.java?rev=396226&r1=396225&r2=396226&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImpl.java Sat Apr 22 23:55:55 2006
@@ -32,7 +32,6 @@
 
 import static org.apache.tapestry.util.CollectionFactory.newMap;
 import static org.apache.tapestry.util.CollectionFactory.newSet;
-import static org.apache.tapestry.util.Defense.notNull;
 
 /**
  * A wrapper around a Javassist class loader that allows certain classes to be modified as they are
@@ -71,7 +70,7 @@
 
     public ComponentInstantiatorSourceImpl(ClassLoader parent)
     {
-        _parent = notNull(parent, "parent");
+        _parent = parent;
     }
 
     public void initializeService()

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/InternalClassTransformationImpl.java
URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/InternalClassTransformationImpl.java?rev=396226&r1=396225&r2=396226&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/InternalClassTransformationImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/InternalClassTransformationImpl.java Sat Apr 22 23:55:55 2006
@@ -141,9 +141,6 @@
 
     public <T extends Annotation> T getFieldAnnotation(String fieldName, Class<T> annotationClass)
     {
-        notNull(fieldName, "fieldName");
-        notNull(annotationClass, "annotationClass");
-
         Object[] annotations = findFieldAnnotations(fieldName);
 
         return findAnnotationInList(annotationClass, annotations);
@@ -323,7 +320,7 @@
 
     public void addImplementedInterface(Class interfaceClass)
     {
-        String interfaceName = notNull(interfaceClass, "interfaceClass").getName();
+        String interfaceName = interfaceClass.getName();
 
         try
         {
@@ -431,7 +428,6 @@
     public void claimField(String fieldName, Object tag)
     {
         notBlank(fieldName, "fieldName");
-        notNull(tag, "tag");
 
         Object existing = _claimedFields.get(fieldName);
 
@@ -517,8 +513,6 @@
 
     public List<String> findFieldsWithAnnotation(Class<? extends Annotation> annotationClass)
     {
-        notNull(annotationClass, "annotationClass");
-
         List<String> result = newList();
 
         for (CtField field : _ctClass.getDeclaredFields())

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ReflectiveInstantiator.java
URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ReflectiveInstantiator.java?rev=396226&r1=396225&r2=396226&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ReflectiveInstantiator.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/transform/ReflectiveInstantiator.java Sat Apr 22 23:55:55 2006
@@ -19,8 +19,6 @@
 import org.apache.tapestry.ResourceAware;
 import org.apache.tapestry.internal.InternalComponentResources;
 
-import static org.apache.tapestry.util.Defense.notNull;
-
 /**
  * Implementation of {@link Instantiator} based on a class, a list of parameters to the class'
  * constructor, and a instance of {@link org.apache.tapestry.internal.InternalComponentResources}.
@@ -45,11 +43,9 @@
      */
     ReflectiveInstantiator(Class instanceClass, Object[] constructorParameters)
     {
-        _constructorParameters = notNull(constructorParameters, "constructorParameters");
+        _constructorParameters = constructorParameters;
 
-        _constructor = findConstructor(
-                notNull(instanceClass, "instanceClass"),
-                constructorParameters.length);
+        _constructor = findConstructor(instanceClass, constructorParameters.length);
 
     }
 

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/TestBase.java
URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/TestBase.java?rev=396226&r1=396225&r2=396226&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/TestBase.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/TestBase.java Sat Apr 22 23:55:55 2006
@@ -14,6 +14,7 @@
 
 package org.apache.tapestry.test;
 
+import org.apache.tapestry.internal.annotations.SuppressNullCheck;
 import org.easymock.EasyMock;
 import org.easymock.IMocksControl;
 import org.testng.annotations.Configuration;
@@ -83,6 +84,7 @@
      * @param returnValue
      *            value to be returned from the method call
      */
+    @SuppressNullCheck
     protected final void setReturnValue(Object returnValue)
     {
         expectLastCall().andReturn(returnValue);

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/util/Defense.java
URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/util/Defense.java?rev=396226&r1=396225&r2=396226&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/util/Defense.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/util/Defense.java Sat Apr 22 23:55:55 2006
@@ -22,12 +22,16 @@
  * 
  * @author Howard M. Lewis Ship
  */
-@Utility @SuppressNullCheck
+@Utility
+@SuppressNullCheck
 public final class Defense
 {
 
     /**
-     * Checks that a method parameter value is not null, and returns it.
+     * Checks that a method parameter value is not null, and returns it. This method is used in
+     * situations where some of the parameters to a method are allowed to be null and other's arent.
+     * In that situation, the method will be annotated with {@link SuppressNullCheck}, and the
+     * relevent null checks will occur inside the method implementation.
      * 
      * @param <T>
      *            the value type
@@ -36,13 +40,13 @@
      * @param parameterName
      *            the name of the parameter, used for exception messages
      * @return the value
-     * @throws NullPointerException
+     * @throws IllegalArgumentException
      *             if the value is null
      */
     public static <T> T notNull(T value, String parameterName)
     {
         if (value == null)
-            throw new NullPointerException(UtilMessages.parameterWasNull(parameterName));
+            throw new IllegalArgumentException(UtilMessages.parameterWasNull(parameterName));
 
         return value;
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/util/IdAllocator.java
URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/util/IdAllocator.java?rev=396226&r1=396225&r2=396226&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/util/IdAllocator.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/util/IdAllocator.java Sat Apr 22 23:55:55 2006
@@ -14,13 +14,12 @@
 
 package org.apache.tapestry.util;
 
-import static org.apache.tapestry.util.CollectionFactory.newMap;
-import static org.apache.tapestry.util.Defense.notNull;
-
 import java.util.HashMap;
 import java.util.IdentityHashMap;
 import java.util.Map;
 
+import static org.apache.tapestry.util.CollectionFactory.newMap;
+
 /**
  * Used to "uniquify" names within a given context. A base name is passed in, and the return value
  * is the base name, or the base name extended with a suffix to make it unique.
@@ -83,7 +82,7 @@
 
     private IdAllocator(String namespace, Map<String, NameGenerator> generatorMap)
     {
-        _namespace = notNull(namespace, "namespace");
+        _namespace = namespace;
         _generatorMap = generatorMap;
     }
 

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/CatchNullParametersAspectTest.java
URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/CatchNullParametersAspectTest.java?rev=396226&r1=396225&r2=396226&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/CatchNullParametersAspectTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/CatchNullParametersAspectTest.java Sat Apr 22 23:55:55 2006
@@ -14,6 +14,8 @@
 
 package org.apache.tapestry.internal.aspects;
 
+import java.util.Collections;
+
 import org.apache.tapestry.test.TestBase;
 import org.testng.annotations.Test;
 
@@ -54,6 +56,45 @@
     public void equalsAlwaysSuppressed()
     {
         new NullTarget("not null").equals(null);
+    }
+
+    @Test
+    public void allParametersChecked()
+    {
+        NullTarget t = new NullTarget("not null");
+
+        try
+        {
+            t.manyParameters(null, null, null);
+            unreachable();
+        }
+        catch (IllegalArgumentException ex)
+        {
+            // Expected.
+        }
+
+        try
+        {
+            t.manyParameters(this, null, null);
+            unreachable();
+        }
+        catch (IllegalArgumentException ex)
+        {
+            // Expected.
+        }
+
+        try
+        {
+            t.manyParameters(this, "ok", null);
+            unreachable();
+        }
+        catch (IllegalArgumentException ex)
+        {
+            // Expected.
+        }
+
+        t.manyParameters(this, "ok", Collections.EMPTY_MAP);
+
     }
 
     @Test

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/NullTarget.java
URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/NullTarget.java?rev=396226&r1=396225&r2=396226&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/NullTarget.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/NullTarget.java Sat Apr 22 23:55:55 2006
@@ -14,6 +14,8 @@
 
 package org.apache.tapestry.internal.aspects;
 
+import java.util.Map;
+
 /**
  * Used to test the CatchNullParametersAspect.
  * 
@@ -28,6 +30,16 @@
 
     // Null check enforced
     public NullTarget(String parameter)
+    {
+
+    }
+
+    public void primitiveParameter(int foo)
+    {
+        
+    }
+    
+    public void manyParameters(Object p1, String p2, Map p3)
     {
 
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/util/DefenseTest.java
URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/util/DefenseTest.java?rev=396226&r1=396225&r2=396226&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/util/DefenseTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/util/DefenseTest.java Sat Apr 22 23:55:55 2006
@@ -14,14 +14,14 @@
 
 package org.apache.tapestry.util;
 
+import org.apache.tapestry.test.TestBase;
+import org.testng.annotations.Test;
+
 import static org.apache.tapestry.util.Defense.notBlank;
 import static org.apache.tapestry.util.Defense.notNull;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertSame;
 
-import org.apache.tapestry.test.TestBase;
-import org.testng.annotations.Test;
-
 /**
  * @author Howard M. Lewis Ship
  */
@@ -38,8 +38,7 @@
     }
 
     /**
-     * Check that {@link Defense#notNull(T, String)} throws NPE when null, and
-     * check the message.
+     * Check that {@link Defense#notNull(T, String)} throws NPE when null, and check the message.
      */
 
     @Test
@@ -50,7 +49,7 @@
             notNull(null, "foo");
             unreachable();
         }
-        catch (NullPointerException ex)
+        catch (IllegalArgumentException ex)
         {
             assertEquals(ex.getMessage(), "Parameter foo was null.");
         }



---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org