[weld-commits] Weld SVN: r4621 - in core/trunk: impl/src/main/java/org/jboss/weld/bootstrap and 4 other directories.

weld-commits at lists.jboss.org weld-commits at lists.jboss.org
Tue Nov 3 12:34:08 EST 2009


Author: pete.muir at jboss.org
Date: 2009-11-03 12:34:07 -0500 (Tue, 03 Nov 2009)
New Revision: 4621

Added:
   core/trunk/tests/src/test/java/org/jboss/weld/test/unit/reflection/clazz/Koala.java
   core/trunk/tests/src/test/java/org/jboss/weld/test/unit/reflection/clazz/Possum.java
Modified:
   core/trunk/impl/src/main/java/org/jboss/weld/bean/ManagedBean.java
   core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/AbstractBeanDeployer.java
   core/trunk/impl/src/main/java/org/jboss/weld/introspector/ForwardingWeldClass.java
   core/trunk/impl/src/main/java/org/jboss/weld/introspector/WeldClass.java
   core/trunk/impl/src/main/java/org/jboss/weld/introspector/jlr/WeldClassImpl.java
   core/trunk/impl/src/main/java/org/jboss/weld/introspector/jlr/WeldConstructorImpl.java
   core/trunk/impl/src/main/java/org/jboss/weld/util/Reflections.java
   core/trunk/tests/src/test/java/org/jboss/weld/test/unit/reflection/clazz/Kangaroo.java
   core/trunk/tests/src/test/java/org/jboss/weld/test/unit/reflection/clazz/WeldClassTest.java
Log:
WELD-216

Modified: core/trunk/impl/src/main/java/org/jboss/weld/bean/ManagedBean.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/bean/ManagedBean.java	2009-11-03 17:26:42 UTC (rev 4620)
+++ core/trunk/impl/src/main/java/org/jboss/weld/bean/ManagedBean.java	2009-11-03 17:34:07 UTC (rev 4621)
@@ -270,7 +270,7 @@
    @Override
    protected void checkType()
    {
-      if (getAnnotatedItem().isNonStaticMemberClass())
+      if (getAnnotatedItem().isAnonymousClass() || (getAnnotatedItem().isMemberClass() && !getAnnotatedItem().isStatic()))
       {
          throw new DefinitionException("Simple bean " + type + " cannot be a non-static inner class");
       }

Modified: core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/AbstractBeanDeployer.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/AbstractBeanDeployer.java	2009-11-03 17:26:42 UTC (rev 4620)
+++ core/trunk/impl/src/main/java/org/jboss/weld/bootstrap/AbstractBeanDeployer.java	2009-11-03 17:34:07 UTC (rev 4621)
@@ -289,7 +289,7 @@
       JsfApiAbstraction jsfApiAbstraction = manager.getServices().get(JsfApiAbstraction.class);
       ServletApiAbstraction servletApiAbstraction = manager.getServices().get(ServletApiAbstraction.class);
       return !Extension.class.isAssignableFrom(clazz.getJavaClass()) &&
-             !clazz.isNonStaticMemberClass() &&
+             !(clazz.isAnonymousClass() || (clazz.isMemberClass() && !clazz.isStatic())) &&
              !Reflections.isParamerterizedTypeWithWildcard(javaClass) && 
              !servletApiAbstraction.SERVLET_CLASS.isAssignableFrom(javaClass) && 
              !servletApiAbstraction.FILTER_CLASS.isAssignableFrom(javaClass) && 

Modified: core/trunk/impl/src/main/java/org/jboss/weld/introspector/ForwardingWeldClass.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/introspector/ForwardingWeldClass.java	2009-11-03 17:26:42 UTC (rev 4620)
+++ core/trunk/impl/src/main/java/org/jboss/weld/introspector/ForwardingWeldClass.java	2009-11-03 17:34:07 UTC (rev 4621)
@@ -107,10 +107,20 @@
       return delegate().getWeldSuperclass();
    }
 
-   public boolean isNonStaticMemberClass()
+   public boolean isLocalClass()
    {
-      return delegate().isNonStaticMemberClass();
+      return delegate().isLocalClass();
    }
+   
+   public boolean isMemberClass()
+   {
+      return delegate().isMemberClass();
+   }
+   
+   public boolean isAnonymousClass()
+   {
+      return delegate().isAnonymousClass();
+   }
 
    @Override
    public boolean isParameterizedType()

Modified: core/trunk/impl/src/main/java/org/jboss/weld/introspector/WeldClass.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/introspector/WeldClass.java	2009-11-03 17:26:42 UTC (rev 4620)
+++ core/trunk/impl/src/main/java/org/jboss/weld/introspector/WeldClass.java	2009-11-03 17:34:07 UTC (rev 4621)
@@ -207,18 +207,17 @@
     */
    public WeldClass<?> getWeldSuperclass();
 
