Skip to content

Commit 519d437

Browse files
hansonrhansonr
authored andcommitted
Adds package-info support for namespace
1 parent b74819f commit 519d437

File tree

13 files changed

+193
-110
lines changed

13 files changed

+193
-110
lines changed
145 Bytes
Binary file not shown.
160 Bytes
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20181030183630
1+
20181101060953
145 Bytes
Binary file not shown.
160 Bytes
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20181030183630
1+
20181101060953

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

Lines changed: 62 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,7 @@ private Java2ScriptVisitor setInnerGlobals(Java2ScriptVisitor parent, ASTNode no
328328
private boolean class_isAnonymousOrLocal;
329329
private boolean inNewLambdaExpression;
330330

331+
331332
/**
332333
* default constructor found by visit(MethodDeclaration)
333334
*/
@@ -407,6 +408,11 @@ public boolean visit(CompilationUnit node) {
407408

408409
public boolean visit(PackageDeclaration node) {
409410
setMapJavaDoc(node);
411+
List annotations = node.annotations();
412+
if (annotations != null && annotations.size() > 0) {
413+
for (int i = 0; i < annotations.size(); i++)
414+
addAnnotation((Annotation) annotations.get(i), node, CHECK_ANNOTATIONS_ONLY);
415+
}
410416
setPackage(node.getName().toString());
411417
return false;
412418
}
@@ -2076,8 +2082,11 @@ && checkAnnotations(element, CHECK_J2S_IGNORE_AND_ANNOTATIONS)) {
20762082
// add any recently defined static field definitions, assert strings
20772083
// and Enum constants
20782084

2079-
if (class_jaxbAccessorType != JAXB_TYPE_UNKNOWN)
2085+
if (class_jaxbAccessorType != JAXB_TYPE_UNKNOWN) {
20802086
ClassAnnotation.addClassAnnotations(class_jaxbAccessorType, class_annotations, fields, methods, trailingBuffer);
2087+
class_annotations = null;
2088+
class_jaxbAccessorType = JAXB_TYPE_UNKNOWN;
2089+
}
20812090

20822091
buffer.append(trailingBuffer); // also writes the assert string
20832092
if (isAnonymous) {
@@ -5366,42 +5375,47 @@ private boolean checkAnnotations(BodyDeclaration node, int mode) {
53665375
for (Iterator<?> iter = modifiers.iterator(); iter.hasNext();) {
53675376
Object obj = iter.next();
53685377
if (obj instanceof Annotation) {
5369-
Annotation annotation = (Annotation) obj;
5370-
String qName = annotation.getTypeName().getFullyQualifiedName();
5371-
int idx = qName.indexOf("J2S");
5372-
if (idx >= 0) {
5373-
if (mode == CHECK_ANNOTATIONS_ONLY)
5374-
continue;
5375-
String annName = qName.substring(idx);
5376-
if (annName.startsWith("J2SIgnore")) {
5377-
return false;
5378-
}
5379-
} else if (qName.equals("Override")
5380-
|| qName.equals("Deprecated")
5381-
|| qName.startsWith("Suppress")
5382-
|| qName.startsWith("ConstructorProperties")) {
5383-
// see java\awt\ScrollPane.js @ConstructorProperties({"scrollbarDisplayPolicy"})
5384-
// ignore
5385-
} else {
5386-
if (class_annotations == null)
5387-
class_annotations = new ArrayList<ClassAnnotation>();
5388-
ClassAnnotation ann = new ClassAnnotation(qName, annotation, node);
5389-
class_annotations.add(ann);
5390-
if ("XmlAccessorType".equals(qName)) {
5391-
String s= annotation.toString();
5392-
class_jaxbAccessorType = (
5393-
s.contains("FIELD") ? JAXB_TYPE_FIELD
5394-
: s.contains("PUBLIC") ? JAXB_TYPE_PUBLIC_MEMBER
5395-
: s.contains("PROPERTY") ? JAXB_TYPE_PROPERTY
5396-
: JAXB_TYPE_NONE);
5397-
}
5398-
}
5378+
if (!addAnnotation((Annotation) obj, node, mode))
5379+
return false;
53995380
}
54005381
}
54015382
}
54025383
return true;
54035384
}
54045385

5386+
private boolean addAnnotation(Annotation annotation, ASTNode node, int mode) {
5387+
String qName = annotation.getTypeName().getFullyQualifiedName();
5388+
int idx = qName.indexOf("J2S");
5389+
if (idx >= 0) {
5390+
if (mode == CHECK_ANNOTATIONS_ONLY)
5391+
return true;
5392+
String annName = qName.substring(idx);
5393+
if (annName.startsWith("J2SIgnore")) {
5394+
return false;
5395+
}
5396+
} else if (qName.equals("Override")
5397+
|| qName.equals("Deprecated")
5398+
|| qName.startsWith("Suppress")
5399+
|| qName.startsWith("ConstructorProperties")) {
5400+
// see java\awt\ScrollPane.js @ConstructorProperties({"scrollbarDisplayPolicy"})
5401+
// ignore
5402+
} else {
5403+
if (class_annotations == null)
5404+
class_annotations = new ArrayList<ClassAnnotation>();
5405+
ClassAnnotation ann = new ClassAnnotation(qName, annotation, node);
5406+
class_annotations.add(ann);
5407+
if ("XmlAccessorType".equals(qName)) {
5408+
String s= annotation.toString();
5409+
class_jaxbAccessorType = (
5410+
s.contains("FIELD") ? JAXB_TYPE_FIELD
5411+
: s.contains("PUBLIC") ? JAXB_TYPE_PUBLIC_MEMBER
5412+
: s.contains("PROPERTY") ? JAXB_TYPE_PROPERTY
5413+
: JAXB_TYPE_NONE);
5414+
}
5415+
}
5416+
return true;
5417+
}
5418+
54055419
/////////////////////////////
54065420

54075421
/**
@@ -5491,6 +5505,10 @@ private void appendElementKey(String className) {
54915505
* @return List {elementName, js, elementName, js, ....}
54925506
*/
54935507
public List<String> getElementList() {
5508+
if (class_jaxbAccessorType != JAXB_TYPE_UNKNOWN) {
5509+
addDummyClassForPackageOnlyFile();
5510+
}
5511+
54945512
String trailer = ";Clazz.setTVer('" + VERSION + "');//Created "
54955513
+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " Java2ScriptVisitor version "
54965514
+ VERSION + " net.sf.j2s.core.jar version " + CorePlugin.VERSION + "\n";
@@ -5516,6 +5534,14 @@ public List<String> getElementList() {
55165534
return elements;
55175535
}
55185536

5537+
private void addDummyClassForPackageOnlyFile() {
5538+
appendElementKey("_$");
5539+
buffer.append("var C$=Clazz.newClass(\"_$\");\nC$.$clinit$ = function() {Clazz.load(C$, 1)};\n");
5540+
ClassAnnotation.addClassAnnotations(class_jaxbAccessorType, class_annotations, null, null, trailingBuffer);
5541+
buffer.append(trailingBuffer);
5542+
addDefaultConstructor();
5543+
}
5544+
55195545
public boolean visit(AnnotationTypeDeclaration node) {
55205546
return false;
55215547
}
@@ -6163,14 +6189,14 @@ static boolean fieldNameCoversMethod(String fieldName) {
61636189

61646190
static class ClassAnnotation {
61656191

6166-
protected BodyDeclaration node;
6192+
protected ASTNode node;
61676193
protected Annotation annotation;
61686194
private String qName;
61696195

6170-
protected ClassAnnotation(String qName, Annotation annotation, BodyDeclaration node) {
6171-
System.out.println(">>>>" + qName + " "
6196+
protected ClassAnnotation(String qName, Annotation annotation, ASTNode node) {
6197+
// System.out.println(">>>>" + qName + " "
61726198
//+ annotation.getClass().getName()
6173-
+ " " + annotation);
6199+
// + " " + annotation);
61746200
this.qName = qName;
61756201
this.annotation = annotation;
61766202
this.node = node;
@@ -6287,7 +6313,7 @@ private static IMethodBinding getJAXBGetMethod(IMethodBinding var, List<IMethodB
62876313

62886314
private static void addImplicitJAXBFieldsAndMethods(int accessType, TrailingBuffer trailingBuffer,
62896315
List<FieldDeclaration> fields, List<IMethodBinding> methods, String propOrder) {
6290-
if (accessType == JAXB_TYPE_NONE)
6316+
if (accessType == JAXB_TYPE_NONE || fields == null)
62916317
return;
62926318
boolean publicOnly = (accessType == JAXB_TYPE_PUBLIC_MEMBER);
62936319
if (accessType != JAXB_TYPE_PROPERTY) {
145 Bytes
Binary file not shown.

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

Lines changed: 62 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package swingjs.xml;
22

3+
import java.io.BufferedInputStream;
4+
import java.io.InputStream;
35
import java.util.ArrayList;
46
import java.util.HashMap;
57
import java.util.Hashtable;
@@ -9,6 +11,8 @@
911
import javax.xml.bind.annotation.adapters.XmlAdapter;
1012
import javax.xml.namespace.QName;
1113

14+
import javajs.util.PT;
15+
import javajs.util.Rdr;
1216
import swingjs.api.Interface;
1317

1418
class JSJAXBClass {
@@ -26,13 +30,21 @@ class JSJAXBClass {
2630
final static int TYPE_PROPERTY = 3;
2731

2832
/**
29-
* this class's accessorType, which is not implemented yet. We need explicit
33+
* This class's accessorType. We need explicit
3034
* propOrder or XmlAttribute or XmlElement.
35+
*
36+
* This field is not used, because all this is determined
37+
* during transpilation. BUT...
38+
* Note that the Java2Script transpiler currently does not
39+
* honor package-info.java annotations for this. TODO
40+
*
3141
*/
3242
int accessorType = TYPE_PUBLIC_MEMBER;
3343

3444
private boolean isMarshaller;
3545

46+
private String namespace;
47+
3648
QName qname = new QName("", "##default", "");
3749
QName qualifiedTypeName;
3850

@@ -65,26 +77,30 @@ class JSJAXBClass {
6577
*/
6678
Map<Object, Object> enumMap;
6779
String enumClassType;
68-
80+
6981
JSJAXBField xmlValueField;
70-
String defaultNamespace;
7182
String[] seeAlso;
7283
final Map<String, JSJAXBField> unmarshallerFieldMap = new Hashtable<String, JSJAXBField>();
73-
private Class<?> javaClass;
84+
85+
Class<?> javaClass; // for JavaScript debugging
86+
private Object javaObject;
87+
private static String defaultNamespace;
7488

7589
private final static Map<String, String> marshallerNamespacePrefixes = new Hashtable<String, String>();
7690
private final static Map<String, XmlAdapter> adapterMap = new HashMap<String, XmlAdapter>();
7791

7892
static void clearStatics() {
7993
prefixIndex = 1;
94+
defaultNamespace = null;
8095
marshallerNamespacePrefixes.clear();
8196
adapterMap.clear();
8297
}
8398

8499
JSJAXBClass(Class<?> javaClass, Object javaObject, boolean isXmlIDREF, boolean isMarshaller) {
85100
this.isMarshaller = isMarshaller;
86101
this.javaClass = javaClass;
87-
checkC$__ANN__(this, javaClass, javaObject, isXmlIDREF);
102+
this.javaObject = javaObject;
103+
checkC$__ANN__(this, javaClass, javaObject != null, isXmlIDREF);
88104
this.isXmlIDREF = isXmlIDREF;
89105
}
90106

@@ -96,7 +112,7 @@ static void clearStatics() {
96112
* @return
97113
*/
98114
@SuppressWarnings("unused")
99-
static boolean checkC$__ANN__(JSJAXBClass jsjaxbClass, Class<?> javaClass, Object javaObject, boolean isXmlIDREF) {
115+
static boolean checkC$__ANN__(JSJAXBClass jsjaxbClass, Class<?> javaClass, boolean haveJavaObject, boolean isXmlIDREF) {
100116
boolean isTop = true;
101117
while (javaClass != null) {
102118

@@ -117,18 +133,18 @@ static void clearStatics() {
117133
if (jsdata != null) {
118134
if (jsjaxbClass == null)
119135
return true;
120-
jsjaxbClass.addTypeData(jsdata, clazz, javaObject);
136+
jsjaxbClass.addTypeData(jsdata, clazz, haveJavaObject);
121137
}
122138
isTop = false;
123139
javaClass = javaClass.getSuperclass();
124140
}
125141
return false;
126142
}
127143

128-
JSJAXBClass addTypeData(Object[][][] jsdata, Object clazz, Object javaObject) {
129-
int n = (javaObject == null ? 1 : jsdata.length);
144+
JSJAXBClass addTypeData(Object[][][] jsdata, Object clazz, boolean haveJavaObject) {
145+
int n = (haveJavaObject ? jsdata.length : 1);
130146
for (int i = fields.size() == 0 ? 0 : 1; i < n; i++) {
131-
JSJAXBField field = new JSJAXBField(this, jsdata[i], clazz, javaObject, fields.size(), propOrder);
147+
JSJAXBField field = new JSJAXBField(this, jsdata[i], clazz, fields.size(), propOrder);
132148
addField(field);
133149
}
134150
// if (isMarshaller)
@@ -166,10 +182,6 @@ static String getXmlNameFromClassName(String className) {
166182
return className;
167183
}
168184

169-
public void setSeeAlso(String[] seeAlso) {
170-
this.seeAlso = seeAlso;
171-
}
172-
173185
private static int prefixIndex = 1;
174186

175187
/**
@@ -194,4 +206,40 @@ static XmlAdapter getAdapter(String adapterClass) {
194206
return adapter;
195207
}
196208

209+
void setNamespace(String namespace) {
210+
if (namespace == null)
211+
this.namespace = namespace;
212+
}
213+
214+
String getNamespace() {
215+
return namespace;
216+
}
217+
218+
public void setQNameFromField0(QName qualifiedName) {
219+
String ns = qualifiedName.getNamespaceURI();
220+
if (ns.length() == 0) {
221+
if (defaultNamespace == null) {
222+
defaultNamespace = getDefaultNamespaceFromPackageInfo();
223+
}
224+
qualifiedName = new QName(defaultNamespace == null ? "" : defaultNamespace, qualifiedName.getLocalPart(), "");
225+
}
226+
qname = qualifiedName;
227+
}
228+
229+
private String getDefaultNamespaceFromPackageInfo() {
230+
defaultNamespace = "";
231+
InputStream is = javaClass.getResourceAsStream("_$.js");
232+
if (is != null) {
233+
String data = Rdr.streamToUTF8String(new BufferedInputStream(is));
234+
data = PT.getQuotedAttribute(data, "namespace");
235+
if (data != null)
236+
defaultNamespace = data;
237+
}
238+
return defaultNamespace;
239+
}
240+
241+
public Object getJavaObject() {
242+
return javaObject;
243+
}
244+
197245
}

0 commit comments

Comments
 (0)