Found a couple issues with pages that implement generic interfaces. It appears 
as though the interface methods are getting copied into the transformed class 
which causes the wrong return type to be found when doing any reflection. The 
screwy thing is that both methods are in the class but with different return 
types. Even screwier is that the order that the methods are declared in the 
class changes reliably depending on how the page class is first accessed. If I 
hit the page directly it works fine, but going through a link the methods are 
ordered differently and the interface method is returned.

I'm working on figuring out why the interface methods are added to the class 
but I'm away from my computer for the next several hours so I thought I'd put 
this out there in case someone was looking at my patch. 

Or, maybe someone can tell me why and I won't have to track it down!

-- Josh

On Sep 11, 2010, at 4:38 PM, Igor Drobiazko <[email protected]> wrote:

> Hi Josh,
> 
> looks promising. I applied the patch and was able run the build
> successfully. More comments follow tomorrow.
> 
> On Sat, Sep 11, 2010 at 6:52 AM, <[email protected]> wrote:
> 
>> Reviewers: dev_tapestry.apache.org,
>> 
>> Description:
>> Added support for injected generic services. You can now implement the
>> same service interface multiple times with different type parameters,
>> and inject it using the generic interface.
>> Made Loop generic and added public getters for index and value. No more
>> need to add properties to the page or use the var binding for simple
>> object rendering loops.
>> Updated PropertyWorker, Transform* to copy generic field signature to
>> created getter.
>> Updated GenericsUtils/PropertyConduitSourceImpl to more fully support
>> wildcard and parameterized types.
>> Added tests for everything
>> 
>> Please review this at http://codereview.appspot.com/2140047/
>> 
>> Affected files:
>> 
>> tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Loop.java
>> 
>> tapestry-core/src/main/java/org/apache/tapestry5/internal/services/DefaultInjectionProvider.java
>> 
>> tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java
>> 
>> tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImpl.java
>> 
>> tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ServiceInjectionProvider.java
>> 
>> tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/PropertyWorker.java
>> 
>> tapestry-core/src/main/java/org/apache/tapestry5/services/TransformField.java
>> 
>> tapestry-core/src/main/java/org/apache/tapestry5/services/TransformMethodSignature.java
>> tapestry-core/src/test/app1/GenericLoopDemo.tml
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/LoopTests.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/base/GenericLister.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/ExoticPet.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/Person.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/Pet.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/SubscribeData.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/data/ToDoItem.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/BaseGenericLoopDemo.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/GenericLoopDemo.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PersonLister.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PetLister.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/ToDoList.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/GenericDatabase.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/GenericDatabaseImpl.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/GenericDatabaseItem.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/PersonDatabaseImpl.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/PetDatabase.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/PetDatabaseImpl.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/ToDoDatabase.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/ToDoDatabaseImpl.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/TypedObjectDatabase.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/internal/services/PropertyConduitSourceImplTest.java
>> 
>> tapestry-core/src/test/java/org/apache/tapestry5/internal/test/InternalBaseTestCase.java
>> 
>> tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/base/GenericLister.tml
>> tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/ObjectLocator.java
>> 
>> tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/DefaultModuleDefImpl.java
>> 
>> tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/IOCInternalTestCase.java
>> 
>> tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/IOCMessages.java
>> 
>> tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/InternalRegistry.java
>> 
>> tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/InternalServiceDef.java
>> tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/Module.java
>> 
>> tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ModuleImpl.java
>> 
>> tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ObjectLocatorImpl.java
>> 
>> tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryImpl.java
>> 
>> tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/RegistryWrapper.java
>> 
>> tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/ServiceDefImpl.java
>> 
>> tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/MasterObjectProviderImpl.java
>> 
>> tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/GenericsUtils.java
>> 
>> tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/util/InternalUtils.java
>> 
>> tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/MasterObjectProvider.java
>> tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/test/IOCTestCase.java
>> 
>> tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/ServiceBuilderMethodInvokerTest.java
>> 
>> tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/MasterObjectProviderImplTest.java
>> 
>> tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/BaseGenericBean.java
>> 
>> tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/GenericUtilsTest.java
>> 
>> tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/GenericsAssumptionsTest.java
>> 
>> tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/NonGenericBean.java
>> 
>> tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/Pair.java
>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>> 
>> 
> 
> 
> -- 
> Best regards,
> 
> Igor Drobiazko
> http://tapestry5.de

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to