Skip to content

Commit 5dd657a

Browse files
author
lexi
committed
Supporting MClassRef as baseTypeInfo.
1 parent 37d2829 commit 5dd657a

File tree

3 files changed

+68
-8
lines changed

3 files changed

+68
-8
lines changed

basics/trunk/tools/src/main/java/org/jvnet/jaxb2_commons/xjc/generator/concrete/CMClassOutlineGenerator.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import org.jvnet.jaxb2_commons.xjc.outline.MPropertyOutline;
99
import org.jvnet.jaxb2_commons.xjc.outline.concrete.CMClassOutline;
1010
import org.jvnet.jaxb2_commons.xml.bind.model.MClassInfo;
11+
import org.jvnet.jaxb2_commons.xml.bind.model.MClassRef;
12+
import org.jvnet.jaxb2_commons.xml.bind.model.MClassTypeInfoVisitor;
1113
import org.jvnet.jaxb2_commons.xml.bind.model.MModelInfo;
1214
import org.jvnet.jaxb2_commons.xml.bind.model.MPropertyInfo;
1315

@@ -30,16 +32,31 @@ public CMClassOutlineGenerator(Outline outline, CClassInfo classInfo) {
3032
this.classInfo = classInfo;
3133
}
3234

33-
public MClassOutline generate(MPackageOutline parent,
35+
public MClassOutline generate(final MPackageOutline parent,
3436
MModelInfo<NType, NClass> modelInfo,
3537
MClassInfo<NType, NClass> classInfo) {
3638

3739
ClassOutline co = outline.getClazz(this.classInfo);
3840

3941
final MClassOutline superClassOutline;
4042
if (classInfo.getBaseTypeInfo() != null) {
41-
superClassOutline = parent.getParent().getClassOutline(
42-
classInfo.getBaseTypeInfo());
43+
superClassOutline = classInfo
44+
.getBaseTypeInfo()
45+
.acceptClassTypeInfoVisitor(
46+
new MClassTypeInfoVisitor<NType, NClass, MClassOutline>() {
47+
@Override
48+
public MClassOutline visitClassInfo(
49+
MClassInfo<NType, NClass> info) {
50+
return parent.getParent().getClassOutline(
51+
info);
52+
}
53+
54+
@Override
55+
public MClassOutline visitClassRef(
56+
MClassRef<NType, NClass> info) {
57+
return null;
58+
}
59+
});
4360
} else {
4461
superClassOutline = null;
4562
}

basics/trunk/tools/src/main/java/org/jvnet/jaxb2_commons/xjc/generator/concrete/CMModelOutlineGenerator.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
import org.jvnet.jaxb2_commons.xjc.outline.MPackageOutline;
1414
import org.jvnet.jaxb2_commons.xjc.outline.concrete.CMModelOutline;
1515
import org.jvnet.jaxb2_commons.xml.bind.model.MClassInfo;
16+
import org.jvnet.jaxb2_commons.xml.bind.model.MClassRef;
17+
import org.jvnet.jaxb2_commons.xml.bind.model.MClassTypeInfoVisitor;
1618
import org.jvnet.jaxb2_commons.xml.bind.model.MElementInfo;
1719
import org.jvnet.jaxb2_commons.xml.bind.model.MEnumLeafInfo;
1820
import org.jvnet.jaxb2_commons.xml.bind.model.MModelInfo;
@@ -89,12 +91,24 @@ private void generatePackageOutline(CMModelOutline modelOutline,
8991
}
9092
}
9193

92-
private void generateClassOutline(CMModelOutline modelOutline,
93-
MModelInfo<NType, NClass> modelInfo,
94+
private void generateClassOutline(final CMModelOutline modelOutline,
95+
final MModelInfo<NType, NClass> modelInfo,
9496
MClassInfo<NType, NClass> classInfo) {
9597
if (classInfo.getBaseTypeInfo() != null) {
96-
generateClassOutline(modelOutline, modelInfo,
97-
classInfo.getBaseTypeInfo());
98+
classInfo.getBaseTypeInfo().acceptClassTypeInfoVisitor(
99+
new MClassTypeInfoVisitor<NType, NClass, Void>() {
100+
@Override
101+
public Void visitClassInfo(
102+
MClassInfo<NType, NClass> info) {
103+
generateClassOutline(modelOutline, modelInfo, info);
104+
return null;
105+
}
106+
107+
@Override
108+
public Void visitClassRef(MClassRef<NType, NClass> info) {
109+
return null;
110+
}
111+
});
98112
}
99113

100114
if (classInfo.getOrigin() instanceof ClassOutlineGeneratorFactory) {

basics/trunk/tools/src/main/java/org/jvnet/jaxb2_commons/xjc/model/concrete/XJCCMInfoFactory.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.jvnet.jaxb2_commons.xjc.model.concrete;
22

33
import java.util.HashMap;
4+
import java.util.IdentityHashMap;
45
import java.util.List;
56
import java.util.Map;
67

@@ -13,6 +14,7 @@
1314
import org.jvnet.jaxb2_commons.xjc.model.concrete.origin.XJCCMPropertyInfoOrigin;
1415
import org.jvnet.jaxb2_commons.xml.bind.model.MClassInfo;
1516
import org.jvnet.jaxb2_commons.xml.bind.model.MClassRef;
17+
import org.jvnet.jaxb2_commons.xml.bind.model.MClassTypeInfo;
1618
import org.jvnet.jaxb2_commons.xml.bind.model.MContainer;
1719
import org.jvnet.jaxb2_commons.xml.bind.model.MPackageInfo;
1820
import org.jvnet.jaxb2_commons.xml.bind.model.MTypeInfo;
@@ -55,6 +57,10 @@ public class XJCCMInfoFactory
5557
extends
5658
CMInfoFactory<NType, NClass, Model, CTypeInfo, CBuiltinLeafInfo, CElementInfo, CEnumLeafInfo, CEnumConstant, CClassInfo, CPropertyInfo, CAttributePropertyInfo, CValuePropertyInfo, CElementPropertyInfo, CReferencePropertyInfo, CWildcardTypeInfo> {
5759

60+
private final Map<CClassRef, MClassRef<NType, NClass>> classRefs =
61+
62+
new IdentityHashMap<CClassRef, MClassRef<NType, NClass>>();
63+
5864
public XJCCMInfoFactory(Model model) {
5965
super(model);
6066
}
@@ -118,6 +124,18 @@ protected MClassRef<NType, NClass> createClassRef(Class<?> _class) {
118124
getPackage(_class), getContainer(_class), getLocalName(_class));
119125
}
120126

127+
protected MClassRef<NType, NClass> getTypeInfo(CClassRef info) {
128+
129+
MClassRef<NType, NClass> classInfo = classRefs.get(info);
130+
131+
if (classInfo == null) {
132+
133+
classInfo = createClassRef(info);
134+
classRefs.put(info, classInfo);
135+
}
136+
return classInfo;
137+
}
138+
121139
protected MClassRef<NType, NClass> createClassRef(CClassRef info) {
122140
return new CMClassRef<NType, NClass>(getClazz(info), getPackage(info),
123141
getContainer(info), getLocalName(info));
@@ -126,7 +144,7 @@ protected MClassRef<NType, NClass> createClassRef(CClassRef info) {
126144
@Override
127145
protected MTypeInfo<NType, NClass> getTypeInfo(CTypeInfo typeInfo) {
128146
if (typeInfo instanceof CClassRef) {
129-
return createClassRef((CClassRef) typeInfo);
147+
return getTypeInfo((CClassRef) typeInfo);
130148
} else {
131149
return super.getTypeInfo(typeInfo);
132150
}
@@ -362,4 +380,15 @@ private MPackageInfo getPackage(JPackage pkg) {
362380
}
363381
return _package;
364382
}
383+
384+
@Override
385+
protected MClassTypeInfo<NType, NClass> createBaseTypeInfo(CClassInfo info) {
386+
if (info.getBaseClass() != null) {
387+
return getTypeInfo(info.getBaseClass());
388+
} else if (info.getRefBaseClass() != null) {
389+
return getTypeInfo(info.getRefBaseClass());
390+
} else {
391+
return null;
392+
}
393+
}
365394
}

0 commit comments

Comments
 (0)