[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