Author: hlship Date: Sat Apr 22 18:08:18 2006 New Revision: 396187 URL: http://svn.apache.org/viewcvs?rev=396187&view=rev Log: Add an aspect that checks method parameters for nulls (unless supressed using an annotation).
Added: 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/InternalCatchNullParametersAspect.aj tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/annotations/SuppressNullCheck.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/internal/aspects/PartiallySuppressedNullTarget.java tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/SuppressedNullTarget.java Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/annotations/Utility.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/test/BaseTestCase.java tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/transform/MethodSignature.java tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/util/Defense.java tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/hivemodule.xml tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.internal.transform.xml tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.transform.xml tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/InternalUtilityAspectTest.java tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/InternalClassTransformationImplTest.java Added: tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/AbstractCatchNullParametersAspect.aj URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/AbstractCatchNullParametersAspect.aj?rev=396187&view=auto ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/AbstractCatchNullParametersAspect.aj (added) +++ tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/AbstractCatchNullParametersAspect.aj Sat Apr 22 18:08:18 2006 @@ -0,0 +1,73 @@ +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. + */ [EMAIL PROTECTED] +public abstract aspect AbstractCatchNullParametersAspect +{ + /** + * 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 codeNotMarkedAsSuppressed() : + execution([EMAIL PROTECTED] !private * *(..)) || + execution([EMAIL PROTECTED] !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(* *()) || + execution(new ()) || + execution(boolean equals(Object)); + + /** + * Because this aspect can apply so widely, we explicitly exclude the aspect from advising + * itself. + */ + pointcut methodsToCheck() : + targetClasses() && + typeNotMarkedAsSuppressed() && + codeNotMarkedAsSuppressed() && + !excludedMethods(); + + /** + * 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() : methodsToCheck() { + Object[] args = thisJoinPoint.getArgs(); + + for (int i = 0; i < args.length; i++) + { + if (args[i] == null) + { + // Because this aspect advises the execution of the method (rather than the call + // into the method), + // we can't say who called the method ... but that will show up in the stack trace. + + String message = String.format( + "Parameter #%d passed to method %s (at %s) was null.", + i + 1, + thisJoinPoint.getSignature().toString(), + thisJoinPoint.getSourceLocation()); + + System.err.println(message); + + throw new IllegalArgumentException(message); + } + } + } +} Added: 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/InternalCatchNullParametersAspect.aj?rev=396187&view=auto ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalCatchNullParametersAspect.aj (added) +++ tapestry/tapestry5/tapestry-core/trunk/src/main/aspect/org/apache/tapestry/internal/aspects/InternalCatchNullParametersAspect.aj Sat Apr 22 18:08:18 2006 @@ -0,0 +1,15 @@ +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 + */ [EMAIL PROTECTED] +public aspect InternalCatchNullParametersAspect extends AbstractCatchNullParametersAspect +{ + pointcut targetClasses() : + within(org.apache.tapestry..*); +} Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/annotations/SuppressNullCheck.java URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/annotations/SuppressNullCheck.java?rev=396187&view=auto ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/annotations/SuppressNullCheck.java (added) +++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/annotations/SuppressNullCheck.java Sat Apr 22 18:08:18 2006 @@ -0,0 +1,37 @@ +// Copyright 2006 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.tapestry.internal.annotations; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.CONSTRUCTOR; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * Marker annotation that is used to suppress the CatchNullParameters annotation. It can be applied + * to a type (but is <em>not</em> inherited), or it an be applied to individual methods or + * constructors. + * + * @author Howard M. Lewis Ship + */ [EMAIL PROTECTED]( +{ TYPE, CONSTRUCTOR, METHOD }) [EMAIL PROTECTED](RUNTIME) +public @interface SuppressNullCheck { + +} Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/annotations/Utility.java URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/annotations/Utility.java?rev=396187&r1=396186&r2=396187&view=diff ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/annotations/Utility.java (original) +++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/annotations/Utility.java Sat Apr 22 18:08:18 2006 @@ -1,3 +1,17 @@ +// Copyright 2006 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.tapestry.internal.annotations; import java.lang.annotation.Documented; 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=396187&r1=396186&r2=396187&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 18:08:18 2006 @@ -35,6 +35,7 @@ import javassist.expr.FieldAccess; import org.apache.hivemind.service.BodyBuilder; +import org.apache.tapestry.internal.annotations.SuppressNullCheck; import org.apache.tapestry.transform.MethodSignature; import org.apache.tapestry.util.IdAllocator; @@ -90,6 +91,7 @@ private final Object _value; + @SuppressNullCheck ConstructorArg(Class type, String fieldName, Object value) { _type = type; @@ -115,7 +117,7 @@ public InternalClassTransformationImpl(CtClass ctClass) { - _ctClass = notNull(ctClass, "ctClass"); + _ctClass = ctClass; _classPool = _ctClass.getClassPool(); preloadMemberNames(); @@ -171,8 +173,6 @@ public <T extends Annotation> T getAnnotation(Class<T> annotationClass) { - notNull(annotationClass, "annotationClass"); - Object[] annotations = findClassAnnotations(); return findAnnotationInList(annotationClass, annotations); @@ -607,6 +607,7 @@ return fieldName; } + @SuppressNullCheck public String addInjectedField(Class type, String suggestedName, Object value) { notNull(type, "type"); Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java?rev=396187&r1=396186&r2=396187&view=diff ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java (original) +++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java Sat Apr 22 18:08:18 2006 @@ -19,9 +19,9 @@ import org.apache.commons.logging.Log; import org.apache.tapestry.internal.InternalComponentResources; +import org.apache.tapestry.internal.annotations.SuppressNullCheck; import org.apache.tapestry.model.MutableComponentModel; import org.apache.tapestry.transform.ClassTransformation; -import org.apache.tapestry.util.CollectionFactory; import static org.apache.tapestry.util.CollectionFactory.newList; @@ -31,6 +31,7 @@ * * @author Howard M. Lewis Ship */ [EMAIL PROTECTED] public abstract class BaseTestCase extends TestBase { protected final void trainFindFieldsWithAnnotation(ClassTransformation transformation, @@ -74,13 +75,15 @@ return newMock(InternalComponentResources.class); } - protected final void trainAddInjectedField(ClassTransformation ct, Class type, String suggestedName, Object value, String fieldName) + protected final void trainAddInjectedField(ClassTransformation ct, Class type, + String suggestedName, Object value, String fieldName) { ct.addInjectedField(type, suggestedName, value); setReturnValue(fieldName); } - protected final void trainFindUnclaimedFields(ClassTransformation transformation, String... fieldNames) + protected final void trainFindUnclaimedFields(ClassTransformation transformation, + String... fieldNames) { transformation.findUnclaimedFields(); setReturnValue(fieldNames); Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/transform/MethodSignature.java URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/transform/MethodSignature.java?rev=396187&r1=396186&r2=396187&view=diff ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/transform/MethodSignature.java (original) +++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/transform/MethodSignature.java Sat Apr 22 18:08:18 2006 @@ -16,6 +16,8 @@ import java.lang.reflect.Modifier; +import org.apache.tapestry.internal.annotations.SuppressNullCheck; + import static org.apache.tapestry.util.Defense.notBlank; /** @@ -46,11 +48,13 @@ /** Convienience for adding a public void method with no parameters or exception types. */ + @SuppressNullCheck public MethodSignature(String name) { this(Modifier.PUBLIC, "void", name, EMPTY_STRINGS, EMPTY_STRINGS); } + @SuppressNullCheck public MethodSignature(int modifiers, String type, String name, String[] parameterTypes, String[] exceptionTypes) { 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=396187&r1=396186&r2=396187&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 18:08:18 2006 @@ -14,6 +14,7 @@ package org.apache.tapestry.util; +import org.apache.tapestry.internal.annotations.SuppressNullCheck; import org.apache.tapestry.internal.annotations.Utility; /** @@ -21,7 +22,7 @@ * * @author Howard M. Lewis Ship */ [EMAIL PROTECTED] [EMAIL PROTECTED] @SuppressNullCheck public final class Defense { Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/hivemodule.xml URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/hivemodule.xml?rev=396187&r1=396186&r2=396187&view=diff ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/hivemodule.xml (original) +++ tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/hivemodule.xml Sat Apr 22 18:08:18 2006 @@ -1,4 +1,20 @@ <?xml version="1.0"?> +<!-- + Copyright 2006 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. +--> + <module id="tapestry" version="5.0.0"> Master module for Tapestry 5. Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.internal.transform.xml URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.internal.transform.xml?rev=396187&r1=396186&r2=396187&view=diff ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.internal.transform.xml (original) +++ tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.internal.transform.xml Sat Apr 22 18:08:18 2006 @@ -1,4 +1,20 @@ <?xml version="1.0"?> +<!-- + Copyright 2006 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. +--> + <module id="org.apache.tapestry.internal.transform" version="5.0.0"> <contribution configuration-id="org.apache.tapestry.transform.TransformWorkers"> Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.transform.xml URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.transform.xml?rev=396187&r1=396186&r2=396187&view=diff ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.transform.xml (original) +++ tapestry/tapestry5/tapestry-core/trunk/src/main/resources/META-INF/org.apache.tapestry.transform.xml Sat Apr 22 18:08:18 2006 @@ -1,4 +1,20 @@ <module id="org.apache.tapestry.transform" version="5.0.0"> +<!-- + Copyright 2006 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. +--> + <configuration-point id="TransformWorkers" schema-id="hivemind.lib.ChainContribution"> Defines a command chain of workers objects (implementing the Added: 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=396187&view=auto ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/CatchNullParametersAspectTest.java (added) +++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/CatchNullParametersAspectTest.java Sat Apr 22 18:08:18 2006 @@ -0,0 +1,106 @@ +// Copyright 2006 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.tapestry.internal.aspects; + +import org.apache.tapestry.test.TestBase; +import org.testng.annotations.Test; + +import static org.testng.Assert.assertNotNull; + +/** + * Tricky one to test. Just need to invoke methods and ensure that null checks do and do not occur. + * + * @author Howard M. Lewis Ship + */ +public class CatchNullParametersAspectTest extends TestBase +{ + @Test + public void publicConstructor() + { + new NullTarget("not null"); + + try + { + new NullTarget(null); + unreachable(); + } + catch (IllegalArgumentException ex) + { + // Expected. + } + } + + @Test + public void privateConstructor() + { + // This should work + + assertNotNull(NullTarget.createUsingPrivateConstructor()); + } + + @Test + public void publicMethod() + { + NullTarget t = new NullTarget(); + + t.someMethod("not null"); + + try + { + t.someMethod(null); + unreachable(); + } + catch (IllegalArgumentException ex) + { + // Expected. + } + } + + @Test + public void privateMethod() + { + NullTarget t = new NullTarget(); + + t.sendNullToPrivate(); + } + + @Test + public void suppressedConstructor() + { + // Succeeds: + new SuppressedNullTarget(null); + } + + @Test + public void suppressedPublicMethod() + { + // Succeeds: + new SuppressedNullTarget(null).publicMethod(null); + } + + @Test + public void directlySuppressedConstructor() + { + // Succeeds: + new PartiallySuppressedNullTarget(null); + } + + @Test + public void directlySuppressedPublicMethod() + { + // Succeeds: + new PartiallySuppressedNullTarget(null).publicMethod(null); + } +} Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/InternalUtilityAspectTest.java URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/InternalUtilityAspectTest.java?rev=396187&r1=396186&r2=396187&view=diff ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/InternalUtilityAspectTest.java (original) +++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/InternalUtilityAspectTest.java Sat Apr 22 18:08:18 2006 @@ -1,3 +1,17 @@ +// Copyright 2006 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.tapestry.internal.aspects; import org.apache.tapestry.test.TestBase; Added: 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=396187&view=auto ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/NullTarget.java (added) +++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/NullTarget.java Sat Apr 22 18:08:18 2006 @@ -0,0 +1,56 @@ +// Copyright 2006 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.tapestry.internal.aspects; + +public class NullTarget +{ + public NullTarget() + { + + } + + // Null check enforced + public NullTarget(String parameter) + { + + } + + // Private method, null check not enforced + + private NullTarget(String param1, String param2) + { + + } + + public static NullTarget createUsingPrivateConstructor() + { + return new NullTarget(null, null); + } + + public void someMethod(String parameter) + { + + } + + public void sendNullToPrivate() + { + privateMethod(null); + } + + private void privateMethod(String parameter) + { + + } +} Added: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/PartiallySuppressedNullTarget.java URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/PartiallySuppressedNullTarget.java?rev=396187&view=auto ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/PartiallySuppressedNullTarget.java (added) +++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/PartiallySuppressedNullTarget.java Sat Apr 22 18:08:18 2006 @@ -0,0 +1,32 @@ +// Copyright 2006 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.tapestry.internal.aspects; + +import org.apache.tapestry.internal.annotations.SuppressNullCheck; + +public class PartiallySuppressedNullTarget +{ + @SuppressNullCheck + public PartiallySuppressedNullTarget(String parameter) + { + + } + + @SuppressNullCheck + public void publicMethod(String parameter) + { + + } +} Added: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/SuppressedNullTarget.java URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/SuppressedNullTarget.java?rev=396187&view=auto ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/SuppressedNullTarget.java (added) +++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/aspects/SuppressedNullTarget.java Sat Apr 22 18:08:18 2006 @@ -0,0 +1,31 @@ +// Copyright 2006 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.tapestry.internal.aspects; + +import org.apache.tapestry.internal.annotations.SuppressNullCheck; + [EMAIL PROTECTED] +public class SuppressedNullTarget +{ + public SuppressedNullTarget(String parameter) + { + + } + + public void publicMethod(String parameter) + { + + } +} Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/InternalClassTransformationImplTest.java URL: http://svn.apache.org/viewcvs/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/InternalClassTransformationImplTest.java?rev=396187&r1=396186&r2=396187&view=diff ============================================================================== --- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/InternalClassTransformationImplTest.java (original) +++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/InternalClassTransformationImplTest.java Sat Apr 22 18:08:18 2006 @@ -415,6 +415,7 @@ public void addImplementedInterface() throws Exception { MutableComponentModel model = newMutableComponentModel(); + InternalComponentResources resources = newInternalComponentResources(); replay(); @@ -444,7 +445,7 @@ assertEquals(interfaces, new Class[] { ResourceAware.class, FooInterface.class, GetterMethodsInterface.class }); - Object target = ct.createInstantiator(transformed).newInstance(null); + Object target = ct.createInstantiator(transformed).newInstance(resources); FooInterface asFoo = (FooInterface) target; --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]