-   /**
-    * Determine if this is a non-static member class
-    *
-    * @return true if this is a non-static member  
-    */
-   public boolean isNonStaticMemberClass();
-
    public boolean isParameterizedType();
 
    public boolean isAbstract();
 
    public boolean isEnum();
+   
+   public boolean isMemberClass();
+   
+   public boolean isLocalClass();
+   
+   public boolean isAnonymousClass();
 
    public <S> S cast(Object object);
 

Modified: core/trunk/impl/src/main/java/org/jboss/weld/introspector/jlr/WeldClassImpl.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/introspector/jlr/WeldClassImpl.java	2009-11-03 17:26:42 UTC (rev 4620)
+++ core/trunk/impl/src/main/java/org/jboss/weld/introspector/jlr/WeldClassImpl.java	2009-11-03 17:34:07 UTC (rev 4621)
@@ -121,8 +121,10 @@
    // Cached string representation
    private final String toString;
 
-   private final boolean _nonStaticMemberClass;
    private final boolean _abstract;
+   private final boolean _member;
+   private final boolean _local;
+   private final boolean _anonymous;
    private final boolean _enum;
 
    public static <T> WeldClass<T> of(Class<T> clazz, ClassTransformer classTransformer)
@@ -200,7 +202,9 @@
          }
         
       });
-      this._nonStaticMemberClass = Reflections.isNonStaticInnerClass(rawType);
+      this._local = rawType.isLocalClass();
+      this._anonymous = rawType.isAnonymousClass();
+      this._member = rawType.isMemberClass();
       this._abstract = Reflections.isAbstract(rawType);
       this._enum = rawType.isEnum();
 
@@ -538,10 +542,20 @@
       return Collections.unmodifiableSet(annotatedFields.get(annotationType));
    }
 
-   public boolean isNonStaticMemberClass()
+   public boolean isLocalClass()
    {
-      return _nonStaticMemberClass;
+      return _local;
    }
+   
+   public boolean isAnonymousClass()
+   {
+      return _anonymous;
+   }
+   
+   public boolean isMemberClass()
+   {
+      return _member;
+   }
 
    public boolean isAbstract()
    {

Modified: core/trunk/impl/src/main/java/org/jboss/weld/introspector/jlr/WeldConstructorImpl.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/introspector/jlr/WeldConstructorImpl.java	2009-11-03 17:26:42 UTC (rev 4620)
+++ core/trunk/impl/src/main/java/org/jboss/weld/introspector/jlr/WeldConstructorImpl.java	2009-11-03 17:34:07 UTC (rev 4621)
@@ -39,6 +39,7 @@
 import org.jboss.weld.introspector.WeldConstructor;
 import org.jboss.weld.introspector.WeldParameter;
 import org.jboss.weld.resources.ClassTransformer;
+import org.jboss.weld.util.Reflections;
 
 import com.google.common.base.Supplier;
 import com.google.common.collect.ListMultimap;
@@ -116,12 +117,24 @@
          }
       }
       
