sure it should but shouldn't we use annotated type methods instead of
pure reflection?


Romain Manni-Bucau
@rmannibucau
http://www.tomitribe.com
http://rmannibucau.wordpress.com
https://github.com/rmannibucau


2015-02-12 14:41 GMT+01:00 Joseph Bergmark <[email protected]>:
> I need to write a quick unit test to verify, but I think this may still be
> missing non-public inherited methods.
>
> Previously it only used getDeclaredMethods, which would return all all
> private, protected, default and public methods for the class, but did not
> contain any inherited methods.  If I'm reading this change correctly it now
> adds getMethods which will add public inherited methods but still doesn't
> include protected or default methods.
>
> I wonder if we should walk up the class hierarchy and call
> getDeclaredMethods at each step.  Might need to discard private methods
> found in superclasses as I'm not sure we need to worry about those being
> called on the proxy.
>
> On Tue, Feb 10, 2015 at 9:57 AM, <[email protected]> wrote:
>
>> Author: tandraschko
>> Date: Tue Feb 10 14:57:07 2015
>> New Revision: 1658730
>>
>> URL: http://svn.apache.org/r1658730
>> Log:
>> OWB-1036 NormalScoped ASM proxies broken in some cases for partial beans
>>
>> Added:
>>
>> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/beans/PartialBeanClass.java
>>
>> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/beans/PartialBeanClassSuperClass.java
>>
>> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/beans/PartialBeanClassSuperInterface.java
>> Modified:
>>
>> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
>>
>> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/NormalScopeProxyFactoryTest.java
>>
>> Modified:
>> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
>> URL:
>> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java?rev=1658730&r1=1658729&r2=1658730&view=diff
>>
>> ==============================================================================
>> ---
>> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
>> (original)
>> +++
>> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
>> Tue Feb 10 14:57:07 2015
>> @@ -305,8 +305,22 @@ public final class ClassUtil
>>                                               Map<String, List<Method>>
>> methodMap, List<Method> allMethods,
>>                                               Class<?> clazz)
>>      {
>> +        List<Method> temp = new
>> ArrayList<Method>(Arrays.asList(clazz.getMethods()));
>>          for (Method method : clazz.getDeclaredMethods())
>>          {
>> +            if (!temp.contains(method))
>> +            {
>> +                temp.add(method);
>> +            }
>> +        }
>> +
>> +        for (Method method : temp)
>> +        {
>> +                       if (allMethods.contains(method))
>> +                       {
>> +                               continue;
>> +                       }
>> +
>>              if (method.isBridge())
>>              {
>>                  // we have no interest in generics bridge methods
>>
>> Modified:
>> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/NormalScopeProxyFactoryTest.java
>> URL:
>> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/NormalScopeProxyFactoryTest.java?rev=1658730&r1=1658729&r2=1658730&view=diff
>>
>> ==============================================================================
>> ---
>> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/NormalScopeProxyFactoryTest.java
>> (original)
>> +++
>> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/NormalScopeProxyFactoryTest.java
>> Tue Feb 10 14:57:07 2015
>> @@ -38,6 +38,7 @@ import java.lang.reflect.Type;
>>  import java.net.URL;
>>  import java.net.URLClassLoader;
>>  import java.util.Set;
>> +import
>> org.apache.webbeans.test.interceptors.factory.beans.PartialBeanClass;
>>
>>  import static org.junit.Assert.assertNotNull;
>>
>> @@ -207,6 +208,40 @@ public class NormalScopeProxyFactoryTest
>>
>>      }
>>
>> +    @Test
>> +    public void textPartialBeanProxyCreation() throws Exception
>> +    {
>> +        NormalScopeProxyFactory pf = new NormalScopeProxyFactory(new
>> WebBeansContext());
>> +
>> +        // we take a fresh URLClassLoader to not blur the test classpath
>> with synthetic classes.
>> +        ClassLoader classLoader = new URLClassLoader(new URL[0]);
>> +
>> +        Class<PartialBeanClass> proxyClass =
>> pf.createProxyClass(classLoader, PartialBeanClass.class);
>> +        Assert.assertNotNull(proxyClass);
>> +
>> +        PartialBeanClass internalInstance = new PartialBeanClass()
>> +        {
>> +            @Override
>> +            public String willFail2()
>> +            {
>> +                return "";
>> +            }
>> +
>> +            @Override
>> +            public String willFail()
>> +            {
>> +                return "";
>> +            }
>> +        };
>> +
>> +        TestContextualInstanceProvider provider = new
>> TestContextualInstanceProvider(internalInstance);
>> +
>> +        PartialBeanClass proxy = pf.createProxyInstance(proxyClass,
>> provider);
>> +
>> +        proxy.willFail();
>> +        proxy.willFail2();
>> +        proxy.willFail3();
>> +    }
>>
>>      /**
>>       * Test if protected and package scope methods are proxied as well.
>>
>> Added:
>> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/beans/PartialBeanClass.java
>> URL:
>> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/beans/PartialBeanClass.java?rev=1658730&view=auto
>>
>> ==============================================================================
>> ---
>> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/beans/PartialBeanClass.java
>> (added)
>> +++
>> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/beans/PartialBeanClass.java
>> Tue Feb 10 14:57:07 2015
>> @@ -0,0 +1,30 @@
>> +/*
>> + * Licensed to the Apache Software Foundation (ASF) under one
>> + * or more contributor license agreements. See the NOTICE file
>> + * distributed with this work for additional information
>> + * regarding copyright ownership. The ASF licenses this file
>> + * to you under the Apache License, Version 2.0 (the
>> + * "License"); you may not use this file except in compliance
>> + * with the License. You may obtain a copy of the License at
>> + *
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing,
>> + * software distributed under the License is distributed on an
>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>> + * KIND, either express or implied. See the License for the
>> + * specific language governing permissions and limitations
>> + * under the License.
>> + */
>> +package org.apache.webbeans.test.interceptors.factory.beans;
>> +
>> +import javax.enterprise.context.ApplicationScoped;
>> +
>> +@ApplicationScoped
>> +public abstract class PartialBeanClass extends PartialBeanClassSuperClass
>> implements PartialBeanClassSuperInterface
>> +{
>> +    public String willFail3()
>> +    {
>> +        return "";
>> +    }
>> +}
>>
>> Added:
>> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/beans/PartialBeanClassSuperClass.java
>> URL:
>> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/beans/PartialBeanClassSuperClass.java?rev=1658730&view=auto
>>
>> ==============================================================================
>> ---
>> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/beans/PartialBeanClassSuperClass.java
>> (added)
>> +++
>> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/beans/PartialBeanClassSuperClass.java
>> Tue Feb 10 14:57:07 2015
>> @@ -0,0 +1,24 @@
>> +/*
>> + * Licensed to the Apache Software Foundation (ASF) under one
>> + * or more contributor license agreements. See the NOTICE file
>> + * distributed with this work for additional information
>> + * regarding copyright ownership. The ASF licenses this file
>> + * to you under the Apache License, Version 2.0 (the
>> + * "License"); you may not use this file except in compliance
>> + * with the License. You may obtain a copy of the License at
>> + *
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing,
>> + * software distributed under the License is distributed on an
>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>> + * KIND, either express or implied. See the License for the
>> + * specific language governing permissions and limitations
>> + * under the License.
>> + */
>> +package org.apache.webbeans.test.interceptors.factory.beans;
>> +
>> +public abstract class PartialBeanClassSuperClass
>> +{
>> +    public abstract String willFail2();
>> +}
>>
>> Added:
>> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/beans/PartialBeanClassSuperInterface.java
>> URL:
>> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/beans/PartialBeanClassSuperInterface.java?rev=1658730&view=auto
>>
>> ==============================================================================
>> ---
>> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/beans/PartialBeanClassSuperInterface.java
>> (added)
>> +++
>> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/interceptors/factory/beans/PartialBeanClassSuperInterface.java
>> Tue Feb 10 14:57:07 2015
>> @@ -0,0 +1,24 @@
>> +/*
>> + * Licensed to the Apache Software Foundation (ASF) under one
>> + * or more contributor license agreements. See the NOTICE file
>> + * distributed with this work for additional information
>> + * regarding copyright ownership. The ASF licenses this file
>> + * to you under the Apache License, Version 2.0 (the
>> + * "License"); you may not use this file except in compliance
>> + * with the License. You may obtain a copy of the License at
>> + *
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing,
>> + * software distributed under the License is distributed on an
>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>> + * KIND, either express or implied. See the License for the
>> + * specific language governing permissions and limitations
>> + * under the License.
>> + */
>> +package org.apache.webbeans.test.interceptors.factory.beans;
>> +
>> +public interface PartialBeanClassSuperInterface
>> +{
>> +    public String willFail();
>> +}
>>
>>
>>

Reply via email to