Skip to content

Commit 157a921

Browse files
hansonrhansonr
authored andcommitted
Preliminary JAXB marshalling and unmarshalling working.
1 parent 729b117 commit 157a921

File tree

12 files changed

+634
-197
lines changed

12 files changed

+634
-197
lines changed
191 Bytes
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20181016101634
1+
20181016154021
191 Bytes
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20181016101634
1+
20181016154021

sources/net.sf.j2s.core/src/net/sf/j2s/core/Java2ScriptVisitor.java

Lines changed: 43 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2500,7 +2500,7 @@ private static boolean isObjectOrNull(ITypeBinding type) {
25002500
*/
25012501
class TrailingBuffer {
25022502

2503-
private StringBuffer buf;
2503+
StringBuffer buf;
25042504
private String added = "";
25052505

25062506
boolean hasAssert;
@@ -4308,7 +4308,7 @@ private String getMyJavaClassNameLambda(boolean andIncrement) {
43084308
+ (andIncrement ? ++lambdaCount : lambdaCount);
43094309
}
43104310

4311-
private static String stripJavaLang(String name) {
4311+
static String stripJavaLang(String name) {
43124312
// shorten java.lang.XXX.YYY but not java.lang.xxx.YYY
43134313
return (!name.startsWith("java.lang.") || name.equals("java.lang.Object")
43144314
|| name.length() > 10 && !Character.isUpperCase(name.charAt(10)) ? name : name.substring(10));
@@ -5065,7 +5065,7 @@ private static String j2sGetParamCode(ITypeBinding binding, boolean addAAA, bool
50655065
* @param qName
50665066
* @return
50675067
*/
5068-
private static String removeBracketsAndFixNullPackageName(String qName) {
5068+
static String removeBracketsAndFixNullPackageName(String qName) {
50695069
if (qName == null)
50705070
return null;
50715071
qName = NameMapper.fixPackageName(qName);
@@ -6138,64 +6138,62 @@ protected ClassAnnotation(String qName, Annotation annotation, BodyDeclaration n
61386138
public static void addClassAnnotations(List<ClassAnnotation> class_annotations, TrailingBuffer trailingBuffer) {
61396139
if (class_annotations == null)
61406140
return;
6141-
int pt = 0;
6141+
int pt = 0, ptBuf = 0;
61426142
ASTNode lastNode = null;
6143+
List<?> fragments = null;
61436144
for (int i = 0; i < class_annotations.size(); i++) {
61446145
ClassAnnotation a = class_annotations.get(i);
61456146
String str = a.annotation.toString();
61466147
if (str.startsWith("@SuppressWarnings"))
61476148
continue;
6148-
// if (str.indexOf(".class") >= 0) {
6149-
// System.out.println(str + " >>" + a.annotation.getClass().getName());
6150-
// if (a.annotation instanceof SingleMemberAnnotation) {
6151-
// SingleMemberAnnotation ann = (SingleMemberAnnotation) a.annotation;
6152-
// Expression e = ann.getValue();
6153-
// System.out.println(e + " >>" + e.getClass().getName());
6154-
// str += e.getClass().getName();
6155-
// if (e instanceof TypeLiteral)
6156-
// str += "==" + ((TypeLiteral) e).getType().resolveBinding().getClass().getName();
6157-
// } else if (a.annotation instanceof NormalAnnotation) {
6158-
// NormalAnnotation an = (NormalAnnotation) a.annotation;
6159-
// str += "====" + an.resolveAnnotationBinding().getAllMemberValuePairs()[0].getValue();
6160-
// }
6161-
// }
6162-
String nodeType = a.qName;
6163-
String varName = null;
6164-
String className = null, binaryName = null;
6165-
if (a.node instanceof FieldDeclaration) {
6166-
FieldDeclaration field = (FieldDeclaration) a.node;
6167-
List<?> fragments = field.fragments();
6168-
VariableDeclarationFragment identifier = (VariableDeclarationFragment) fragments.get(0);
6169-
IVariableBinding var = identifier.resolveBinding();
6170-
className = getJavaClassNameQualified(var.getType());
6171-
binaryName = var.getType().getBinaryName();
6172-
nodeType = (var.getType().isArray() ? "[array]" : field.getType().toString());
6173-
var.getType().getQualifiedName();
6174-
varName = var.getName();
6175-
} else if (a.node instanceof MethodDeclaration) {
6176-
MethodDeclaration method = (MethodDeclaration) a.node;
6177-
IMethodBinding var = method.resolveBinding();
6178-
ITypeBinding type = var.getReturnType();
6179-
className = getJavaClassNameQualified(type);
6180-
binaryName = type.getBinaryName();
6181-
nodeType = (type.isArray() ? "[array]" : type.getName());
6182-
varName = "M:" + var.getName();
6183-
}
61846149
if (a.node == lastNode) {
61856150
trailingBuffer.append(",");
61866151
} else {
61876152
lastNode = a.node;
6153+
String varName = null;
6154+
ITypeBinding type = null;
6155+
// time to pick up the fragments
6156+
addTrailingFragments(fragments, trailingBuffer, ptBuf);
6157+
fragments = null;
6158+
if (a.node instanceof FieldDeclaration) {
6159+
FieldDeclaration field = (FieldDeclaration) a.node;
6160+
fragments = field.fragments();
6161+
VariableDeclarationFragment identifier = (VariableDeclarationFragment) fragments.get(0);
6162+
IVariableBinding var = identifier.resolveBinding();
6163+
varName = var.getName();
6164+
type = var.getType();
6165+
} else if (a.node instanceof MethodDeclaration) {
6166+
MethodDeclaration method = (MethodDeclaration) a.node;
6167+
IMethodBinding var = method.resolveBinding();
6168+
varName = "M:" + var.getName();
6169+
type = var.getReturnType();
6170+
}
6171+
String className = (type == null ? null
6172+
: stripJavaLang(NameMapper.checkClassReplacement(
6173+
removeBracketsAndFixNullPackageName(getJavaClassNameQualified(type)))));
61886174
trailingBuffer.append(pt++ == 0 ? "C$.__ANN__ = [[[" : "]],\n [[");
6189-
trailingBuffer.append((varName == null ? null : "'" + varName + "'")
6190-
+ ",'" + nodeType + "'"
6191-
+ ",'" + className + "'"
6192-
+ ",'" + binaryName + "'],[");
6193-
}
6175+
trailingBuffer.append((varName == null ? null : "'" + varName + "'"));
6176+
ptBuf = trailingBuffer.buf.length();
6177+
trailingBuffer.append(",'" + className + "'],[");
6178+
}
61946179
trailingBuffer.append("'" + str + "'");
61956180
}
6181+
addTrailingFragments(fragments, trailingBuffer, ptBuf);
61966182
if (pt > 0)
61976183
trailingBuffer.append("]]];\n");
61986184
}
6185+
6186+
private static void addTrailingFragments(List<?> fragments, TrailingBuffer trailingBuffer, int ptBuf) {
6187+
if (fragments == null || fragments.size() == 0)
6188+
return;
6189+
String line = trailingBuffer.buf.substring(ptBuf);
6190+
for (int f = 1; f < fragments.size(); f++) {
6191+
VariableDeclarationFragment identifier = (VariableDeclarationFragment) fragments.get(f);
6192+
IVariableBinding var = identifier.resolveBinding();
6193+
trailingBuffer.append("]],\n [['" + var.getName() + "'");
6194+
trailingBuffer.append(line);
6195+
}
6196+
}
61996197

62006198
}
62016199

17.2 KB
Binary file not shown.

sources/net.sf.j2s.java.core/src/swingjs/xml/JSJAXBClass.java

Lines changed: 92 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,12 @@
66
import java.util.List;
77
import java.util.Map;
88

9+
import javax.xml.bind.annotation.adapters.XmlAdapter;
910
import javax.xml.namespace.QName;
1011

12+
import swingjs.api.Interface;
13+
import swingjs.api.js.DOMNode;
14+
1115
class JSJAXBClass {
1216

1317
// C$.__ANN__ = [
@@ -31,8 +35,21 @@ class JSJAXBClass {
3135
public JSJAXBField field;
3236
QName qualifiedTypeName;
3337

38+
JSJAXBField valueField;
39+
3440
@SuppressWarnings("unused")
3541
public JSJAXBClass(Class<?> javaClass, Object javaObject) {
42+
checkC$__ANN__(this, javaClass, javaObject);
43+
}
44+
45+
/**
46+
*
47+
* @param jsjaxbClass null to just check
48+
* @param javaClass
49+
* @param javaObject
50+
* @return
51+
*/
52+
private static boolean checkC$__ANN__(JSJAXBClass jsjaxbClass, Class<?> javaClass, Object javaObject) {
3653
boolean isTop = true;
3754
while (javaClass != null) {
3855

@@ -54,13 +71,17 @@ public JSJAXBClass(Class<?> javaClass, Object javaObject) {
5471
className = null;
5572
}
5673
isTop = false;
57-
if (jsdata != null)
58-
addTypeData(jsdata, className, javaObject);
74+
if (jsdata != null) {
75+
if (jsjaxbClass == null)
76+
return true;
77+
jsjaxbClass.addTypeData(jsdata, className, javaObject);
78+
}
5979
javaClass = javaClass.getSuperclass();
6080
}
61-
81+
return false;
6282
}
6383

84+
6485
public JSJAXBClass addTypeData(Object[][][] jsdata, String className, Object javaObject) {
6586
for (int i = 0; i < jsdata.length; i++) {
6687
JSJAXBField a = new JSJAXBField(this, jsdata[i], javaObject, fields.size(), propOrder);
@@ -105,6 +126,23 @@ static String getXmlNameFromClassName(String className) {
105126
}
106127

107128
Map<String, JSJAXBField> bindingMap = new Hashtable<String, JSJAXBField>();
129+
// private static boolean hasNull(Object[] list) {
130+
// for (int i = list.length; --i >= 0;)
131+
// if (list[i] == null)
132+
// return true;
133+
// return false;
134+
// }
135+
//
136+
// private static boolean hasNull(List<?> list) {
137+
// for (int i = list.size(); --i >= 0;)
138+
// if (list.get(i) == null)
139+
// return true;
140+
// return false;
141+
// }
142+
//
143+
144+
static Map<String, XmlAdapter> adapterMap = new HashMap<String, XmlAdapter>();
145+
108146
public void prepareForUnmarshalling() {
109147
for (int i = 0; i < fields.size(); i++) {
110148
JSJAXBField a = fields.get(i);
@@ -116,12 +154,60 @@ public void prepareForUnmarshalling() {
116154
name += ":" + q.getLocalPart();
117155
bindingMap.put(name, a);
118156
}
119-
// TODO Auto-generated method stub
120-
121157
}
122158

123-
public JSJAXBField getFieldFromQName(String qName) {
159+
JSJAXBField getFieldFromQName(String qName) {
124160
return bindingMap.get(qName);
125161
}
126162

163+
boolean hasElements() {
164+
for (int i = 0, n = fields.size(); i < n; i++)
165+
if (!fields.get(i).isAttribute)
166+
return true;
167+
return false;
168+
}
169+
170+
final static Map<String, Boolean> classMap = new Hashtable<String,Boolean>();
171+
172+
static boolean isSimple(String javaClassName) {
173+
Boolean isSimple = true;
174+
try {
175+
if (classMap.containsKey(javaClassName))
176+
return classMap.get(javaClassName).booleanValue();
177+
isSimple = !(checkC$__ANN__(null, Class.forName(javaClassName), null));
178+
} catch (ClassNotFoundException e) {
179+
}
180+
classMap.put(javaClassName, Boolean.valueOf(isSimple));
181+
return isSimple;
182+
}
183+
184+
public static Map<String, JSJAXBClass> knownClasses = new Hashtable<>();
185+
186+
public static JSJAXBClass newInstance(Class<?> javaClass, Object javaObject) {
187+
String name = javaClass.getCanonicalName();
188+
JSJAXBClass jjc = knownClasses.get(name);
189+
if (jjc == null) {
190+
jjc = new JSJAXBClass(javaClass, javaObject);
191+
knownClasses.put(name, jjc);
192+
return jjc;
193+
}
194+
jjc.clear(javaObject);
195+
return jjc;
196+
}
197+
198+
private void clear(Object javaObject) {
199+
for (int i = fields.size(); --i >= 0;) {
200+
fields.get(i).clear(javaObject);
201+
}
202+
}
203+
204+
static XmlAdapter getAdapter(String adapterClass) {
205+
XmlAdapter adapter = adapterMap.get(adapterClass);
206+
if (adapter == null && !adapterMap.containsKey(adapterClass)) {
207+
adapterMap.put(adapterClass, adapter = (XmlAdapter) Interface.getInstance(adapterClass, false));
208+
}
209+
return adapter;
210+
}
211+
212+
127213
}

0 commit comments

Comments
 (0)