Skip to content

Commit 040fbff

Browse files
author
takeshita
committed
Fix to pass NestedList test.
Make AnyTemplate to none singleton class. Make TemplateRegistry registers templates which uses AnyTemplate to its self.
1 parent 1b90a3f commit 040fbff

5 files changed

Lines changed: 28 additions & 12 deletions

File tree

src/main/java/org/msgpack/template/AnyTemplate.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626

2727
public class AnyTemplate<T> extends AbstractTemplate<T> {
28-
@SuppressWarnings("rawtypes")
28+
/*@SuppressWarnings("rawtypes")
2929
private static AnyTemplate INSTANCE = null;
3030
3131
@SuppressWarnings("rawtypes")
@@ -34,11 +34,11 @@ public static AnyTemplate getInstance(TemplateRegistry registry) {
3434
INSTANCE = new AnyTemplate(registry);
3535
}
3636
return INSTANCE;
37-
}
37+
}*/
3838

3939
private TemplateRegistry registry;
4040

41-
private AnyTemplate(TemplateRegistry registry) {
41+
public AnyTemplate(TemplateRegistry registry) {
4242
this.registry = registry;
4343
}
4444

src/main/java/org/msgpack/template/GenericCollectionTemplate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public class GenericCollectionTemplate implements GenericTemplate {
2929
public GenericCollectionTemplate(TemplateRegistry registry, Class<? extends Template> tmpl) {
3030
try {
3131
constructor = tmpl.getConstructor(new Class<?>[]{ Template.class });
32-
constructor.newInstance(new Object[]{ AnyTemplate.getInstance(registry) });
32+
constructor.newInstance(new Object[]{ new AnyTemplate(registry)});//AnyTemplate.getInstance(registry) });
3333
} catch (NoSuchMethodException e) {
3434
throw new IllegalArgumentException(e);
3535
} catch (InvocationTargetException e) {

src/main/java/org/msgpack/template/GenericMapTemplate.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ public GenericMapTemplate(TemplateRegistry registry, Class<? extends Template> t
3030
try {
3131
constructor = tmpl.getConstructor(new Class<?>[] { Template.class, Template.class });
3232
constructor.newInstance(new Object[] {
33-
AnyTemplate.getInstance(registry), AnyTemplate.getInstance(registry)});
33+
new AnyTemplate(registry),new AnyTemplate(registry)});
34+
//AnyTemplate.getInstance(registry), AnyTemplate.getInstance(registry)});
3435
} catch (NoSuchMethodException e) {
3536
throw new IllegalArgumentException(e);
3637
} catch (InvocationTargetException e) {

src/main/java/org/msgpack/template/TemplateRegistry.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ public TemplateRegistry(TemplateRegistry registry) {
8989
chain = createTemplateBuilderChain();
9090
cache = new HashMap<Type, Template<Type>>();
9191
genericCache = parent.genericCache;
92+
registerTemplatesWhichRefersRegistry();
9293
}
9394

9495
protected TemplateBuilderChain createTemplateBuilderChain(){
@@ -101,6 +102,7 @@ public void setClassLoader(final ClassLoader cl) {
101102
}
102103

103104
private void registerTemplates() {
105+
104106
register(boolean.class, BooleanTemplate.getInstance());
105107
register(Boolean.class, BooleanTemplate.getInstance());
106108
register(byte.class, ByteTemplate.getInstance());
@@ -128,10 +130,23 @@ private void registerTemplates() {
128130
register(byte[].class, ByteArrayTemplate.getInstance());
129131
register(ByteBuffer.class, ByteBufferTemplate.getInstance());
130132
register(Value.class, ValueTemplate.getInstance());
131-
//register(Value.class, AnyTemplate.getInstance(this));
132-
register(List.class, new ListTemplate(AnyTemplate.getInstance(this)));
133-
register(Collection.class, new CollectionTemplate(AnyTemplate.getInstance(this)));
134-
register(Map.class, new MapTemplate(AnyTemplate.getInstance(this), AnyTemplate.getInstance(this)));
133+
registerTemplatesWhichRefersRegistry();
134+
/*register(List.class, new ListTemplate(AnyTemplate.getInstance(this)));
135+
register(Collection.class,new CollectionTemplate(AnyTemplate.getInstance(this)));
136+
register(Map.class,new MapTemplate(AnyTemplate.getInstance(this), AnyTemplate.getInstance(this)));
137+
138+
registerGeneric(List.class, new GenericCollectionTemplate(this, ListTemplate.class));
139+
registerGeneric(Collection.class, new GenericCollectionTemplate(this, CollectionTemplate.class));
140+
registerGeneric(Map.class, new GenericMapTemplate(this, MapTemplate.class));*/
141+
}
142+
143+
144+
protected void registerTemplatesWhichRefersRegistry() {
145+
AnyTemplate anyTemplate = new AnyTemplate(this);
146+
147+
register(List.class, new ListTemplate(anyTemplate));//new ListTemplate(AnyTemplate.getInstance(this)));
148+
register(Collection.class,new CollectionTemplate(anyTemplate));//new CollectionTemplate(AnyTemplate.getInstance(this)));
149+
register(Map.class,new MapTemplate(anyTemplate,anyTemplate));//new MapTemplate(AnyTemplate.getInstance(this), AnyTemplate.getInstance(this)));
135150

136151
registerGeneric(List.class, new GenericCollectionTemplate(this, ListTemplate.class));
137152
registerGeneric(Collection.class, new GenericCollectionTemplate(this, CollectionTemplate.class));

src/test/java/org/msgpack/TestNestedList.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ public void testTestNestedList() throws IOException {
3434

3535
// Can't unpack as NestedList
3636
Value unpacked = messagePack.read(bytes);
37-
ArrayValue root = unpacked.asArrayValue();
37+
ArrayValue root = unpacked.asArrayValue().getElementArray()[0].asArrayValue();
3838
ArrayValue list1 = root.getElementArray()[0].asArrayValue();
3939
ArrayValue list2 = root.getElementArray()[1].asArrayValue();
4040

41-
Assert.assertEquals("aaa",list1.getElementArray()[0].asIntegerValue().getInt());
42-
Assert.assertEquals("bbb",list1.getElementArray()[1].asIntegerValue().getInt());
41+
Assert.assertEquals("aaa",list1.getElementArray()[0].asRawValue().getString());
42+
Assert.assertEquals("bbb",list1.getElementArray()[1].asRawValue().getString());
4343
Assert.assertEquals("obj1",messagePack.convert(list2.getElementArray()[0],MyClass.class).name);
4444
Assert.assertEquals("obj2",messagePack.convert(list2.getElementArray()[1],MyClass.class).name);
4545

0 commit comments

Comments
 (0)