Skip to content

Commit 7990468

Browse files
author
zhourenjian@gmail.com
committed
Support of overriding constructor
Fixing bug on generating static constants within package whose name contain keywords
1 parent 43c24f1 commit 7990468

File tree

3 files changed

+40
-12
lines changed

3 files changed

+40
-12
lines changed

sources/net.sf.j2s.core/src/net/sf/j2s/core/astvisitors/ASTKeywordVisitor.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ public boolean visit(Assignment node) {
310310
} else {
311311
buffer.append("$t$ = ");
312312
}
313-
buffer.append(shortenQualifiedName(varBinding.getDeclaringClass().getQualifiedName()));
313+
buffer.append(assureQualifiedName(shortenQualifiedName(varBinding.getDeclaringClass().getQualifiedName())));
314314
buffer.append('.');
315315
if (left instanceof QualifiedName) {
316316
QualifiedName leftName = (QualifiedName) left;
@@ -330,7 +330,7 @@ public boolean visit(Assignment node) {
330330
boxingNode(right);
331331

332332
buffer.append(", ");
333-
buffer.append(shortenQualifiedName(varBinding.getDeclaringClass().getQualifiedName()));
333+
buffer.append(assureQualifiedName(shortenQualifiedName(varBinding.getDeclaringClass().getQualifiedName())));
334334
buffer.append(".prototype.");
335335
if (left instanceof QualifiedName) {
336336
QualifiedName leftName = (QualifiedName) left;
@@ -343,7 +343,7 @@ public boolean visit(Assignment node) {
343343
leftName.accept(this);
344344
}
345345
buffer.append(" = ");
346-
buffer.append(shortenQualifiedName(varBinding.getDeclaringClass().getQualifiedName()));
346+
buffer.append(assureQualifiedName(shortenQualifiedName(varBinding.getDeclaringClass().getQualifiedName())));
347347
buffer.append('.');
348348
if (left instanceof QualifiedName) {
349349
QualifiedName leftName = (QualifiedName) left;
@@ -876,7 +876,7 @@ public boolean visit(PostfixExpression node) {
876876
} else {
877877
buffer.append("$t$ = ");
878878
}
879-
buffer.append(shortenQualifiedName(varBinding.getDeclaringClass().getQualifiedName()));
879+
buffer.append(assureQualifiedName(shortenQualifiedName(varBinding.getDeclaringClass().getQualifiedName())));
880880
buffer.append('.');
881881
if (left instanceof QualifiedName) {
882882
QualifiedName leftName = (QualifiedName) left;
@@ -893,7 +893,7 @@ public boolean visit(PostfixExpression node) {
893893
buffer.append(op);
894894

895895
buffer.append(", ");
896-
buffer.append(shortenQualifiedName(varBinding.getDeclaringClass().getQualifiedName()));
896+
buffer.append(assureQualifiedName(shortenQualifiedName(varBinding.getDeclaringClass().getQualifiedName())));
897897
buffer.append(".prototype.");
898898
if (left instanceof QualifiedName) {
899899
QualifiedName leftName = (QualifiedName) left;
@@ -906,7 +906,7 @@ public boolean visit(PostfixExpression node) {
906906
leftName.accept(this);
907907
}
908908
buffer.append(" = ");
909-
buffer.append(shortenQualifiedName(varBinding.getDeclaringClass().getQualifiedName()));
909+
buffer.append(assureQualifiedName(shortenQualifiedName(varBinding.getDeclaringClass().getQualifiedName())));
910910
buffer.append('.');
911911
if (left instanceof QualifiedName) {
912912
QualifiedName leftName = (QualifiedName) left;
@@ -1004,7 +1004,7 @@ public boolean visit(PrefixExpression node) {
10041004
}
10051005
buffer.append(op);
10061006
buffer.append(' ');
1007-
buffer.append(shortenQualifiedName(varBinding.getDeclaringClass().getQualifiedName()));
1007+
buffer.append(assureQualifiedName(shortenQualifiedName(varBinding.getDeclaringClass().getQualifiedName())));
10081008
buffer.append('.');
10091009
if (left instanceof QualifiedName) {
10101010
QualifiedName leftName = (QualifiedName) left;
@@ -1018,7 +1018,7 @@ public boolean visit(PrefixExpression node) {
10181018
}
10191019

10201020
buffer.append(", ");
1021-
buffer.append(shortenQualifiedName(varBinding.getDeclaringClass().getQualifiedName()));
1021+
buffer.append(assureQualifiedName(shortenQualifiedName(varBinding.getDeclaringClass().getQualifiedName())));
10221022
buffer.append(".prototype.");
10231023
if (left instanceof QualifiedName) {
10241024
QualifiedName leftName = (QualifiedName) left;
@@ -1031,7 +1031,7 @@ public boolean visit(PrefixExpression node) {
10311031
leftName.accept(this);
10321032
}
10331033
buffer.append(" = ");
1034-
buffer.append(shortenQualifiedName(varBinding.getDeclaringClass().getQualifiedName()));
1034+
buffer.append(assureQualifiedName(shortenQualifiedName(varBinding.getDeclaringClass().getQualifiedName())));
10351035
buffer.append('.');
10361036
if (left instanceof QualifiedName) {
10371037
QualifiedName leftName = (QualifiedName) left;

sources/net.sf.j2s.core/src/net/sf/j2s/core/astvisitors/ASTScriptVisitor.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1741,7 +1741,11 @@ public boolean visit(MethodDeclaration node) {
17411741
}
17421742

17431743
if (node.isConstructor()) {
1744-
buffer.append("Clazz.makeConstructor (");
1744+
if (getJ2STag(node, "@j2sOverride") != null) {
1745+
buffer.append("Clazz.overrideConstructor (");
1746+
} else {
1747+
buffer.append("Clazz.makeConstructor (");
1748+
}
17451749
} else {
17461750
if ((node.getModifiers() & Modifier.STATIC) != 0) {
17471751
/* replace full class name with short variable name */
@@ -3102,7 +3106,7 @@ private String prepareSimpleSerializable(TypeDeclaration node, List bodyDeclarat
31023106
if (isSimpleSerializable) {
31033107
List fragments = fieldDeclaration.fragments();
31043108
int modifiers = fieldDeclaration.getModifiers();
3105-
if ((Modifier.isPublic(modifiers) || Modifier.isProtected(modifiers))
3109+
if ((Modifier.isPublic(modifiers)/* || Modifier.isProtected(modifiers)*/)
31063110
&& !Modifier.isStatic(modifiers) && !Modifier.isTransient(modifiers)) {
31073111
Type type = fieldDeclaration.getType();
31083112
int dims = 0;
@@ -3135,6 +3139,22 @@ private String prepareSimpleSerializable(TypeDeclaration node, List bodyDeclarat
31353139
ITypeBinding resolveBinding = type.resolveBinding();
31363140
if ("java.lang.String".equals(resolveBinding.getQualifiedName())) {
31373141
mark = "s";
3142+
} else {
3143+
ITypeBinding t = resolveBinding;
3144+
do {
3145+
String typeName = t.getQualifiedName();
3146+
if ("java.lang.Object".equals(typeName)) {
3147+
break;
3148+
}
3149+
if ("net.sf.j2s.ajax.SimpleSerializable".equals(typeName)) {
3150+
mark = "O";
3151+
break;
3152+
}
3153+
t = t.getSuperclass();
3154+
if (t == null) {
3155+
break;
3156+
}
3157+
} while (true);
31383158
}
31393159
if (mark != null) {
31403160
for (Iterator xiter = fragments.iterator(); xiter.hasNext();) {

sources/net.sf.j2s.core/src/net/sf/j2s/core/compiler/Java2ScriptCompiler.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,11 @@ public static void outputJavaScript(ASTScriptVisitor visitor, DependencyASTVisit
315315
String js = dvisitor.getDependencyScript(visitor.getBuffer());
316316
String lineBreak = props.getProperty("j2s.compiler.linebreak");
317317
String whiteSpace = props.getProperty("j2s.compiler.whitespace");
318+
String utf8Header = props.getProperty("j2s.compiler.utf8bom");
319+
boolean addUTF8Header = false;
320+
if (utf8Header != null && utf8Header.equals("true")) {
321+
addUTF8Header = true;
322+
}
318323
if (lineBreak != null && whiteSpace != null
319324
&& lineBreak.length() == 0 && whiteSpace.equals("false")) {
320325
js = RegExCompress.regexCompress(js);
@@ -414,7 +419,9 @@ public static void outputJavaScript(ASTScriptVisitor visitor, DependencyASTVisit
414419
File jsFile = new File(folderPath, elementName + ".js"); //$NON-NLS-1$
415420
try {
416421
FileOutputStream fos = new FileOutputStream(jsFile);
417-
fos.write(new byte[] {(byte) 0xef, (byte) 0xbb, (byte) 0xbf}); // UTF-8 header!
422+
if (addUTF8Header) {
423+
fos.write(new byte[] {(byte) 0xef, (byte) 0xbb, (byte) 0xbf}); // UTF-8 header!
424+
}
418425
fos.write(js.getBytes("UTF-8"));
419426
fos.close();
420427
} catch (IOException e) {
@@ -521,6 +528,7 @@ public static String[] getClazzAbbrMap() {
521528
"Clazz.prepareCallback", "B", //
522529
"Clazz.innerTypeInstance", "N", //
523530
"Clazz.makeConstructor", "K", //
531+
"Clazz.overrideConstructor", "k", //
524532
"Clazz.superCall", "U", //
525533
"Clazz.superConstructor", "R", //
526534
"Clazz.defineMethod", "M", //

0 commit comments

Comments
 (0)