You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jo...@gmail.com on 2010/09/11 06:52:59 UTC

Generics Support - trying out rietveld code reviewer (issue2140047)

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: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org


Re: Generics Support - trying out rietveld code reviewer (issue2140047)

Posted by Josh Canfield <jo...@gmail.com>.
Hey Igor.

There is a NPE that I've fixed last night, I found it implementing the grid example from the user list. If you have a page class that implements a generic interface the generic superclass can be null. I'll post the updated patch in a couple hours (not at my computer).

-- Josh

On Sep 11, 2010, at 4:38 PM, Igor Drobiazko <ig...@gmail.com> 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, <jo...@gmail.com> 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: dev-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: dev-help@tapestry.apache.org
>> 
>> 
> 
> 
> -- 
> Best regards,
> 
> Igor Drobiazko
> http://tapestry5.de

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


Re: Generics Support - trying out rietveld code reviewer (issue2140047)

Posted by Josh Canfield <jo...@gmail.com>.
> 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.

I found my problem and it's in the jdk5/6 implementation of
Introspector, not tapestry.

http://bugs.sun.com/view_bug.do?bug_id=6528714

I'm adding code to ClassPropertyAdapterImpl that detects when the
Introspector returns a synthetic method and grabs the most specific
version (calls getDeclaredClass() with the same method name). You
could theoretically have multiple synthetic methods if you implement
an interface that extends a hierarchy of interfaces that each redefine
the same method using multiple levels of specificity.

Here is the specific diff for this change.
http://codereview.appspot.com/2140047/diff/17001/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassPropertyAdapterImpl.java?context=10&column_width=120

Josh

On Sun, Sep 12, 2010 at 11:05 AM, Josh Canfield <jo...@gmail.com> wrote:
> 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 <ig...@gmail.com> 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, <jo...@gmail.com> 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: dev-unsubscribe@tapestry.apache.org
>>> For additional commands, e-mail: dev-help@tapestry.apache.org
>>>
>>>
>>
>>
>> --
>> Best regards,
>>
>> Igor Drobiazko
>> http://tapestry5.de
>



-- 
--
http://www.bodylabgym.com - a private, by appointment only, one-on-one
health and fitness facility.
--
http://www.ectransition.com - Quality Electronic Cigarettes at a
reasonable price!
--
TheDailyTube.com. Sign up and get the best new videos on the internet
delivered fresh to your inbox.

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


Re: Generics Support - trying out rietveld code reviewer (issue2140047)

Posted by Josh Canfield <jo...@gmail.com>.
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 <ig...@gmail.com> 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, <jo...@gmail.com> 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: dev-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: dev-help@tapestry.apache.org
>> 
>> 
> 
> 
> -- 
> Best regards,
> 
> Igor Drobiazko
> http://tapestry5.de

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


Re: Generics Support - trying out rietveld code reviewer (issue2140047)

Posted by Igor Drobiazko <ig...@gmail.com>.
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, <jo...@gmail.com> 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: dev-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: dev-help@tapestry.apache.org
>
>


-- 
Best regards,

Igor Drobiazko
http://tapestry5.de