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 2005/07/28 00:24:50 UTC

cvs commit: jakarta-tapestry/framework/src/java/org/apache/tapestry/resolver PageSpecificationResolverImpl.java

hlship      2005/07/27 15:24:50

  Modified:    annotations/src/java/org/apache/tapestry/annotations
                        InjectStateAnnotationWorker.java
                        InjectComponentAnnotationWorker.java
                        InjectAssetAnnotationWorker.java
                        MessageAnnotationWorker.java
                        InjectObjectAnnotationWorker.java
               framework/src/java/org/apache/tapestry/enhance
                        EnhanceMessages.java EnhancementOperationImpl.java
                        ParameterPropertyWorker.java InjectBeanWorker.java
                        EnhanceUtils.java InjectScriptWorker.java
                        InjectPageWorker.java AbstractPropertyWorker.java
                        InjectSpecificationWorker.java
                        EnhancementOperation.java InjectStateWorker.java
                        InjectObjectWorker.java
                        SpecifiedPropertyWorker.java
                        EnhanceStrings.properties InjectMetaWorker.java
                        InjectAssetWorker.java InjectComponentWorker.java
                        InjectMessagesWorker.java
               annotations/src/test/org/apache/tapestry/annotations
                        TestInjectObjectAnnotationWorker.java
                        TestInjectComponentAnnotationWorker.java
                        TestInjectStateAnnotationWorker.java
                        TestMessageAnnotationWorker.java
                        TestInjectAssetAnnotationWorker.java
               framework/src/test/org/apache/tapestry/enhance
                        TestSpecifiedPropertyWorker.java
                        TestInjectMetaWorker.java
                        TestInjectComponentWorker.java
                        TestInjectMessagesWorker.java
                        TestInjectPageWorker.java
                        TestInjectSpecificationWorker.java
                        TestInjectStateWorker.java
                        TestAbstractPropertyWorker.java
                        TestEnhancementOperation.java
                        TestParameterPropertyWorker.java
                        TestInjectBeanWorker.java
                        TestInjectScriptWorker.java
                        TestInjectObjectWorker.java
                        TestInjectAssetWorker.java
               framework/src/java/org/apache/tapestry/test
                        CreatePropertyWorker.java Creator.java
               framework/src/test/org/apache/tapestry/junit
                        TestComponentMessages.java
               .        status.xml
               framework/src/java/org/apache/tapestry/resolver
                        PageSpecificationResolverImpl.java
  Added:       framework/src/test/org/apache/tapestry/enhance
                        BaseEnhancementTestCase.java
               framework/src/java/org/apache/tapestry/test
                        CreatorLocation.java
  Log:
  TAPESTRY-441: Poor reporting of duplicate method implementations
  
  Revision  Changes    Path
  1.4       +1 -1      jakarta-tapestry/annotations/src/java/org/apache/tapestry/annotations/InjectStateAnnotationWorker.java
  
  Index: InjectStateAnnotationWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/annotations/src/java/org/apache/tapestry/annotations/InjectStateAnnotationWorker.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- InjectStateAnnotationWorker.java	2 Jul 2005 22:51:23 -0000	1.3
  +++ InjectStateAnnotationWorker.java	27 Jul 2005 22:24:47 -0000	1.4
  @@ -51,7 +51,7 @@
   
           String propertyName = AnnotationUtils.getPropertyName(method);
   
  -        _delegate.injectState(op, is.value(), propertyName);
  +        _delegate.injectState(op, is.value(), propertyName, location);
       }
   
       public void setApplicationStateManager(ApplicationStateManager applicationStateManager)
  
  
  
  1.4       +1 -1      jakarta-tapestry/annotations/src/java/org/apache/tapestry/annotations/InjectComponentAnnotationWorker.java
  
  Index: InjectComponentAnnotationWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/annotations/src/java/org/apache/tapestry/annotations/InjectComponentAnnotationWorker.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- InjectComponentAnnotationWorker.java	2 Jul 2005 22:51:23 -0000	1.3
  +++ InjectComponentAnnotationWorker.java	27 Jul 2005 22:24:47 -0000	1.4
  @@ -49,7 +49,7 @@
           InjectComponent ic = method.getAnnotation(InjectComponent.class);
           String propertyName = AnnotationUtils.getPropertyName(method);
   
  -        _delegate.injectComponent(op, ic.value(), propertyName);
  +        _delegate.injectComponent(op, ic.value(), propertyName, location);
       }
   
   }
  
  
  
  1.4       +2 -2      jakarta-tapestry/annotations/src/java/org/apache/tapestry/annotations/InjectAssetAnnotationWorker.java
  
  Index: InjectAssetAnnotationWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/annotations/src/java/org/apache/tapestry/annotations/InjectAssetAnnotationWorker.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- InjectAssetAnnotationWorker.java	2 Jul 2005 22:51:23 -0000	1.3
  +++ InjectAssetAnnotationWorker.java	27 Jul 2005 22:24:47 -0000	1.4
  @@ -47,10 +47,10 @@
               Method method, Location location)
       {
           InjectAsset as = method.getAnnotation(InjectAsset.class);
  -        
  +
           String propertyName = AnnotationUtils.getPropertyName(method);
   
  -        _delegate.injectAsset(op, as.value(), propertyName);
  +        _delegate.injectAsset(op, as.value(), propertyName, location);
       }
   
   }
  
  
  
  1.5       +1 -1      jakarta-tapestry/annotations/src/java/org/apache/tapestry/annotations/MessageAnnotationWorker.java
  
  Index: MessageAnnotationWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/annotations/src/java/org/apache/tapestry/annotations/MessageAnnotationWorker.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- MessageAnnotationWorker.java	8 Jul 2005 05:53:39 -0000	1.4
  +++ MessageAnnotationWorker.java	27 Jul 2005 22:24:47 -0000	1.5
  @@ -80,7 +80,7 @@
   
           builder.end();
   
  -        op.addMethod(Modifier.PUBLIC, new MethodSignature(method), builder.toString());
  +        op.addMethod(Modifier.PUBLIC, new MethodSignature(method), builder.toString(), location);
   
           if (isGetter(method))
               op.claimProperty(AnnotationUtils.getPropertyName(method));
  
  
  
  1.5       +1 -1      jakarta-tapestry/annotations/src/java/org/apache/tapestry/annotations/InjectObjectAnnotationWorker.java
  
  Index: InjectObjectAnnotationWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/annotations/src/java/org/apache/tapestry/annotations/InjectObjectAnnotationWorker.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- InjectObjectAnnotationWorker.java	2 Jul 2005 22:51:23 -0000	1.4
  +++ InjectObjectAnnotationWorker.java	27 Jul 2005 22:24:47 -0000	1.5
  @@ -55,7 +55,7 @@
   
           String propertyName = AnnotationUtils.getPropertyName(method);
   
  -        _delegate.injectObject(op, object, propertyName, null);
  +        _delegate.injectObject(op, object, propertyName, location);
       }
   
       public void setProvider(InjectedValueProvider provider)
  
  
  
  1.19      +7 -0      jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/EnhanceMessages.java
  
  Index: EnhanceMessages.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/EnhanceMessages.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- EnhanceMessages.java	8 Jul 2005 14:45:13 -0000	1.18
  +++ EnhanceMessages.java	27 Jul 2005 22:24:48 -0000	1.19
  @@ -17,8 +17,10 @@
   import java.lang.reflect.Constructor;
   import java.lang.reflect.Method;
   
  +import org.apache.hivemind.Location;
   import org.apache.hivemind.impl.MessageFormatter;
   import org.apache.hivemind.service.ClassFabUtils;
  +import org.apache.hivemind.service.MethodSignature;
   import org.apache.tapestry.IAsset;
   import org.apache.tapestry.Tapestry;
   
  @@ -132,4 +134,9 @@
                   .getJavaClassName(baseClass), cause);
       }
   
  +    public static String methodConflict(MethodSignature sig, Location existing)
  +    {
  +        return _formatter.format("method-conflict", sig, existing);
  +    }
  +
   }
  \ No newline at end of file
  
  
  
  1.24      +21 -1     jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/EnhancementOperationImpl.java
  
  Index: EnhancementOperationImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/EnhancementOperationImpl.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- EnhancementOperationImpl.java	8 Jul 2005 14:46:56 -0000	1.23
  +++ EnhancementOperationImpl.java	27 Jul 2005 22:24:48 -0000	1.24
  @@ -33,6 +33,7 @@
   import org.apache.hivemind.ApplicationRuntimeException;
   import org.apache.hivemind.ClassResolver;
   import org.apache.hivemind.HiveMind;
  +import org.apache.hivemind.Location;
   import org.apache.hivemind.service.BodyBuilder;
   import org.apache.hivemind.service.ClassFab;
   import org.apache.hivemind.service.ClassFactory;
  @@ -101,6 +102,13 @@
   
       private final IdAllocator _idAllocator = new IdAllocator();
   
  +    /**
  +     * Map keyed on MethodSignature, value is Location. Used to track which methods have been
  +     * created, based on which location data (identified conflicts).
  +     */
  +
  +    private final Map _methods = new HashMap();
  +
       public EnhancementOperationImpl(ClassResolver classResolver,
               IComponentSpecification specification, Class baseClass, ClassFactory classFactory)
       {
  @@ -332,8 +340,20 @@
           return EnhanceUtils.createAccessorMethodName(propertyName);
       }
   
  -    public void addMethod(int modifier, MethodSignature sig, String methodBody)
  +    public void addMethod(int modifier, MethodSignature sig, String methodBody, Location location)
       {
  +        Defense.notNull(sig, "sig");
  +        Defense.notNull(methodBody, "methodBody");
  +        Defense.notNull(location, "location");
  +
  +        Location existing = (Location) _methods.get(sig);
  +        if (existing != null)
  +            throw new ApplicationRuntimeException(EnhanceMessages.methodConflict(
  +                    sig,
  +                    existing), location, null);
  +
  +        _methods.put(sig, location);
  +
           _classFab.addMethod(modifier, sig, methodBody);
       }
   
  
  
  
  1.16      +14 -8     jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/ParameterPropertyWorker.java
  
  Index: ParameterPropertyWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/ParameterPropertyWorker.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- ParameterPropertyWorker.java	21 Jul 2005 13:17:57 -0000	1.15
  +++ ParameterPropertyWorker.java	27 Jul 2005 22:24:48 -0000	1.16
  @@ -19,6 +19,7 @@
   
   import org.apache.hivemind.ApplicationRuntimeException;
   import org.apache.hivemind.ErrorLog;
  +import org.apache.hivemind.Location;
   import org.apache.hivemind.service.BodyBuilder;
   import org.apache.hivemind.service.ClassFabUtils;
   import org.apache.hivemind.service.MethodSignature;
  @@ -77,7 +78,7 @@
           String specifiedType = ps.getType();
           boolean cache = ps.getCache();
   
  -        addParameter(op, parameterName, propertyName, specifiedType, cache);
  +        addParameter(op, parameterName, propertyName, specifiedType, cache, ps.getLocation());
       }
   
       /**
  @@ -96,10 +97,12 @@
        * @param cache
        *            if true, then the value should be cached while the component renders; false (a
        *            much less common case) means that every access will work through binding object.
  +     * @param location
  +     *            TODO
        */
   
       public void addParameter(EnhancementOperation op, String parameterName, String propertyName,
  -            String specifiedType, boolean cache)
  +            String specifiedType, boolean cache, Location location)
       {
           Defense.notNull(op, "op");
           Defense.notNull(parameterName, "parameterName");
  @@ -132,7 +135,8 @@
                   fieldName,
                   defaultFieldName,
                   cachedFieldName,
  -                cache);
  +                cache,
  +                location);
   
           buildMutator(
                   op,
  @@ -141,7 +145,8 @@
                   propertyType,
                   fieldName,
                   defaultFieldName,
  -                cachedFieldName);
  +                cachedFieldName,
  +                location);
   
           extendCleanupAfterRender(
                   op,
  @@ -191,7 +196,8 @@
       }
   
       private void buildMutator(EnhancementOperation op, String parameterName, String propertyName,
  -            Class propertyType, String fieldName, String defaultFieldName, String cachedFieldName)
  +            Class propertyType, String fieldName, String defaultFieldName, String cachedFieldName,
  +            Location location)
       {
           BodyBuilder builder = new BodyBuilder();
           builder.begin();
  @@ -237,14 +243,14 @@
   
           op.addMethod(Modifier.PUBLIC, new MethodSignature(void.class, mutatorMethodName,
                   new Class[]
  -                { propertyType }, null), builder.toString());
  +                { propertyType }, null), builder.toString(), location);
       }
   
       // Package private for testing
   
       void buildAccessor(EnhancementOperation op, String parameterName, String propertyName,
               Class propertyType, String fieldName, String defaultFieldName, String cachedFieldName,
  -            boolean cache)
  +            boolean cache, Location location)
       {
           BodyBuilder builder = new BodyBuilder();
           builder.begin();
  @@ -283,7 +289,7 @@
           String accessorMethodName = op.getAccessorMethodName(propertyName);
   
           op.addMethod(Modifier.PUBLIC, new MethodSignature(propertyType, accessorMethodName, null,
  -                null), builder.toString());
  +                null), builder.toString(), location);
       }
   
       public void setErrorLog(ErrorLog errorLog)
  
  
  
  1.4       +5 -3      jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectBeanWorker.java
  
  Index: InjectBeanWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectBeanWorker.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- InjectBeanWorker.java	8 Jun 2005 19:58:43 -0000	1.3
  +++ InjectBeanWorker.java	27 Jul 2005 22:24:48 -0000	1.4
  @@ -18,6 +18,7 @@
   import java.util.Iterator;
   
   import org.apache.hivemind.ErrorLog;
  +import org.apache.hivemind.Location;
   import org.apache.hivemind.service.ClassFabUtils;
   import org.apache.hivemind.service.MethodSignature;
   import org.apache.hivemind.util.Defense;
  @@ -49,7 +50,7 @@
               {
                   try
                   {
  -                    injectBean(op, name, propertyName);
  +                    injectBean(op, name, propertyName, bs.getLocation());
                   }
                   catch (Exception ex)
                   {
  @@ -60,7 +61,8 @@
           }
       }
   
  -    public void injectBean(EnhancementOperation op, String beanName, String propertyName)
  +    public void injectBean(EnhancementOperation op, String beanName, String propertyName,
  +            Location location)
       {
           Defense.notNull(op, "op");
           Defense.notNull(beanName, "beanName");
  @@ -79,7 +81,7 @@
   
           op.addMethod(Modifier.PUBLIC, sig, "return ("
                   + ClassFabUtils.getJavaClassName(propertyType) + ") getBeans().getBean(\""
  -                + beanName + "\");");
  +                + beanName + "\");", location);
       }
   
       public void setErrorLog(ErrorLog errorLog)
  
  
  
  1.13      +6 -4      jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/EnhanceUtils.java
  
  Index: EnhanceUtils.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/EnhanceUtils.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- EnhanceUtils.java	15 May 2005 22:56:36 -0000	1.12
  +++ EnhanceUtils.java	27 Jul 2005 22:24:48 -0000	1.13
  @@ -19,6 +19,7 @@
   import java.util.Map;
   
   import org.apache.hivemind.ApplicationRuntimeException;
  +import org.apache.hivemind.Location;
   import org.apache.hivemind.service.ClassFabUtils;
   import org.apache.hivemind.service.MethodSignature;
   import org.apache.hivemind.util.Defense;
  @@ -64,23 +65,24 @@
       }
   
       public static void createSimpleAccessor(EnhancementOperation op, String fieldName,
  -            String propertyName, Class propertyType)
  +            String propertyName, Class propertyType, Location location)
       {
           String methodName = op.getAccessorMethodName(propertyName);
   
           op.addMethod(
                   Modifier.PUBLIC,
                   new MethodSignature(propertyType, methodName, null, null),
  -                "return " + fieldName + ";");
  +                "return " + fieldName + ";",
  +                location);
       }
   
       public static void createSimpleMutator(EnhancementOperation op, String fieldName,
  -            String propertyName, Class propertyType)
  +            String propertyName, Class propertyType, Location location)
       {
           String methodName = createMutatorMethodName(propertyName);
   
           op.addMethod(Modifier.PUBLIC, new MethodSignature(void.class, methodName, new Class[]
  -        { propertyType }, null), fieldName + " = $1;");
  +        { propertyType }, null), fieldName + " = $1;", location);
       }
   
       /**
  
  
  
  1.6       +1 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectScriptWorker.java
  
  Index: InjectScriptWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectScriptWorker.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- InjectScriptWorker.java	16 Jun 2005 12:03:17 -0000	1.5
  +++ InjectScriptWorker.java	27 Jul 2005 22:24:48 -0000	1.6
  @@ -81,7 +81,7 @@
   
           MethodSignature sig = new MethodSignature(propertyType, methodName, null, null);
   
  -        op.addMethod(Modifier.PUBLIC, sig, "return " + fieldName + ".getScript();");
  +        op.addMethod(Modifier.PUBLIC, sig, "return " + fieldName + ".getScript();", location);
       }
   
       public void setSource(IScriptSource source)
  
  
  
  1.2       +1 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectPageWorker.java
  
  Index: InjectPageWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectPageWorker.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- InjectPageWorker.java	19 Jun 2005 16:06:29 -0000	1.1
  +++ InjectPageWorker.java	27 Jul 2005 22:24:48 -0000	1.2
  @@ -65,6 +65,6 @@
   
           builder.add("getPage().getRequestCycle().getPage(\"{0}\");", pageName);
   
  -        op.addMethod(Modifier.PUBLIC, sig, builder.toString());
  +        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location);
       }
   }
  
  
  
  1.6       +8 -5      jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/AbstractPropertyWorker.java
  
  Index: AbstractPropertyWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/AbstractPropertyWorker.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- AbstractPropertyWorker.java	18 Apr 2005 17:06:34 -0000	1.5
  +++ AbstractPropertyWorker.java	27 Jul 2005 22:24:48 -0000	1.6
  @@ -17,6 +17,7 @@
   import java.util.Iterator;
   
   import org.apache.hivemind.ErrorLog;
  +import org.apache.hivemind.Location;
   import org.apache.tapestry.IComponent;
   import org.apache.tapestry.event.PageDetachListener;
   import org.apache.tapestry.spec.IComponentSpecification;
  @@ -34,6 +35,8 @@
   
       public void performEnhancement(EnhancementOperation op, IComponentSpecification spec)
       {
  +        Location location = spec.getLocation();
  +
           Iterator i = op.findUnclaimedAbstractProperties().iterator();
   
           while (i.hasNext())
  @@ -42,19 +45,19 @@
   
               try
               {
  -                createProperty(op, name);
  +                createProperty(op, name, location);
               }
               catch (Exception ex)
               {
                   _errorLog.error(
                           EnhanceMessages.errorAddingProperty(name, op.getBaseClass(), ex),
  -                        spec.getLocation(),
  +                        location,
                           ex);
               }
           }
       }
   
  -    private void createProperty(EnhancementOperation op, String name)
  +    private void createProperty(EnhancementOperation op, String name, Location location)
       {
           // This won't be null because its always for existing properties.
   
  @@ -66,8 +69,8 @@
           op.addField(fieldName, propertyType);
           op.addField(defaultFieldName, propertyType);
   
  -        EnhanceUtils.createSimpleAccessor(op, fieldName, name, propertyType);
  -        EnhanceUtils.createSimpleMutator(op, fieldName, name, propertyType);
  +        EnhanceUtils.createSimpleAccessor(op, fieldName, name, propertyType, location);
  +        EnhanceUtils.createSimpleMutator(op, fieldName, name, propertyType, location);
   
           // Copy the real attribute into the default attribute inside finish load
           // (allowing a default value to be set inside finishLoad()).
  
  
  
  1.7       +2 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectSpecificationWorker.java
  
  Index: InjectSpecificationWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectSpecificationWorker.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- InjectSpecificationWorker.java	8 Jun 2005 19:58:42 -0000	1.6
  +++ InjectSpecificationWorker.java	27 Jul 2005 22:24:48 -0000	1.7
  @@ -60,7 +60,8 @@
                   op,
                   fieldName,
                   SPECIFICATION_PROPERTY_NAME,
  -                IComponentSpecification.class);
  +                IComponentSpecification.class,
  +                spec.getLocation());
       }
   
       public void setErrorLog(ErrorLog errorLog)
  
  
  
  1.17      +5 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/EnhancementOperation.java
  
  Index: EnhancementOperation.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/EnhancementOperation.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- EnhancementOperation.java	7 Jun 2005 17:41:40 -0000	1.16
  +++ EnhancementOperation.java	27 Jul 2005 22:24:48 -0000	1.17
  @@ -16,6 +16,7 @@
   
   import java.util.List;
   
  +import org.apache.hivemind.Location;
   import org.apache.hivemind.service.MethodSignature;
   
   /**
  @@ -101,8 +102,11 @@
        *            the method signature (defining name, return type, etc.)
        * @param methodBody
        *            a Javassist code snippet for the method body
  +     * @param location
  +     *            a location used to identify "why" the method was added; the location may later be
  +     *            used to describe conflicts. May not be null.
        */
  -    public void addMethod(int modifier, MethodSignature sig, String methodBody);
  +    public void addMethod(int modifier, MethodSignature sig, String methodBody, Location location);
   
       /**
        * Returns the base component class, as defined in the specification (or defaulted). An enhaced
  
  
  
  1.9       +6 -4      jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectStateWorker.java
  
  Index: InjectStateWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectStateWorker.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- InjectStateWorker.java	15 Jun 2005 13:34:31 -0000	1.8
  +++ InjectStateWorker.java	27 Jul 2005 22:24:48 -0000	1.9
  @@ -16,6 +16,7 @@
   
   import java.lang.reflect.Modifier;
   
  +import org.apache.hivemind.Location;
   import org.apache.hivemind.service.BodyBuilder;
   import org.apache.hivemind.service.ClassFabUtils;
   import org.apache.hivemind.service.MethodSignature;
  @@ -39,10 +40,11 @@
   
       public void performEnhancement(EnhancementOperation op, InjectSpecification spec)
       {
  -        injectState(op, spec.getObject(), spec.getProperty());
  +        injectState(op, spec.getObject(), spec.getProperty(), spec.getLocation());
       }
   
  -    public void injectState(EnhancementOperation op, String objectName, String propertyName)
  +    public void injectState(EnhancementOperation op, String objectName, String propertyName,
  +            Location location)
       {
           Defense.notNull(op, "op");
           Defense.notNull(objectName, "objectName");
  @@ -75,7 +77,7 @@
   
           MethodSignature sig = new MethodSignature(propertyType, methodName, null, null);
   
  -        op.addMethod(Modifier.PUBLIC, sig, builder.toString());
  +        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location);
   
           // Mutator
   
  @@ -89,7 +91,7 @@
                   new Class[]
                   { propertyType }, null);
   
  -        op.addMethod(Modifier.PUBLIC, sig, builder.toString());
  +        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location);
   
           // Extend pageDetached() to clean out the cached field value.
   
  
  
  
  1.7       +1 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectObjectWorker.java
  
  Index: InjectObjectWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectObjectWorker.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- InjectObjectWorker.java	9 Jul 2005 16:40:31 -0000	1.6
  +++ InjectObjectWorker.java	27 Jul 2005 22:24:48 -0000	1.7
  @@ -75,7 +75,7 @@
           op.addMethod(
                   Modifier.PUBLIC,
                   new MethodSignature(propertyType, methodName, null, null),
  -                "return " + fieldName + ";");
  +                "return " + fieldName + ";", location);
       }
   
       public void setProvider(InjectedValueProvider provider)
  
  
  
  1.14      +6 -5      jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/SpecifiedPropertyWorker.java
  
  Index: SpecifiedPropertyWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/SpecifiedPropertyWorker.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- SpecifiedPropertyWorker.java	8 Jun 2005 19:58:43 -0000	1.13
  +++ SpecifiedPropertyWorker.java	27 Jul 2005 22:24:48 -0000	1.14
  @@ -85,7 +85,8 @@
           addProperty(op, propertyName, specifiedType, persistent, initialValue, location);
       }
   
  -    public void addProperty(EnhancementOperation op, String propertyName, String specifiedType, boolean persistent, String initialValue, Location location)
  +    public void addProperty(EnhancementOperation op, String propertyName, String specifiedType,
  +            boolean persistent, String initialValue, Location location)
       {
           Class propertyType = EnhanceUtils.extractPropertyType(op, propertyName, specifiedType);
   
  @@ -99,9 +100,9 @@
           // if they exist. 4.0 is less picky ... it blindly adds new methods, possibly
           // overwriting methods in the base component class.
   
  -        EnhanceUtils.createSimpleAccessor(op, field, propertyName, propertyType);
  +        EnhanceUtils.createSimpleAccessor(op, field, propertyName, propertyType, location);
   
  -        addMutator(op, propertyName, propertyType, field, persistent);
  +        addMutator(op, propertyName, propertyType, field, persistent, location);
   
           if (initialValue == null)
               addReinitializer(op, propertyType, field);
  @@ -174,7 +175,7 @@
       }
   
       private void addMutator(EnhancementOperation op, String propertyName, Class propertyType,
  -            String fieldName, boolean persistent)
  +            String fieldName, boolean persistent, Location location)
       {
           String methodName = EnhanceUtils.createMutatorMethodName(propertyName);
   
  @@ -196,7 +197,7 @@
           MethodSignature sig = new MethodSignature(void.class, methodName, new Class[]
           { propertyType }, null);
   
  -        op.addMethod(Modifier.PUBLIC, sig, body.toString());
  +        op.addMethod(Modifier.PUBLIC, sig, body.toString(), location);
       }
   
       public void setErrorLog(ErrorLog errorLog)
  
  
  
  1.16      +2 -1      jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/EnhanceStrings.properties
  
  Index: EnhanceStrings.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/EnhanceStrings.properties,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- EnhanceStrings.properties	8 Jul 2005 14:45:13 -0000	1.15
  +++ EnhanceStrings.properties	27 Jul 2005 22:24:48 -0000	1.16
  @@ -26,4 +26,5 @@
   wrong-type-for-property=Property {0} is type {1}, which is not compatible with {2}.
   wrong-type-for-page-injection=Property {0} is type {1}, which is not compatible with injection. The property type should be Object, IPage, or a specific page class.
   incompatible-property-type=Property {0} is type {1}, which is not compatible with the expected type, {2}.
  -class-enhancement-failure=Failure enhancing class {0}: {1}
  \ No newline at end of file
  +class-enhancement-failure=Failure enhancing class {0}: {1}
  +method-conflict=A new implementation of method ''{0}'' conflicts with an existing implementation (at {1}).
  \ No newline at end of file
  
  
  
  1.5       +13 -11    jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectMetaWorker.java
  
  Index: InjectMetaWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectMetaWorker.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- InjectMetaWorker.java	8 Jun 2005 19:58:43 -0000	1.4
  +++ InjectMetaWorker.java	27 Jul 2005 22:24:48 -0000	1.5
  @@ -18,6 +18,7 @@
   import java.util.HashMap;
   import java.util.Map;
   
  +import org.apache.hivemind.Location;
   import org.apache.hivemind.service.BodyBuilder;
   import org.apache.hivemind.service.ClassFabUtils;
   import org.apache.hivemind.service.MethodSignature;
  @@ -58,10 +59,11 @@
           String propertyName = spec.getProperty();
           String metaKey = spec.getObject();
   
  -        injectMetaValue(op, propertyName, metaKey);
  +        injectMetaValue(op, propertyName, metaKey, spec.getLocation());
       }
   
  -    public void injectMetaValue(EnhancementOperation op, String propertyName, String metaKey)
  +    public void injectMetaValue(EnhancementOperation op, String propertyName, String metaKey,
  +            Location location)
       {
           Defense.notNull(op, "op");
           Defense.notNull(propertyName, "propertyName");
  @@ -81,21 +83,21 @@
   
           if (parser != null)
           {
  -            addPrimitive(op, metaKey, propertyName, sig, sourceName, parser);
  +            addPrimitive(op, metaKey, propertyName, sig, sourceName, parser, location);
               return;
           }
   
           if (propertyType == char.class)
           {
  -            addCharacterPrimitive(op, metaKey, propertyName, sig, sourceName);
  +            addCharacterPrimitive(op, metaKey, propertyName, sig, sourceName, location);
               return;
           }
   
  -        addObject(op, metaKey, propertyName, propertyType, sig, sourceName);
  +        addObject(op, metaKey, propertyName, propertyType, sig, sourceName, location);
       }
   
       private void addPrimitive(EnhancementOperation op, String metaKey, String propertyName,
  -            MethodSignature sig, String sourceName, String parser)
  +            MethodSignature sig, String sourceName, String parser, Location location)
       {
           BodyBuilder builder = new BodyBuilder();
           builder.begin();
  @@ -106,11 +108,11 @@
           builder.addln("return {0}(meta);", parser);
           builder.end();
   
  -        op.addMethod(Modifier.PUBLIC, sig, builder.toString());
  +        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location);
       }
   
       private void addCharacterPrimitive(EnhancementOperation op, String metaKey,
  -            String propertyName, MethodSignature sig, String sourceName)
  +            String propertyName, MethodSignature sig, String sourceName, Location location)
       {
           BodyBuilder builder = new BodyBuilder();
           builder.begin();
  @@ -121,11 +123,11 @@
           builder.addln("return meta.charAt(0);");
           builder.end();
   
  -        op.addMethod(Modifier.PUBLIC, sig, builder.toString());
  +        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location);
       }
   
       private void addObject(EnhancementOperation op, String metaKey, String propertyName,
  -            Class propertyType, MethodSignature sig, String sourceName)
  +            Class propertyType, MethodSignature sig, String sourceName, Location location)
       {
           String valueConverterName = op.addInjectedField(
                   "_$valueConverter",
  @@ -143,7 +145,7 @@
                   .getJavaClassName(propertyType), valueConverterName, classRef);
           builder.end();
   
  -        op.addMethod(Modifier.PUBLIC, sig, builder.toString());
  +        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), location);
       }
   
       public void setSource(ComponentPropertySource source)
  
  
  
  1.5       +4 -3      jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectAssetWorker.java
  
  Index: InjectAssetWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectAssetWorker.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- InjectAssetWorker.java	8 Jul 2005 14:45:13 -0000	1.4
  +++ InjectAssetWorker.java	27 Jul 2005 22:24:48 -0000	1.5
  @@ -18,6 +18,7 @@
   
   import org.apache.hivemind.ApplicationRuntimeException;
   import org.apache.hivemind.ErrorLog;
  +import org.apache.hivemind.Location;
   import org.apache.hivemind.util.Defense;
   import org.apache.tapestry.IAsset;
   import org.apache.tapestry.IComponent;
  @@ -49,7 +50,7 @@
               {
                   try
                   {
  -                    injectAsset(op, name, propertyName);
  +                    injectAsset(op, name, propertyName, as.getLocation());
                   }
                   catch (Exception ex)
                   {
  @@ -60,7 +61,7 @@
           }
       }
   
  -    public void injectAsset(EnhancementOperation op, String assetName, String propertyName)
  +    public void injectAsset(EnhancementOperation op, String assetName, String propertyName, Location location)
       {
           Defense.notNull(op, "op");
           Defense.notNull(assetName, "assetName");
  @@ -80,7 +81,7 @@
   
           op.addField(fieldName, propertyType);
   
  -        EnhanceUtils.createSimpleAccessor(op, fieldName, propertyName, propertyType);
  +        EnhanceUtils.createSimpleAccessor(op, fieldName, propertyName, propertyType, location);
   
           // i.e. _$fred = getAsset("barney");
   
  
  
  
  1.4       +4 -3      jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectComponentWorker.java
  
  Index: InjectComponentWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectComponentWorker.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- InjectComponentWorker.java	8 Jun 2005 19:58:43 -0000	1.3
  +++ InjectComponentWorker.java	27 Jul 2005 22:24:48 -0000	1.4
  @@ -17,6 +17,7 @@
   import java.util.Iterator;
   
   import org.apache.hivemind.ErrorLog;
  +import org.apache.hivemind.Location;
   import org.apache.hivemind.service.ClassFabUtils;
   import org.apache.hivemind.util.Defense;
   import org.apache.tapestry.IComponent;
  @@ -50,7 +51,7 @@
               {
                   try
                   {
  -                    injectComponent(op, id, propertyName);
  +                    injectComponent(op, id, propertyName, cc.getLocation());
                   }
                   catch (Exception ex)
                   {
  @@ -61,7 +62,7 @@
           }
       }
   
  -    public void injectComponent(EnhancementOperation op, String componentId, String propertyName)
  +    public void injectComponent(EnhancementOperation op, String componentId, String propertyName, Location location)
       {
           Defense.notNull(op, "op");
           Defense.notNull(componentId, "componentId");
  @@ -75,7 +76,7 @@
   
           op.addField(fieldName, propertyType);
   
  -        EnhanceUtils.createSimpleAccessor(op, fieldName, propertyName, propertyType);
  +        EnhanceUtils.createSimpleAccessor(op, fieldName, propertyName, propertyType, location);
   
           // I.e. _$fred = (IComponent) getComponent("fred");
   
  
  
  
  1.7       +7 -4      jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectMessagesWorker.java
  
  Index: InjectMessagesWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/enhance/InjectMessagesWorker.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- InjectMessagesWorker.java	8 Jun 2005 19:58:43 -0000	1.6
  +++ InjectMessagesWorker.java	27 Jul 2005 22:24:48 -0000	1.7
  @@ -17,6 +17,7 @@
   import java.lang.reflect.Modifier;
   
   import org.apache.hivemind.ErrorLog;
  +import org.apache.hivemind.Location;
   import org.apache.hivemind.Messages;
   import org.apache.hivemind.service.BodyBuilder;
   import org.apache.hivemind.service.MethodSignature;
  @@ -44,18 +45,20 @@
   
       public void performEnhancement(EnhancementOperation op, IComponentSpecification spec)
       {
  +        Location location = spec.getLocation();
  +
           try
           {
  -            injectMessages(op);
  +            injectMessages(op, location);
           }
           catch (Exception ex)
           {
               _errorLog.error(EnhanceMessages.errorAddingProperty(MESSAGES_PROPERTY, op
  -                    .getBaseClass(), ex), null, ex);
  +                    .getBaseClass(), ex), location, ex);
           }
       }
   
  -    public void injectMessages(EnhancementOperation op)
  +    public void injectMessages(EnhancementOperation op, Location location)
       {
           Defense.notNull(op, "op");
   
  @@ -75,7 +78,7 @@
           builder.addln("return _$messages;");
           builder.end();
   
  -        op.addMethod(Modifier.PUBLIC, METHOD_SIGNATURE, builder.toString());
  +        op.addMethod(Modifier.PUBLIC, METHOD_SIGNATURE, builder.toString(), location);
       }
   
       public void setComponentMessagesSource(ComponentMessagesSource componentMessagesSource)
  
  
  
  1.5       +5 -2      jakarta-tapestry/annotations/src/test/org/apache/tapestry/annotations/TestInjectObjectAnnotationWorker.java
  
  Index: TestInjectObjectAnnotationWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/annotations/src/test/org/apache/tapestry/annotations/TestInjectObjectAnnotationWorker.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TestInjectObjectAnnotationWorker.java	2 Jul 2005 22:51:24 -0000	1.4
  +++ TestInjectObjectAnnotationWorker.java	27 Jul 2005 22:24:48 -0000	1.5
  @@ -16,6 +16,7 @@
   
   import java.lang.reflect.Method;
   
  +import org.apache.hivemind.Location;
   import org.apache.tapestry.enhance.EnhancementOperation;
   import org.apache.tapestry.enhance.InjectObjectWorker;
   import org.apache.tapestry.services.InjectedValueProvider;
  @@ -40,6 +41,8 @@
   
       public void testDelegation()
       {
  +        Location l = newLocation();
  +
           EnhancementOperation op = newOp();
           IComponentSpecification spec = newSpec();
   
  @@ -58,11 +61,11 @@
   
           Method m = findMethod(AnnotatedPage.class, "getInjectedObject");
   
  -        delegate.injectObject(op, "barney", "injectedObject", null);
  +        delegate.injectObject(op, "barney", "injectedObject", l);
   
           replayControls();
   
  -        worker.performEnhancement(op, spec, m, null);
  +        worker.performEnhancement(op, spec, m, l);
   
           verifyControls();
       }
  
  
  
  1.4       +4 -2      jakarta-tapestry/annotations/src/test/org/apache/tapestry/annotations/TestInjectComponentAnnotationWorker.java
  
  Index: TestInjectComponentAnnotationWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/annotations/src/test/org/apache/tapestry/annotations/TestInjectComponentAnnotationWorker.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TestInjectComponentAnnotationWorker.java	2 Jul 2005 22:51:24 -0000	1.3
  +++ TestInjectComponentAnnotationWorker.java	27 Jul 2005 22:24:48 -0000	1.4
  @@ -14,6 +14,7 @@
   
   package org.apache.tapestry.annotations;
   
  +import org.apache.hivemind.Location;
   import org.apache.tapestry.enhance.EnhancementOperation;
   import org.apache.tapestry.enhance.InjectComponentWorker;
   import org.apache.tapestry.spec.IComponentSpecification;
  @@ -36,18 +37,19 @@
   
       public void testDelegation()
       {
  +        Location l = newLocation();
           EnhancementOperation op = newOp();
           IComponentSpecification spec = newSpec();
   
           InjectComponentWorker delegate = (InjectComponentWorker) newMock(InjectComponentWorker.class);
   
  -        delegate.injectComponent(op, "fred", "fredField");
  +        delegate.injectComponent(op, "fred", "fredField", l);
   
           replayControls();
   
           InjectComponentAnnotationWorker worker = new InjectComponentAnnotationWorker(delegate);
   
  -        worker.performEnhancement(op, spec, findMethod(AnnotatedPage.class, "getFredField"), null);
  +        worker.performEnhancement(op, spec, findMethod(AnnotatedPage.class, "getFredField"), l);
   
           verifyControls();
       }
  
  
  
  1.4       +5 -2      jakarta-tapestry/annotations/src/test/org/apache/tapestry/annotations/TestInjectStateAnnotationWorker.java
  
  Index: TestInjectStateAnnotationWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/annotations/src/test/org/apache/tapestry/annotations/TestInjectStateAnnotationWorker.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TestInjectStateAnnotationWorker.java	2 Jul 2005 22:51:24 -0000	1.3
  +++ TestInjectStateAnnotationWorker.java	27 Jul 2005 22:24:48 -0000	1.4
  @@ -14,6 +14,7 @@
   
   package org.apache.tapestry.annotations;
   
  +import org.apache.hivemind.Location;
   import org.apache.tapestry.engine.state.ApplicationStateManager;
   import org.apache.tapestry.enhance.EnhancementOperation;
   import org.apache.tapestry.enhance.InjectStateWorker;
  @@ -37,18 +38,20 @@
   
       public void testDelegation()
       {
  +        Location l = newLocation();
  +
           EnhancementOperation op = newOp();
           IComponentSpecification spec = newSpec();
   
           InjectStateWorker delegate = (InjectStateWorker) newMock(InjectStateWorker.class);
   
  -        delegate.injectState(op, "barneyASO", "barney");
  +        delegate.injectState(op, "barneyASO", "barney", l);
   
           replayControls();
   
           InjectStateAnnotationWorker worker = new InjectStateAnnotationWorker(delegate);
   
  -        worker.performEnhancement(op, spec, findMethod(AnnotatedPage.class, "getBarney"), null);
  +        worker.performEnhancement(op, spec, findMethod(AnnotatedPage.class, "getBarney"), l);
   
           verifyControls();
       }
  
  
  
  1.4       +12 -6     jakarta-tapestry/annotations/src/test/org/apache/tapestry/annotations/TestMessageAnnotationWorker.java
  
  Index: TestMessageAnnotationWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/annotations/src/test/org/apache/tapestry/annotations/TestMessageAnnotationWorker.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TestMessageAnnotationWorker.java	8 Jul 2005 05:53:39 -0000	1.3
  +++ TestMessageAnnotationWorker.java	27 Jul 2005 22:24:48 -0000	1.4
  @@ -18,6 +18,7 @@
   import java.lang.reflect.Modifier;
   
   import org.apache.hivemind.ApplicationRuntimeException;
  +import org.apache.hivemind.Location;
   import org.apache.hivemind.Messages;
   import org.apache.hivemind.impl.DefaultClassResolver;
   import org.apache.hivemind.service.MethodSignature;
  @@ -98,6 +99,7 @@
   
       public void testSetterIsClaimed()
       {
  +        Location l = newLocation();
           EnhancementOperation op = newOp();
           IComponentSpecification spec = newSpec();
   
  @@ -106,45 +108,49 @@
           op.addMethod(
                   Modifier.PUBLIC,
                   new MethodSignature(method),
  -                "{\n  return getMessages().getMessage(\"like-getter\");\n}\n");
  +                "{\n  return getMessages().getMessage(\"like-getter\");\n}\n",
  +                l);
           op.claimProperty("likeGetter");
   
           replayControls();
   
  -        new MessageAnnotationWorker().performEnhancement(op, spec, method, null);
  +        new MessageAnnotationWorker().performEnhancement(op, spec, method, l);
   
           verifyControls();
       }
   
       private void attempt(String methodName, String codeBlock)
       {
  +        Location l = newLocation();
           EnhancementOperation op = newOp();
           IComponentSpecification spec = newSpec();
   
           Method method = findMethod(AnnotatedPage.class, methodName);
   
  -        op.addMethod(Modifier.PUBLIC, new MethodSignature(method), codeBlock);
  +        op.addMethod(Modifier.PUBLIC, new MethodSignature(method), codeBlock, l);
   
           replayControls();
   
  -        new MessageAnnotationWorker().performEnhancement(op, spec, method, null);
  +        new MessageAnnotationWorker().performEnhancement(op, spec, method, l);
   
           verifyControls();
       }
   
       private Object construct(Class baseClass, String methodName, Messages messages)
       {
  +        Location l = newLocation();
  +
           ComponentSpecification spec = new ComponentSpecification();
           EnhancementOperationImpl op = new EnhancementOperationImpl(getClassResolver(), spec,
                   baseClass, new ClassFactoryImpl());
   
           op.addInjectedField("_messages", Messages.class, messages);
   
  -        EnhanceUtils.createSimpleAccessor(op, "_messages", "messages", Messages.class);
  +        EnhanceUtils.createSimpleAccessor(op, "_messages", "messages", Messages.class, l);
   
           Method method = findMethod(baseClass, methodName);
   
  -        new MessageAnnotationWorker().performEnhancement(op, spec, method, null);
  +        new MessageAnnotationWorker().performEnhancement(op, spec, method, l);
   
           ComponentConstructor cc = op.getConstructor();
   
  
  
  
  1.4       +5 -2      jakarta-tapestry/annotations/src/test/org/apache/tapestry/annotations/TestInjectAssetAnnotationWorker.java
  
  Index: TestInjectAssetAnnotationWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/annotations/src/test/org/apache/tapestry/annotations/TestInjectAssetAnnotationWorker.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TestInjectAssetAnnotationWorker.java	2 Jul 2005 22:51:24 -0000	1.3
  +++ TestInjectAssetAnnotationWorker.java	27 Jul 2005 22:24:48 -0000	1.4
  @@ -16,6 +16,7 @@
   
   import java.lang.reflect.Method;
   
  +import org.apache.hivemind.Location;
   import org.apache.tapestry.enhance.EnhancementOperation;
   import org.apache.tapestry.enhance.InjectAssetWorker;
   import org.apache.tapestry.spec.IComponentSpecification;
  @@ -37,6 +38,8 @@
   
       public void testDelegation()
       {
  +        Location l = newLocation();
  +
           EnhancementOperation op = newOp();
           IComponentSpecification spec = newSpec();
   
  @@ -44,13 +47,13 @@
   
           Method m = findMethod(AnnotatedPage.class, "getStylesheetAsset");
   
  -        delegate.injectAsset(op, "stylesheet", "stylesheetAsset");
  +        delegate.injectAsset(op, "stylesheet", "stylesheetAsset", l);
   
           replayControls();
   
           InjectAssetAnnotationWorker worker = new InjectAssetAnnotationWorker(delegate);
   
  -        worker.performEnhancement(op, spec, m, null);
  +        worker.performEnhancement(op, spec, m, l);
   
           verifyControls();
       }
  
  
  
  1.14      +17 -7     jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestSpecifiedPropertyWorker.java
  
  Index: TestSpecifiedPropertyWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestSpecifiedPropertyWorker.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- TestSpecifiedPropertyWorker.java	8 Jul 2005 14:45:13 -0000	1.13
  +++ TestSpecifiedPropertyWorker.java	27 Jul 2005 22:24:49 -0000	1.14
  @@ -99,7 +99,14 @@
   
       public void testAddNormal() throws Exception
       {
  -        IComponentSpecification spec = buildComponentSpecification("fred", "boolean", false);
  +        Location l = newLocation();
  +
  +        IComponentSpecification spec = buildComponentSpecification(buildPropertySpecs(
  +                "fred",
  +                "boolean",
  +                false,
  +                l,
  +                null));
   
           // Training
   
  @@ -119,10 +126,11 @@
           op.addMethod(
                   Modifier.PUBLIC,
                   new MethodSignature(boolean.class, "isFred", null, null),
  -                "return _$fred;");
  +                "return _$fred;",
  +                l);
   
           op.addMethod(Modifier.PUBLIC, new MethodSignature(void.class, "setFred", new Class[]
  -        { boolean.class }, null), "{\n  _$fred = $1;\n}\n");
  +        { boolean.class }, null), "{\n  _$fred = $1;\n}\n", l);
   
           op.addField("_$fred$default", boolean.class);
   
  @@ -178,10 +186,11 @@
           op.addMethod(
                   Modifier.PUBLIC,
                   new MethodSignature(List.class, "getFred", null, null),
  -                "return _$fred;");
  +                "return _$fred;",
  +                l);
   
           op.addMethod(Modifier.PUBLIC, new MethodSignature(void.class, "setFred", new Class[]
  -        { List.class }, null), "{\n  _$fred = $1;\n}\n");
  +        { List.class }, null), "{\n  _$fred = $1;\n}\n", l);
   
           op.addInjectedField(
                   "_$fred$initialValueBindingCreator",
  @@ -241,7 +250,8 @@
           op.addMethod(
                   Modifier.PUBLIC,
                   new MethodSignature(String.class, "getBarney", null, null),
  -                "return _$barney;");
  +                "return _$barney;",
  +                null);
   
           BodyBuilder b = new BodyBuilder();
           b.begin();
  @@ -250,7 +260,7 @@
           b.end();
   
           op.addMethod(Modifier.PUBLIC, new MethodSignature(void.class, "setBarney", new Class[]
  -        { String.class }, null), b.toString());
  +        { String.class }, null), b.toString(), null);
   
           op.addField("_$barney$default", String.class);
   
  
  
  
  1.4       +12 -7     jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectMetaWorker.java
  
  Index: TestInjectMetaWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectMetaWorker.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TestInjectMetaWorker.java	7 Jun 2005 17:41:40 -0000	1.3
  +++ TestInjectMetaWorker.java	27 Jul 2005 22:24:49 -0000	1.4
  @@ -16,6 +16,7 @@
   
   import java.lang.reflect.Modifier;
   
  +import org.apache.hivemind.Location;
   import org.apache.hivemind.service.BodyBuilder;
   import org.apache.hivemind.service.MethodSignature;
   import org.apache.hivemind.test.HiveMindTestCase;
  @@ -33,12 +34,13 @@
    */
   public class TestInjectMetaWorker extends HiveMindTestCase
   {
  -    private InjectSpecification newSpec(String propertyName, String object)
  +    private InjectSpecification newSpec(String propertyName, String object, Location location)
       {
           InjectSpecificationImpl result = new InjectSpecificationImpl();
   
           result.setProperty(propertyName);
           result.setObject(object);
  +        result.setLocation(location);
   
           return result;
       }
  @@ -50,7 +52,8 @@
   
       public void testPrimitive()
       {
  -        InjectSpecification spec = newSpec("fooBar", "foo.bar");
  +        Location l = newLocation();
  +        InjectSpecification spec = newSpec("fooBar", "foo.bar", l);
   
           ComponentPropertySource source = newSource();
   
  @@ -76,7 +79,7 @@
           builder.addln("return java.lang.Integer.parseInt(meta);");
           builder.end();
   
  -        op.addMethod(Modifier.PUBLIC, sig, builder.toString());
  +        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), l);
   
           replayControls();
   
  @@ -91,7 +94,8 @@
   
       public void testCharacter()
       {
  -        InjectSpecification spec = newSpec("fooBar", "foo.bar");
  +        Location l = newLocation();
  +        InjectSpecification spec = newSpec("fooBar", "foo.bar", l);
   
           ComponentPropertySource source = newSource();
   
  @@ -117,7 +121,7 @@
           builder.addln("return meta.charAt(0);");
           builder.end();
   
  -        op.addMethod(Modifier.PUBLIC, sig, builder.toString());
  +        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), l);
   
           replayControls();
   
  @@ -132,7 +136,8 @@
   
       public void testObject()
       {
  -        InjectSpecification spec = newSpec("fooBar", "foo.bar");
  +        Location l = newLocation();
  +        InjectSpecification spec = newSpec("fooBar", "foo.bar", l);
   
           ComponentPropertySource source = newSource();
           ValueConverter converter = (ValueConverter) newMock(ValueConverter.class);
  @@ -165,7 +170,7 @@
           builder.addln("return (java.lang.Object) vc.coerceValue(meta, _$Object);");
           builder.end();
   
  -        op.addMethod(Modifier.PUBLIC, sig, builder.toString());
  +        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), l);
   
           replayControls();
   
  
  
  
  1.3       +4 -3      jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectComponentWorker.java
  
  Index: TestInjectComponentWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectComponentWorker.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TestInjectComponentWorker.java	18 Apr 2005 17:07:50 -0000	1.2
  +++ TestInjectComponentWorker.java	27 Jul 2005 22:24:49 -0000	1.3
  @@ -70,7 +70,8 @@
   
       public void testSuccess()
       {
  -        IComponentSpecification spec = newSpec("fred", "barney", null);
  +        Location l = newLocation();
  +        IComponentSpecification spec = newSpec("fred", "barney", l);
           MockControl control = newControl(EnhancementOperation.class);
           EnhancementOperation op = (EnhancementOperation) control.getMock();
   
  @@ -87,7 +88,7 @@
           op.addMethod(
                   Modifier.PUBLIC,
                   new MethodSignature(IComponent.class, "getBarney", null, null),
  -                "return _$barney;");
  +                "return _$barney;", l);
   
           op.extendMethodImplementation(
                   IComponent.class,
  @@ -103,7 +104,7 @@
   
       public void testFailure()
       {
  -        Location l = fabricateLocation(99);
  +        Location l = newLocation();
           Throwable ex = new ApplicationRuntimeException(EnhanceMessages.claimedProperty("barney"));
   
           MockControl control = newControl(EnhancementOperation.class);
  
  
  
  1.6       +8 -13     jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectMessagesWorker.java
  
  Index: TestInjectMessagesWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectMessagesWorker.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- TestInjectMessagesWorker.java	7 Jun 2005 17:41:40 -0000	1.5
  +++ TestInjectMessagesWorker.java	27 Jul 2005 22:24:49 -0000	1.6
  @@ -18,9 +18,9 @@
   
   import org.apache.hivemind.ApplicationRuntimeException;
   import org.apache.hivemind.ErrorLog;
  +import org.apache.hivemind.Location;
   import org.apache.hivemind.Messages;
   import org.apache.hivemind.service.BodyBuilder;
  -import org.apache.hivemind.test.HiveMindTestCase;
   import org.apache.tapestry.BaseComponent;
   import org.apache.tapestry.services.ComponentMessagesSource;
   import org.apache.tapestry.spec.IComponentSpecification;
  @@ -32,13 +32,8 @@
    * @author Howard M. Lewis Ship
    * @since 4.0
    */
  -public class TestInjectMessagesWorker extends HiveMindTestCase
  +public class TestInjectMessagesWorker extends BaseEnhancementTestCase
   {
  -    private IComponentSpecification newSpec()
  -    {
  -        return (IComponentSpecification) newMock(IComponentSpecification.class);
  -    }
  -
       private ComponentMessagesSource newSource()
       {
           return (ComponentMessagesSource) newMock(ComponentMessagesSource.class);
  @@ -46,10 +41,10 @@
   
       public void testSuccess()
       {
  -
  +        Location l = newLocation();
           InjectMessagesWorker w = new InjectMessagesWorker();
   
  -        IComponentSpecification spec = newSpec();
  +        IComponentSpecification spec = newSpec(l);
           ComponentMessagesSource source = newSource();
   
           MockControl control = newControl(EnhancementOperation.class);
  @@ -67,7 +62,7 @@
           builder.end();
   
           op.addField("_$messages", Messages.class);
  -        op.addMethod(Modifier.PUBLIC, w.METHOD_SIGNATURE, builder.toString());
  +        op.addMethod(Modifier.PUBLIC, w.METHOD_SIGNATURE, builder.toString(), l);
   
           replayControls();
   
  @@ -80,13 +75,13 @@
   
       public void testFailure()
       {
  -
  +        Location l = newLocation();
           InjectMessagesWorker w = new InjectMessagesWorker();
   
           Throwable ex = new ApplicationRuntimeException(EnhanceMessages
                   .claimedProperty(w.MESSAGES_PROPERTY));
   
  -        IComponentSpecification spec = newSpec();
  +        IComponentSpecification spec = newSpec(l);
   
           MockControl control = newControl(EnhancementOperation.class);
           EnhancementOperation op = (EnhancementOperation) control.getMock();
  @@ -101,7 +96,7 @@
   
           log.error(
                   EnhanceMessages.errorAddingProperty(w.MESSAGES_PROPERTY, BaseComponent.class, ex),
  -                null,
  +                l,
                   ex);
   
           replayControls();
  
  
  
  1.2       +21 -12    jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectPageWorker.java
  
  Index: TestInjectPageWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectPageWorker.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestInjectPageWorker.java	19 Jun 2005 16:06:29 -0000	1.1
  +++ TestInjectPageWorker.java	27 Jul 2005 22:24:49 -0000	1.2
  @@ -45,10 +45,7 @@
   
           replayControls();
   
  -        InjectSpecification is = new InjectSpecificationImpl();
  -        is.setProperty("somePage");
  -        is.setObject("SomePage");
  -        is.setLocation(l);
  +        InjectSpecification is = newSpec(l);
   
           try
           {
  @@ -66,12 +63,24 @@
           verifyControls();
       }
   
  +    private InjectSpecification newSpec(Location l)
  +    {
  +        InjectSpecification is = new InjectSpecificationImpl();
  +        is.setProperty("somePage");
  +        is.setObject("SomePage");
  +        is.setLocation(l);
  +
  +        return is;
  +    }
  +
       /**
        * Test for when there's no existing property.
        */
   
       public void testNoPropertyType()
       {
  +        Location l = newLocation();
  +
           MockControl opc = newControl(EnhancementOperation.class);
           EnhancementOperation op = (EnhancementOperation) opc.getMock();
   
  @@ -88,13 +97,12 @@
           op.addMethod(
                   Modifier.PUBLIC,
                   sig,
  -                "return getPage().getRequestCycle().getPage(\"SomePage\");");
  +                "return getPage().getRequestCycle().getPage(\"SomePage\");",
  +                l);
   
           replayControls();
   
  -        InjectSpecification is = new InjectSpecificationImpl();
  -        is.setProperty("somePage");
  -        is.setObject("SomePage");
  +        InjectSpecification is = newSpec(l);
   
           new InjectPageWorker().performEnhancement(op, is);
   
  @@ -103,6 +111,8 @@
   
       public void testExistingPropertyType()
       {
  +        Location l = newLocation();
  +
           MockControl opc = newControl(EnhancementOperation.class);
           EnhancementOperation op = (EnhancementOperation) opc.getMock();
   
  @@ -123,13 +133,12 @@
                   .addMethod(
                           Modifier.PUBLIC,
                           sig,
  -                        "return (org.apache.tapestry.html.BasePage)getPage().getRequestCycle().getPage(\"SomePage\");");
  +                        "return (org.apache.tapestry.html.BasePage)getPage().getRequestCycle().getPage(\"SomePage\");",
  +                        l);
   
           replayControls();
   
  -        InjectSpecification is = new InjectSpecificationImpl();
  -        is.setProperty("somePage");
  -        is.setObject("SomePage");
  +        InjectSpecification is = newSpec(l);
   
           new InjectPageWorker().performEnhancement(op, is);
   
  
  
  
  1.6       +6 -8      jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectSpecificationWorker.java
  
  Index: TestInjectSpecificationWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectSpecificationWorker.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- TestInjectSpecificationWorker.java	7 Jun 2005 17:41:40 -0000	1.5
  +++ TestInjectSpecificationWorker.java	27 Jul 2005 22:24:49 -0000	1.6
  @@ -31,19 +31,17 @@
    * @author Howard M. Lewis Ship
    * @since 4.0
    */
  -public class TestInjectSpecificationWorker extends HiveMindTestCase
  +public class TestInjectSpecificationWorker extends BaseEnhancementTestCase
   {
  -    private IComponentSpecification newSpec()
  -    {
  -        return (IComponentSpecification) newMock(IComponentSpecification.class);
  -    }
   
       public void testSuccess() throws Exception
       {
  +        Location l = newLocation();
  +        
           MockControl control = newControl(EnhancementOperation.class);
           EnhancementOperation op = (EnhancementOperation) control.getMock();
   
  -        IComponentSpecification spec = newSpec();
  +        IComponentSpecification spec = newSpec(l);
   
           op.claimProperty("specification");
   
  @@ -54,7 +52,7 @@
           control.setReturnValue("getSpecification");
   
           op.addMethod(Modifier.PUBLIC, new MethodSignature(IComponentSpecification.class,
  -                "getSpecification", null, null), "return _$specification;");
  +                "getSpecification", null, null), "return _$specification;", l);
   
           replayControls();
   
  @@ -65,7 +63,7 @@
   
       public void testFailure()
       {
  -        Location l = fabricateLocation(11);
  +        Location l = newLocation();
   
           MockControl control = newControl(EnhancementOperation.class);
           EnhancementOperation op = (EnhancementOperation) control.getMock();
  
  
  
  1.7       +4 -3      jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectStateWorker.java
  
  Index: TestInjectStateWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectStateWorker.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- TestInjectStateWorker.java	7 Jun 2005 17:41:40 -0000	1.6
  +++ TestInjectStateWorker.java	27 Jul 2005 22:24:49 -0000	1.7
  @@ -53,7 +53,8 @@
   
       public void testSuccess()
       {
  -        InjectSpecification spec = newSpec("fred", "barney", null);
  +        Location l = newLocation();
  +        InjectSpecification spec = newSpec("fred", "barney", l);
           MockControl opc = newControl(EnhancementOperation.class);
           EnhancementOperation op = (EnhancementOperation) opc.getMock();
   
  @@ -83,7 +84,7 @@
   
           MethodSignature sig = new MethodSignature(Map.class, "getFred", null, null);
   
  -        op.addMethod(Modifier.PUBLIC, sig, builder.toString());
  +        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), l);
   
           builder.clear();
           builder.begin();
  @@ -94,7 +95,7 @@
           sig = new MethodSignature(void.class, "setFred", new Class[]
           { Map.class }, null);
   
  -        op.addMethod(Modifier.PUBLIC, sig, builder.toString());
  +        op.addMethod(Modifier.PUBLIC, sig, builder.toString(), l);
           op.extendMethodImplementation(
                   PageDetachListener.class,
                   EnhanceUtils.PAGE_DETACHED_SIGNATURE,
  
  
  
  1.6       +10 -4     jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestAbstractPropertyWorker.java
  
  Index: TestAbstractPropertyWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestAbstractPropertyWorker.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- TestAbstractPropertyWorker.java	18 Apr 2005 17:07:50 -0000	1.5
  +++ TestAbstractPropertyWorker.java	27 Jul 2005 22:24:49 -0000	1.6
  @@ -34,10 +34,15 @@
    * @author Howard M. Lewis Ship
    * @since 4.0
    */
  -public class TestAbstractPropertyWorker extends HiveMindTestCase
  +public class TestAbstractPropertyWorker extends BaseEnhancementTestCase
   {
  +
       public void testSuccess()
       {
  +        Location l = newLocation();
  +
  +        IComponentSpecification spec = newSpec(l);
  +
           MockControl opc = newControl(EnhancementOperation.class);
           EnhancementOperation op = (EnhancementOperation) opc.getMock();
   
  @@ -56,10 +61,11 @@
           op.addMethod(
                   Modifier.PUBLIC,
                   new MethodSignature(String.class, "getFred", null, null),
  -                "return _$fred;");
  +                "return _$fred;",
  +                l);
   
           op.addMethod(Modifier.PUBLIC, new MethodSignature(void.class, "setFred", new Class[]
  -        { String.class }, null), "_$fred = $1;");
  +        { String.class }, null), "_$fred = $1;", l);
   
           op.extendMethodImplementation(
                   IComponent.class,
  @@ -75,7 +81,7 @@
   
           replayControls();
   
  -        new AbstractPropertyWorker().performEnhancement(op, null);
  +        new AbstractPropertyWorker().performEnhancement(op, spec);
   
           verifyControls();
       }
  
  
  
  1.19      +53 -2     jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestEnhancementOperation.java
  
  Index: TestEnhancementOperation.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestEnhancementOperation.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- TestEnhancementOperation.java	8 Jul 2005 14:45:13 -0000	1.18
  +++ TestEnhancementOperation.java	27 Jul 2005 22:24:49 -0000	1.19
  @@ -436,6 +436,8 @@
   
       public void testAddMethod()
       {
  +        Location l = newLocation();
  +
           Class baseClass = Insert.class;
           MethodSignature sig = new MethodSignature(void.class, "frob", null, null);
   
  @@ -461,7 +463,56 @@
           EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
                   baseClass, cf);
   
  -        eo.addMethod(Modifier.PUBLIC, sig, "method body");
  +        eo.addMethod(Modifier.PUBLIC, sig, "method body", l);
  +
  +        verifyControls();
  +    }
  +
  +    public void testAddMethodDuplicate()
  +    {
  +        Location firstLocation = newLocation();
  +        Location secondLocation = newLocation();
  +
  +        Class baseClass = Insert.class;
  +        MethodSignature sig = new MethodSignature(void.class, "frob", null, null);
  +
  +        IComponentSpecification spec = newSpec();
  +
  +        MockControl cfc = newControl(ClassFactory.class);
  +        ClassFactory cf = (ClassFactory) cfc.getMock();
  +
  +        MockControl fabc = newControl(ClassFab.class);
  +        ClassFab fab = (ClassFab) fabc.getMock();
  +
  +        // We force the uid to 97 in setUp()
  +
  +        cf.newClass("$Insert_97", baseClass);
  +
  +        cfc.setReturnValue(fab);
  +
  +        fab.addMethod(Modifier.PUBLIC, sig, "method body");
  +        fabc.setReturnValue(null);
  +
  +        replayControls();
  +
  +        EnhancementOperation eo = new EnhancementOperationImpl(new DefaultClassResolver(), spec,
  +                baseClass, cf);
  +
  +        eo.addMethod(Modifier.PUBLIC, sig, "method body", firstLocation);
  +
  +        try
  +        {
  +            eo.addMethod(Modifier.PUBLIC, sig, "second method body", secondLocation);
  +            unreachable();
  +        }
  +        catch (ApplicationRuntimeException ex)
  +        {
  +            assertEquals(
  +                    "A new implementation of method 'void frob()' conflicts with an existing "
  +                            + "implementation (at classpath:/org/apache/tapestry/enhance/TestEnhancementOperation, line 1).",
  +                    ex.getMessage());
  +            assertSame(secondLocation, ex.getLocation());
  +        }
   
           verifyControls();
       }
  @@ -511,7 +562,7 @@
           String ref2 = eo.getClassReference(Map.class);
   
           eo.addMethod(Modifier.PUBLIC, new MethodSignature(Class.class, "getClassReference", null,
  -                null), "return " + ref + ";");
  +                null), "return " + ref + ";", l);
   
           ComponentConstructor cc = eo.getConstructor();
   
  
  
  
  1.13      +22 -10    jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestParameterPropertyWorker.java
  
  Index: TestParameterPropertyWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestParameterPropertyWorker.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- TestParameterPropertyWorker.java	21 Jul 2005 13:17:57 -0000	1.12
  +++ TestParameterPropertyWorker.java	27 Jul 2005 22:24:49 -0000	1.13
  @@ -176,7 +176,8 @@
           op.addMethod(
                   Modifier.PUBLIC,
                   new MethodSignature(String.class, "getFred", null, null),
  -                builder.toString());
  +                builder.toString(),
  +                null);
   
           builder.clear();
   
  @@ -203,7 +204,7 @@
           builder.end();
   
           op.addMethod(Modifier.PUBLIC, new MethodSignature(void.class, "setFred", new Class[]
  -        { String.class }, null), builder.toString());
  +        { String.class }, null), builder.toString(), null);
   
           BodyBuilder expectedCleanup = new BodyBuilder();
   
  @@ -235,11 +236,12 @@
   
       public void testDifferentPropertyName()
       {
  +        Location l = newLocation();
           IComponentSpecification spec = buildComponentSpecification("myparam", buildParameterSpec(
                   "myparam",
                   "fred",
                   null,
  -                null));
  +                l));
   
           MockControl opc = newControl(EnhancementOperation.class);
           EnhancementOperation op = (EnhancementOperation) opc.getMock();
  @@ -277,7 +279,8 @@
           op.addMethod(
                   Modifier.PUBLIC,
                   new MethodSignature(String.class, "getFred", null, null),
  -                builder.toString());
  +                builder.toString(),
  +                l);
   
           builder.clear();
   
  @@ -304,11 +307,12 @@
           builder.end();
   
           op.addMethod(Modifier.PUBLIC, new MethodSignature(void.class, "setFred", new Class[]
  -        { String.class }, null), builder.toString());
  +        { String.class }, null), builder.toString(), l);
   
           BodyBuilder expectedCleanup = new BodyBuilder();
   
  -        expectedCleanup.addln("org.apache.tapestry.IBinding fredBinding = getBinding(\"myparam\");");
  +        expectedCleanup
  +                .addln("org.apache.tapestry.IBinding fredBinding = getBinding(\"myparam\");");
           expectedCleanup.addln("if (_$fred$Cached && ! fredBinding.isInvariant())");
           expectedCleanup.begin();
           expectedCleanup.addln("_$fred$Cached = false;");
  @@ -331,6 +335,8 @@
   
       public void testPrimitiveType()
       {
  +        Location l = newLocation();
  +
           MockControl opc = newControl(EnhancementOperation.class);
           EnhancementOperation op = (EnhancementOperation) opc.getMock();
   
  @@ -355,7 +361,8 @@
           op.addMethod(
                   Modifier.PUBLIC,
                   new MethodSignature(boolean.class, "isFred", null, null),
  -                builder.toString());
  +                builder.toString(),
  +                l);
   
           replayControls();
   
  @@ -367,13 +374,16 @@
                   "_$fred",
                   "_$fred$Default",
                   "_$fred$Cached",
  -                true);
  +                true,
  +                l);
   
           verifyControls();
       }
   
       public void testParameterCacheDisabled()
       {
  +        Location l = newLocation();
  +
           MockControl opc = newControl(EnhancementOperation.class);
           EnhancementOperation op = (EnhancementOperation) opc.getMock();
   
  @@ -398,7 +408,8 @@
           op.addMethod(
                   Modifier.PUBLIC,
                   new MethodSignature(boolean.class, "isFred", null, null),
  -                builder.toString());
  +                builder.toString(),
  +                l);
   
           replayControls();
   
  @@ -410,7 +421,8 @@
                   "_$fred",
                   "_$fred$Default",
                   "_$fred$Cached",
  -                false);
  +                false,
  +                l);
   
           verifyControls();
       }
  
  
  
  1.4       +6 -4      jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectBeanWorker.java
  
  Index: TestInjectBeanWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectBeanWorker.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TestInjectBeanWorker.java	18 Apr 2005 17:07:50 -0000	1.3
  +++ TestInjectBeanWorker.java	27 Jul 2005 22:24:49 -0000	1.4
  @@ -69,7 +69,8 @@
   
       public void testSuccess()
       {
  -        IComponentSpecification spec = newSpec("fred", "barney", null);
  +        Location l = newLocation();
  +        IComponentSpecification spec = newSpec("fred", "barney", l);
           MockControl control = newControl(EnhancementOperation.class);
           EnhancementOperation op = (EnhancementOperation) control.getMock();
   
  @@ -84,12 +85,13 @@
           op.addMethod(
                   Modifier.PUBLIC,
                   new MethodSignature(ArrayList.class, "getBarney", null, null),
  -                "return (java.util.ArrayList) getBeans().getBean(\"fred\");");
  +                "return (java.util.ArrayList) getBeans().getBean(\"fred\");",
  +                l);
   
           replayControls();
  -        
  +
           new InjectBeanWorker().performEnhancement(op, spec);
  -        
  +
           verifyControls();
       }
   
  
  
  
  1.5       +2 -2      jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectScriptWorker.java
  
  Index: TestInjectScriptWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectScriptWorker.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TestInjectScriptWorker.java	16 Jun 2005 12:03:18 -0000	1.4
  +++ TestInjectScriptWorker.java	27 Jul 2005 22:24:49 -0000	1.5
  @@ -40,7 +40,7 @@
           MockControl opc = newControl(EnhancementOperation.class);
           EnhancementOperation op = (EnhancementOperation) opc.getMock();
   
  -        Location componentSpecLocation = fabricateLocation(22);
  +        Location componentSpecLocation = newLocation();
           final Resource scriptResource = componentSpecLocation.getResource().getRelativeResource(
                   "bar.script");
   
  @@ -77,7 +77,7 @@
   
           MethodSignature sig = new MethodSignature(IScript.class, "getFoo", null, null);
   
  -        op.addMethod(Modifier.PUBLIC, sig, "return _script.getScript();");
  +        op.addMethod(Modifier.PUBLIC, sig, "return _script.getScript();", injectSpecLocation);
   
           replayControls();
   
  
  
  
  1.5       +4 -3      jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectObjectWorker.java
  
  Index: TestInjectObjectWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectObjectWorker.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TestInjectObjectWorker.java	9 Jul 2005 16:40:31 -0000	1.4
  +++ TestInjectObjectWorker.java	27 Jul 2005 22:24:49 -0000	1.5
  @@ -71,14 +71,15 @@
           // When the same bean is injected multiple times, the field name
           // returned won't match the field name suggested; make sure the code
           // generation used the correct field name.
  -        
  +
           op.addInjectedField("_$fred", Object.class, injectedValue);
           opc.setReturnValue("_$gnarly");
   
           op.addMethod(
                   Modifier.PUBLIC,
                   new MethodSignature(Object.class, "getFred", null, null),
  -                "return _$gnarly;");
  +                "return _$gnarly;",
  +                l);
   
           replayControls();
   
  @@ -115,7 +116,7 @@
           opc.setReturnValue("_$wilma");
   
           op.addMethod(Modifier.PUBLIC, new MethodSignature(IEngineService.class, "getWilma", null,
  -                null), "return _$wilma;");
  +                null), "return _$wilma;", l);
   
           replayControls();
   
  
  
  
  1.4       +9 -5      jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectAssetWorker.java
  
  Index: TestInjectAssetWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/TestInjectAssetWorker.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TestInjectAssetWorker.java	8 Jul 2005 14:45:13 -0000	1.3
  +++ TestInjectAssetWorker.java	27 Jul 2005 22:24:49 -0000	1.4
  @@ -70,7 +70,8 @@
   
       public void testSuccess()
       {
  -        IComponentSpecification spec = newSpec("fred", "barney", null);
  +        Location l = newLocation();
  +        IComponentSpecification spec = newSpec("fred", "barney", l);
           MockControl control = newControl(EnhancementOperation.class);
           EnhancementOperation op = (EnhancementOperation) control.getMock();
   
  @@ -87,7 +88,8 @@
           op.addMethod(
                   Modifier.PUBLIC,
                   new MethodSignature(IAsset.class, "getBarney", null, null),
  -                "return _$barney;");
  +                "return _$barney;",
  +                l);
   
           op.extendMethodImplementation(
                   IComponent.class,
  @@ -103,7 +105,7 @@
   
       public void testFailure()
       {
  -        Location l = fabricateLocation(99);
  +        Location l = newLocation();
           Throwable ex = new ApplicationRuntimeException(EnhanceMessages.claimedProperty("barney"));
   
           MockControl control = newControl(EnhancementOperation.class);
  @@ -150,12 +152,14 @@
           InjectAssetWorker w = new InjectAssetWorker();
           try
           {
  -            w.injectAsset(op, "fred", "barney");
  +            w.injectAsset(op, "fred", "barney", null);
               unreachable();
           }
           catch (ApplicationRuntimeException ex)
           {
  -            assertEquals("Property barney is type org.apache.tapestry.IComponent, which is not compatible with the expected type, org.apache.tapestry.IAsset.", ex.getMessage());
  +            assertEquals(
  +                    "Property barney is type org.apache.tapestry.IComponent, which is not compatible with the expected type, org.apache.tapestry.IAsset.",
  +                    ex.getMessage());
           }
   
           verifyControls();
  
  
  
  1.1                  jakarta-tapestry/framework/src/test/org/apache/tapestry/enhance/BaseEnhancementTestCase.java
  
  Index: BaseEnhancementTestCase.java
  ===================================================================
  package org.apache.tapestry.enhance;
  
  import org.apache.hivemind.Location;
  import org.apache.hivemind.test.HiveMindTestCase;
  import org.apache.tapestry.spec.IComponentSpecification;
  import org.easymock.MockControl;
  
  /**
   * Base class for common utilities when testing enhancement workers.
   * 
   * @author Howard Lewis Ship
   * @since 4.0
   */
  public abstract class BaseEnhancementTestCase extends HiveMindTestCase
  {
      public IComponentSpecification newSpec(Location location)
      {
          MockControl control = newControl(IComponentSpecification.class);
          IComponentSpecification spec = (IComponentSpecification) control.getMock();
  
          spec.getLocation();
          control.setReturnValue(location);
  
          return spec;
      }
  
      protected IComponentSpecification newSpec()
      {
          return (IComponentSpecification) newMock(IComponentSpecification.class);
      }
  }
  
  
  
  1.3       +8 -4      jakarta-tapestry/framework/src/java/org/apache/tapestry/test/CreatePropertyWorker.java
  
  Index: CreatePropertyWorker.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/test/CreatePropertyWorker.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- CreatePropertyWorker.java	18 Apr 2005 17:06:43 -0000	1.2
  +++ CreatePropertyWorker.java	27 Jul 2005 22:24:49 -0000	1.3
  @@ -14,6 +14,7 @@
   
   package org.apache.tapestry.test;
   
  +import org.apache.hivemind.Location;
   import org.apache.tapestry.enhance.EnhanceUtils;
   import org.apache.tapestry.enhance.EnhancementOperation;
   import org.apache.tapestry.enhance.EnhancementWorker;
  @@ -28,11 +29,14 @@
    */
   public class CreatePropertyWorker implements EnhancementWorker
   {
  -    private String _propertyName;
  +    private final String _propertyName;
   
  -    public CreatePropertyWorker(String propertyName)
  +    private final Location _location;
  +
  +    public CreatePropertyWorker(String propertyName, Location location)
       {
           _propertyName = propertyName;
  +        _location = location;
       }
   
       public void performEnhancement(EnhancementOperation op, IComponentSpecification spec)
  @@ -45,8 +49,8 @@
   
           op.addField(field, propertyType);
   
  -        EnhanceUtils.createSimpleAccessor(op, field, _propertyName, propertyType);
  +        EnhanceUtils.createSimpleAccessor(op, field, _propertyName, propertyType, _location);
   
  -        EnhanceUtils.createSimpleMutator(op, field, _propertyName, propertyType);
  +        EnhanceUtils.createSimpleMutator(op, field, _propertyName, propertyType, _location);
       }
   }
  \ No newline at end of file
  
  
  
  1.11      +10 -3     jakarta-tapestry/framework/src/java/org/apache/tapestry/test/Creator.java
  
  Index: Creator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/test/Creator.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- Creator.java	18 Apr 2005 17:06:43 -0000	1.10
  +++ Creator.java	27 Jul 2005 22:24:49 -0000	1.11
  @@ -24,6 +24,7 @@
   import org.apache.commons.logging.LogFactory;
   import org.apache.hivemind.ApplicationRuntimeException;
   import org.apache.hivemind.ClassResolver;
  +import org.apache.hivemind.Location;
   import org.apache.hivemind.impl.DefaultClassResolver;
   import org.apache.hivemind.service.ClassFactory;
   import org.apache.hivemind.service.impl.ClassFactoryImpl;
  @@ -34,6 +35,7 @@
   import org.apache.tapestry.enhance.EnhancementWorker;
   import org.apache.tapestry.services.ComponentConstructor;
   import org.apache.tapestry.spec.ComponentSpecification;
  +import org.apache.tapestry.spec.IComponentSpecification;
   
   /**
    * A utility class that is used to instantiate abstract Tapestry pages and components. It creates,
  @@ -68,11 +70,13 @@
       private List _workers = new ArrayList();
   
       {
  +        Location location = new CreatorLocation();
  +
           // Overrride AbstractComponent's implementations of
           // these two properties (making them read/write).
   
  -        _workers.add(new CreatePropertyWorker("messages"));
  -        _workers.add(new CreatePropertyWorker("specification"));
  +        _workers.add(new CreatePropertyWorker("messages", location));
  +        _workers.add(new CreatePropertyWorker("specification", location));
   
           // Implement any abstract properties.
           // Note that we don't bother setting the errorLog property
  @@ -89,12 +93,15 @@
           EnhancementOperationImpl op = new EnhancementOperationImpl(_classResolver,
                   new ComponentSpecification(), inputClass, _classFactory);
   
  +        IComponentSpecification spec = new ComponentSpecification();
  +        spec.setLocation(new CreatorLocation());
  +
           Iterator i = _workers.iterator();
           while (i.hasNext())
           {
               EnhancementWorker worker = (EnhancementWorker) i.next();
   
  -            worker.performEnhancement(op, null);
  +            worker.performEnhancement(op, spec);
           }
   
           return op.getConstructor();
  
  
  
  1.1                  jakarta-tapestry/framework/src/java/org/apache/tapestry/test/CreatorLocation.java
  
  Index: CreatorLocation.java
  ===================================================================
  package org.apache.tapestry.test;
  
  import org.apache.hivemind.Location;
  import org.apache.hivemind.Resource;
  
  /**
   * Fake {@link org.apache.hivemind.Location} used by {@link org.apache.tapestry.test.Creator} when
   * adding properties to a class.
   * 
   * @author Howard Lewis Ship
   * @since 4.0
   */
  public class CreatorLocation implements Location
  {
      public String toString()
      {
          return "[Creator Location]";
      }
  
      public Resource getResource()
      {
          return null;
      }
  
      public int getLineNumber()
      {
          return 0;
      }
  
      public int getColumnNumber()
      {
          return 0;
      }
  
  }
  
  
  
  1.14      +7 -4      jakarta-tapestry/framework/src/test/org/apache/tapestry/junit/TestComponentMessages.java
  
  Index: TestComponentMessages.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/junit/TestComponentMessages.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- TestComponentMessages.java	12 May 2005 18:18:19 -0000	1.13
  +++ TestComponentMessages.java	27 Jul 2005 22:24:49 -0000	1.14
  @@ -40,6 +40,7 @@
   import org.apache.tapestry.spec.IComponentSpecification;
   import org.apache.tapestry.spec.ILibrarySpecification;
   import org.apache.tapestry.spec.LibrarySpecification;
  +import org.apache.tapestry.test.CreatorLocation;
   
   /**
    * Tests the class {@link org.apache.tapestry.services.impl.ComponentMessagesSourceImpl}.
  @@ -116,7 +117,8 @@
        * much as the full framework would do at runtime.
        */
   
  -    private IPage newPage(IComponentSpecification specification, ComponentMessagesSource source, Locale locale)
  +    private IPage newPage(IComponentSpecification specification, ComponentMessagesSource source,
  +            Locale locale)
       {
           ClassFactory classFactory = new ClassFactoryImpl();
   
  @@ -125,11 +127,11 @@
   
           InjectMessagesWorker injectMessages = new InjectMessagesWorker();
           injectMessages.setComponentMessagesSource(source);
  -        
  +
           injectMessages.performEnhancement(op, specification);
  -        
  +
           new InjectSpecificationWorker().performEnhancement(op, specification);
  -            
  +
           IPage result = (IPage) op.getConstructor().newInstance();
   
           result.setLocale(locale);
  @@ -144,6 +146,7 @@
           source.setComponentPropertySource(new NullComponentPropertySource());
   
           IComponentSpecification spec = newSpec(location);
  +        spec.setLocation(new CreatorLocation());
   
           IPage page = newPage(spec, source, locale);
   
  
  
  
  1.177     +1 -0      jakarta-tapestry/status.xml
  
  Index: status.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/status.xml,v
  retrieving revision 1.176
  retrieving revision 1.177
  diff -u -r1.176 -r1.177
  --- status.xml	27 Jul 2005 17:05:50 -0000	1.176
  +++ status.xml	27 Jul 2005 22:24:49 -0000	1.177
  @@ -56,6 +56,7 @@
         <action type="fix" dev="HLS" fixes-bug="TAPESTRY-444">regexp validator(Email) script function name mismatch</action>
         <action type="fix" dev="HLS" fixes-bug="TAPESTRY-446">Changes to assets are not picked up, even when caching is disabled</action>
         <action type="fix" dev="HLS" fixes-bug="TAPESTRY-435,TAPESTRY-325,TAPESTRY-309,TAPESTRY-311,TAPESTRY-252,TAPESTRY-254,TAPESTRY-327,TAPESTRY-333" due-to="Our many international users">Add many translations of ValidationStrings.properties.</action>
  +      <action type="fix" dev="HLS" fixes-bug="TAPESTRY-441">Poor reporting of duplicate method implementations</action>
       </release>
       <release version="4.0-beta-3" date="Jul 22 2005">
         <action type="fix" dev="HLS" fixes-bug="TAPESTRY-398" due-to="Jonas Maurus">HiveMind configuration error breaks the useage of the state: binding prefix</action>
  
  
  
  1.10      +2 -0      jakarta-tapestry/framework/src/java/org/apache/tapestry/resolver/PageSpecificationResolverImpl.java
  
  Index: PageSpecificationResolverImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/resolver/PageSpecificationResolverImpl.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- PageSpecificationResolverImpl.java	12 Jun 2005 15:27:16 -0000	1.9
  +++ PageSpecificationResolverImpl.java	27 Jul 2005 22:24:50 -0000	1.10
  @@ -17,6 +17,7 @@
   import org.apache.commons.logging.Log;
   import org.apache.hivemind.ApplicationRuntimeException;
   import org.apache.hivemind.Resource;
  +import org.apache.hivemind.impl.LocationImpl;
   import org.apache.tapestry.INamespace;
   import org.apache.tapestry.IRequestCycle;
   import org.apache.tapestry.PageNotFoundException;
  @@ -237,6 +238,7 @@
           IComponentSpecification specification = new ComponentSpecification();
           specification.setPageSpecification(true);
           specification.setSpecificationLocation(resource);
  +        specification.setLocation(new LocationImpl(resource));
   
           setSpecification(specification);
   
  
  
  

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