+      // If the class is a (non-static) member class, its constructors parameterTypes array will prefix the
+      // outer class instance, whilst the genericParameterTypes array isn't prefix'd 
+      int nesting = Reflections.getNesting(declaringClass.getJavaClass());
       for (int i = 0; i < constructor.getParameterTypes().length; i++)
       {
+         int gi = i - nesting;
          if (constructor.getParameterAnnotations()[i].length > 0 || annotatedTypeParameters.containsKey(i))
          {
             Class<?> clazz = constructor.getParameterTypes()[i];
-            Type type = constructor.getGenericParameterTypes()[i];
+            Type type;
+            if (constructor.getGenericParameterTypes().length > gi && gi >=0)
+            {
+               type = constructor.getGenericParameterTypes()[gi];
+            }
+            else
+            {
+               type = clazz;
+            }
             WeldParameter<?, T> parameter = null;
             if (annotatedTypeParameters.containsKey(i))
             {
@@ -144,9 +157,9 @@
          {
             Class<?> clazz = constructor.getParameterTypes()[i];
             Type type;
-            if (constructor.getGenericParameterTypes().length > i)
+            if (constructor.getGenericParameterTypes().length > gi && gi >=0)
             {
-               type = constructor.getGenericParameterTypes()[i];
+               type = constructor.getGenericParameterTypes()[gi];
             }
             else
             {

Modified: core/trunk/impl/src/main/java/org/jboss/weld/util/Reflections.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/util/Reflections.java	2009-11-03 17:26:42 UTC (rev 4620)
+++ core/trunk/impl/src/main/java/org/jboss/weld/util/Reflections.java	2009-11-03 17:34:07 UTC (rev 4621)
@@ -307,6 +307,18 @@
    {
       return Modifier.isFinal(clazz.getModifiers());
    }
+   
+   public static int getNesting(Class<?> clazz)
+   {
+      if (clazz.isMemberClass() && !isStatic(clazz))
+      {
+         return 1 + getNesting(clazz.getDeclaringClass());
+      }
+      else
+      {
+         return 0;
+      }
+   }
 
    /**
     * Checks if member is final
@@ -396,17 +408,6 @@
    }
 
    /**
-    * Checks if class is a non-static inner one
-    * 
-    * @param clazz Class to Check
-    * @return True if static, false otherwise
-    */
-   public static boolean isNonStaticInnerClass(Class<?> clazz)
-   {
-      return (clazz.isMemberClass() || clazz.isAnonymousClass()) && !isStatic(clazz);
-   }
-
-   /**
     * Gets a constructor with matching parameter types
     * 
     * @param <T> The type

Modified: core/trunk/tests/src/test/java/org/jboss/weld/test/unit/reflection/clazz/Kangaroo.java
===================================================================
--- core/trunk/tests/src/test/java/org/jboss/weld/test/unit/reflection/clazz/Kangaroo.java	2009-11-03 17:26:42 UTC (rev 4620)
+++ core/trunk/tests/src/test/java/org/jboss/weld/test/unit/reflection/clazz/Kangaroo.java	2009-11-03 17:34:07 UTC (rev 4621)
@@ -1,14 +1,14 @@
 package org.jboss.weld.test.unit.reflection.clazz;
 
 
-class Kangaroo 
+public class Kangaroo 
 {
    LittleKangarooInHerPouch<String> procreate()
    {
       return new LittleKangarooInHerPouch<String>("Joey");
    }
 
-   class LittleKangarooInHerPouch<T>
+   public class LittleKangarooInHerPouch<T>
    {
       LittleKangarooInHerPouch(T formalParam)
       {

Added: core/trunk/tests/src/test/java/org/jboss/weld/test/unit/reflection/clazz/Koala.java
===================================================================
--- core/trunk/tests/src/test/java/org/jboss/weld/test/unit/reflection/clazz/Koala.java	                        (rev 0)
+++ core/trunk/tests/src/test/java/org/jboss/weld/test/unit/reflection/clazz/Koala.java	2009-11-03 17:34:07 UTC (rev 4621)
@@ -0,0 +1,12 @@
+package org.jboss.weld.test.unit.reflection.clazz;
+
+public class Koala
+{
+   
+   public Animal procreate()
+   {
+      class BabyKoala implements Animal {}
+      return new BabyKoala();
+   }
+
+}


Property changes on: core/trunk/tests/src/test/java/org/jboss/weld/test/unit/reflection/clazz/Koala.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:eol-style
   + native

Added: core/trunk/tests/src/test/java/org/jboss/weld/test/unit/reflection/clazz/Possum.java
===================================================================
--- core/trunk/tests/src/test/java/org/jboss/weld/test/unit/reflection/clazz/Possum.java	                        (rev 0)
+++ core/trunk/tests/src/test/java/org/jboss/weld/test/unit/reflection/clazz/Possum.java	2009-11-03 17:34:07 UTC (rev 4621)
@@ -0,0 +1,12 @@
+package org.jboss.weld.test.unit.reflection.clazz;
+
+
+public class Possum
+{
+   
+   public Possum procreate()
+   {
+      return new Possum() {};
+   }
+
+}


Property changes on: core/trunk/tests/src/test/java/org/jboss/weld/test/unit/reflection/clazz/Possum.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:eol-style
   + native

Modified: core/trunk/tests/src/test/java/org/jboss/weld/test/unit/reflection/clazz/WeldClassTest.java
===================================================================
--- core/trunk/tests/src/test/java/org/jboss/weld/test/unit/reflection/clazz/WeldClassTest.java	2009-11-03 17:26:42 UTC (rev 4620)
+++ core/trunk/tests/src/test/java/org/jboss/weld/test/unit/reflection/clazz/WeldClassTest.java	2009-11-03 17:34:07 UTC (rev 4621)
@@ -22,12 +22,26 @@
    private final ClassTransformer transformer = new ClassTransformer(new TypeStore());
    
    @Test(groups = "broken", description="WELD-216")
-   public void testNonStaticInnerClassWithGenericTypes()
+   public void testMemberClassWithGenericTypes()
    {
       AnnotatedType at = WeldClassImpl.of(new Kangaroo().procreate().getClass(), transformer);
       WeldClassImpl.of(at, transformer);
    }
    
+   @Test(description="WELD-216")
+   public void testLocalClassWithGenericTypes()
+   {
+      AnnotatedType at = WeldClassImpl.of(new Koala().procreate().getClass(), transformer);
+      WeldClassImpl.of(at, transformer);
+   }
+   
+   @Test(description="WELD-216")
+   public void testAnonymousClassWithGenericTypes()
+   {
+      AnnotatedType at = WeldClassImpl.of(new Possum().procreate().getClass(), transformer);
+      WeldClassImpl.of(at, transformer);
+   }
+   
    @Test
    public void testDeclaredAnnotations()
    {



More information about the weld-commits mailing list