[Design the new POJO MicroContainer] - Re: UnwrapValueUnitTestCase.testCollectionUnwrap failure on
by adrian@jboss.org
"alesj" wrote :
| And you're 'unlucky' that weak value is still cached under "interface java.util.Set".
| Hence you get integer Set --> Integer component type.
|
I don't know that luck comes into it, since AFAIK java requires the
ParameterizedType to be held as a strong reference until the testCollectionUnWrap
method finishes (that is its scope of definition).
Just in case that is not true, I changed the method to ensure that a strong ref is held
| public void testCollectionUnwrap() throws Exception
| {
| Integer i1 = 123;
| Integer i2 = 123;
| Type hold = getType("Integer", Set.class);
| checkCollection(new HashSet<Integer>(), i1, i2);
| checkCollection(new HashSet<Integer>(), Set.class, i1, i2);
| checkCollection(new HashSet<Integer>(), hold, i1, i2);
|
| TestEnum one = TestEnum.ONE;
| TestEnum two = TestEnum.TWO;
| TestEnum three = TestEnum.THREE;
| checkCollection(new HashSet<TestEnum>(), one, two, three, one);
| checkCollection(new HashSet<TestEnum>(), Set.class, one, two, three, one);
| checkCollection(new HashSet<TestEnum>(), getType("Enum", Set.class), one, two, three, one);
|
| System.out.println(hold); // We still hold a reference
| }
|
And I still can't reproduce the problem.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4190878#4190878
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4190878
17 years, 4 months
[Design the new POJO MicroContainer] - Re: UnwrapValueUnitTestCase.testCollectionUnwrap failure on
by adrian@jboss.org
"alesj" wrote :
| So, JBMAN-38 is purely JBREFLECT-7's result.
| Who's gonna bite into JBREFLECT-7, Adrian? :-)
What makes you think JBREFLECT-7 is causing this?
The toString() of the parameterized types are clearly different so they
shouldn't conflict in the cache.
I added some System.out.printlns to DefaultMetaTypeFactory
| Index: src/main/java/org/jboss/metatype/plugins/types/DefaultMetaTypeFactory.java
| ===================================================================
| --- src/main/java/org/jboss/metatype/plugins/types/DefaultMetaTypeFactory.java (revision 81358)
| +++ src/main/java/org/jboss/metatype/plugins/types/DefaultMetaTypeFactory.java (working copy)
| @@ -133,10 +133,14 @@
| {
| // Generate it
| result = generate(typeInfo);
| +
| +System.out.println(typeInfo + " ==> " + result);
|
| // Cache it
| typeInfo.setAttachment(MetaType.class.getName(), result);
| }
| +
| +System.out.println(typeInfo + " <== " + result);
|
| // Return the result
| return result;
|
And modified the test to just the Set retrieval you point to.
The output I get is:
| 0 DEBUG [UnwrapValueUnitTestCase] ==== Starting testCollectionUnwrap ====
| ReflectClassInfoImpl(a)3570b0{name=java.lang.Object} ==> MutableCompositeMetaType{java.lang.Object}
| ReflectClassInfoImpl(a)3570b0{name=java.lang.Object} <== MutableCompositeMetaType{java.lang.Object}
| ReflectClassInfoImpl(a)982589{name=java.util.HashSet} ==> CollectionMetaType{type=java.util.HashSet elementType=MutableCompositeMetaType{java.
| lang.Object}
| ReflectClassInfoImpl(a)982589{name=java.util.HashSet} <== CollectionMetaType{type=java.util.HashSet elementType=MutableCompositeMetaType{java.
| lang.Object}
| java.lang.Integer ==> SimpleMetaType:java.lang.Integer
| java.lang.Integer <== SimpleMetaType:java.lang.Integer
| ReflectClassInfoImpl(a)982589{name=java.util.HashSet} <== CollectionMetaType{type=java.util.HashSet elementType=MutableCompositeMetaType{java.
| lang.Object}
| java.lang.Integer <== SimpleMetaType:java.lang.Integer
| ReflectClassInfoImpl(a)3570b0{name=java.lang.Object} <== MutableCompositeMetaType{java.lang.Object}
| ReflectClassInfoImpl(a)a9c09e{name=java.util.Set} ==> CollectionMetaType{type=java.util.Set elementType=MutableCompositeMetaType{java.lang.Obj
| ect}
| ReflectClassInfoImpl(a)a9c09e{name=java.util.Set} <== CollectionMetaType{type=java.util.Set elementType=MutableCompositeMetaType{java.lang.Obj
| ect}
| java.lang.Integer <== SimpleMetaType:java.lang.Integer
| java.lang.Integer <== SimpleMetaType:java.lang.Integer
|
| HERE you can see the parameterized type for Set<Integer>
|
| ParameterizedClassInfo(a)a4e743{java.util.Set<java.lang.Integer>} ==> CollectionMetaType{type=java.util.Set elementType=SimpleMetaType:java.la
| ng.Integer
| ParameterizedClassInfo(a)a4e743{java.util.Set<java.lang.Integer>} <== CollectionMetaType{type=java.util.Set elementType=SimpleMetaType:java.la
| ng.Integer
| java.lang.Integer <== SimpleMetaType:java.lang.Integer
| ReflectClassInfoImpl(a)982589{name=java.util.HashSet} <== CollectionMetaType{type=java.util.HashSet elementType=MutableCompositeMetaType{java.
| lang.Object}
| EnumInfoImpl(a)14c194d{name=org.jboss.test.metatype.values.factory.support.TestEnum} ==> org.jboss.test.metatype.values.factory.support.TestEn
| um{[ONE, TWO, THREE]}
| EnumInfoImpl(a)14c194d{name=org.jboss.test.metatype.values.factory.support.TestEnum} <== org.jboss.test.metatype.values.factory.support.TestEn
| um{[ONE, TWO, THREE]}
| EnumInfoImpl(a)14c194d{name=org.jboss.test.metatype.values.factory.support.TestEnum} <== org.jboss.test.metatype.values.factory.support.TestEn
| um{[ONE, TWO, THREE]}
| EnumInfoImpl(a)14c194d{name=org.jboss.test.metatype.values.factory.support.TestEnum} <== org.jboss.test.metatype.values.factory.support.TestEn
| um{[ONE, TWO, THREE]}
| ReflectClassInfoImpl(a)982589{name=java.util.HashSet} <== CollectionMetaType{type=java.util.HashSet elementType=MutableCompositeMetaType{java.
| lang.Object}
| EnumInfoImpl(a)14c194d{name=org.jboss.test.metatype.values.factory.support.TestEnum} <== org.jboss.test.metatype.values.factory.support.TestEn
| um{[ONE, TWO, THREE]}
| EnumInfoImpl(a)14c194d{name=org.jboss.test.metatype.values.factory.support.TestEnum} <== org.jboss.test.metatype.values.factory.support.TestEn
| um{[ONE, TWO, THREE]}
| EnumInfoImpl(a)14c194d{name=org.jboss.test.metatype.values.factory.support.TestEnum} <== org.jboss.test.metatype.values.factory.support.TestEn
| um{[ONE, TWO, THREE]}
| ReflectClassInfoImpl(a)a9c09e{name=java.util.Set} <== CollectionMetaType{type=java.util.Set elementType=MutableCompositeMetaType{java.lang.Obj
| ect}
| EnumInfoImpl(a)14c194d{name=org.jboss.test.metatype.values.factory.support.TestEnum} <== org.jboss.test.metatype.values.factory.support.TestEn
| um{[ONE, TWO, THREE]}
| EnumInfoImpl(a)14c194d{name=org.jboss.test.metatype.values.factory.support.TestEnum} <== org.jboss.test.metatype.values.factory.support.TestEn
| um{[ONE, TWO, THREE]}
| EnumInfoImpl(a)14c194d{name=org.jboss.test.metatype.values.factory.support.TestEnum} <== org.jboss.test.metatype.values.factory.support.TestEn
| um{[ONE, TWO, THREE]}
| EnumInfoImpl(a)14c194d{name=org.jboss.test.metatype.values.factory.support.TestEnum} <== org.jboss.test.metatype.values.factory.support.TestEn
| um{[ONE, TWO, THREE]}
|
| HERE you can see the parameterized type for Set<TestEnum>
|
| ParameterizedClassInfo(a)1cbfe9d{java.util.Set<org.jboss.test.metatype.values.factory.support.TestEnum>} ==> CollectionMetaType{type=java.util
| .Set elementType=org.jboss.test.metatype.values.factory.support.TestEnum{[ONE, TWO, THREE]}
| ParameterizedClassInfo(a)1cbfe9d{java.util.Set<org.jboss.test.metatype.values.factory.support.TestEnum>} <== CollectionMetaType{type=java.util
| .Set elementType=org.jboss.test.metatype.values.factory.support.TestEnum{[ONE, TWO, THREE]}
| EnumInfoImpl(a)14c194d{name=org.jboss.test.metatype.values.factory.support.TestEnum} <== org.jboss.test.metatype.values.factory.support.TestEn
| um{[ONE, TWO, THREE]}
| EnumInfoImpl(a)14c194d{name=org.jboss.test.metatype.values.factory.support.TestEnum} <== org.jboss.test.metatype.values.factory.support.TestEn
| um{[ONE, TWO, THREE]}
| EnumInfoImpl(a)14c194d{name=org.jboss.test.metatype.values.factory.support.TestEnum} <== org.jboss.test.metatype.values.factory.support.TestEn
| um{[ONE, TWO, THREE]}
| 88 DEBUG [UnwrapValueUnitTestCase] testCollectionUnwrap took 87ms
| 88 DEBUG [UnwrapValueUnitTestCase] ==== Stopping testCollectionUnwrap ====
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4190871#4190871
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4190871
17 years, 4 months