Skip to content

Commit 8e1f285

Browse files
author
zhourenjian
committed
Fix bug that nested Enum is not compiled correctly
package testenum; public class Main { public enum Numbers { ONE, TWO} public static void main(String[] args) { System.out.println(Numbers.ONE); } }
1 parent 861b1f8 commit 8e1f285

1 file changed

Lines changed: 78 additions & 44 deletions

File tree

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

Lines changed: 78 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -782,29 +782,47 @@ public void endVisit(EnumDeclaration node) {
782782
if (idx != -1 && idx == buffer.length() - emptyFun.length()) {
783783
buffer.replace(idx, buffer.length(), "Clazz.declareType (");
784784
}
785-
786-
String fullClassName = null;//getFullClassName();
787-
String packageName = ((ASTPackageVisitor) getAdaptable(ASTPackageVisitor.class)).getPackageName();
788-
String className = ((ASTTypeVisitor) getAdaptable(ASTTypeVisitor.class)).getClassName();
789-
if (packageName != null && packageName.length() != 0) {
790-
fullClassName = packageName + '.' + className;
791-
} else {
792-
fullClassName = className;
793-
}
794-
// if (thisPackageName != null && thisPackageName.length() != 0) {
795-
// fullClassName = thisPackageName + '.' + thisClassName;
796-
// } else {
797-
// fullClassName = thisClassName;
798-
// }
799785

800-
int lastIndexOf = fullClassName.lastIndexOf ('.');
801-
if (lastIndexOf != -1) {
802-
buffer.append(assureQualifiedName(shortenPackageName(fullClassName)));
803-
buffer.append(", \"" + fullClassName.substring(lastIndexOf + 1) + "\"");
786+
ASTNode parent = node.getParent();
787+
if (parent != null && parent instanceof AbstractTypeDeclaration) {
788+
String packageName = ((ASTPackageVisitor) getAdaptable(ASTPackageVisitor.class)).getPackageName();
789+
String className = ((ASTTypeVisitor) getAdaptable(ASTTypeVisitor.class)).getClassName();
790+
//String className = ((AbstractTypeDeclaration) parent).getName().getFullyQualifiedName();
791+
String fullClassName = null;
792+
if (packageName != null && packageName.length() != 0) {
793+
fullClassName = packageName + '.' + className;
794+
} else {
795+
fullClassName = className;
796+
}
797+
String name = node.getName().getIdentifier();
798+
buffer.append(assureQualifiedName(fullClassName));
799+
buffer.append(", \"" + name + "\"");
800+
buffer.append(", Enum");
804801
} else {
805-
buffer.append("null, \"" + fullClassName + "\"");
802+
803+
String fullClassName = null;//getFullClassName();
804+
String packageName = ((ASTPackageVisitor) getAdaptable(ASTPackageVisitor.class)).getPackageName();
805+
String className = ((ASTTypeVisitor) getAdaptable(ASTTypeVisitor.class)).getClassName();
806+
if (packageName != null && packageName.length() != 0) {
807+
fullClassName = packageName + '.' + className;
808+
} else {
809+
fullClassName = className;
810+
}
811+
// if (thisPackageName != null && thisPackageName.length() != 0) {
812+
// fullClassName = thisPackageName + '.' + thisClassName;
813+
// } else {
814+
// fullClassName = thisClassName;
815+
// }
816+
817+
int lastIndexOf = fullClassName.lastIndexOf ('.');
818+
if (lastIndexOf != -1) {
819+
buffer.append(assureQualifiedName(shortenPackageName(fullClassName)));
820+
buffer.append(", \"" + fullClassName.substring(lastIndexOf + 1) + "\"");
821+
} else {
822+
buffer.append("null, \"" + fullClassName + "\"");
823+
}
824+
buffer.append(", Enum");
806825
}
807-
buffer.append(", Enum");
808826

809827
List superInterfaces = node.superInterfaceTypes();
810828
int size = superInterfaces.size();
@@ -1022,33 +1040,46 @@ public boolean visit(EnumDeclaration node) {
10221040
* Never reach here!
10231041
* March 17, 2006
10241042
*/
1025-
buffer.append("if (!Clazz.isClassDefined (\"");
1026-
buffer.append(visitor.getFullClassName());
1027-
buffer.append("\")) {\r\n");
1043+
// buffer.append("if (!Clazz.isClassDefined (\"");
1044+
// buffer.append(visitor.getFullClassName());
1045+
// if (binding != null && !binding.isTopLevel()) {
1046+
// buffer.append("." + binding.getName());
1047+
// }
1048+
// buffer.append("\")) {\r\n");
10281049

10291050
//String className = typeVisitor.getClassName();
1030-
methodBuffer.append("cla$$.$");
1031-
String targetClassName = visitor.getClassName();
1032-
//String prefixKey = className + ".";
1033-
//if (targetClassName.startsWith(prefixKey)) {
1034-
// targetClassName = targetClassName.substring(prefixKey.length());
1035-
//}
1036-
targetClassName = targetClassName.replace('.', '$');
1037-
methodBuffer.append(targetClassName);
1038-
methodBuffer.append("$ = function () {\r\n");
1051+
// methodBuffer.append("cla$$.$");
1052+
// String targetClassName = visitor.getClassName();
1053+
// //String prefixKey = className + ".";
1054+
// //if (targetClassName.startsWith(prefixKey)) {
1055+
// // targetClassName = targetClassName.substring(prefixKey.length());
1056+
// //}
1057+
// targetClassName = targetClassName.replace('.', '$');
1058+
// methodBuffer.append(targetClassName);
1059+
// if (binding != null && !binding.isTopLevel()) {
1060+
// methodBuffer.append("$" + binding.getName());
1061+
// }
1062+
// methodBuffer.append("$ = function () {\r\n");
10391063
methodBuffer.append("Clazz.pu$h ();\r\n");
10401064
methodBuffer.append(visitor.getBuffer().toString());
10411065
methodBuffer.append("cla$$ = Clazz.p0p ();\r\n");
1042-
methodBuffer.append("};\r\n");
1043-
1044-
buffer.append(visitor.getPackageName());
1045-
buffer.append(".");
1046-
buffer.append(targetClassName);
1047-
buffer.append(".$");
1048-
buffer.append(visitor.getClassName());
1049-
buffer.append("$ ();\r\n");
1050-
1051-
buffer.append("}\r\n");
1066+
// methodBuffer.append("};\r\n");
1067+
//
1068+
// String pkgName = visitor.getPackageName();
1069+
// if (pkgName != null && pkgName.length() > 0) {
1070+
// buffer.append(pkgName);
1071+
// buffer.append(".");
1072+
// }
1073+
// buffer.append(targetClassName);
1074+
// buffer.append(".$");
1075+
// buffer.append(visitor.getClassName());
1076+
// buffer.append("$");
1077+
// if (binding != null && !binding.isTopLevel()) {
1078+
// buffer.append(binding.getName());
1079+
// }
1080+
// buffer.append("$ ();\r\n");
1081+
//
1082+
// buffer.append("}\r\n");
10521083
}
10531084
return false;
10541085
}
@@ -3063,8 +3094,11 @@ public static void main(String[] args) {
30633094
methodBuffer.append("cla$$ = Clazz.p0p ();\r\n");
30643095
methodBuffer.append("};\r\n");
30653096

3066-
buffer.append(visitor.getPackageName());
3067-
buffer.append(".");
3097+
String pkgName = visitor.getPackageName();
3098+
if (pkgName != null && pkgName.length() > 0) {
3099+
buffer.append(pkgName);
3100+
buffer.append(".");
3101+
}
30683102
buffer.append(className);
30693103
buffer.append(".$");
30703104
buffer.append(targetClassName);

0 commit comments

Comments
 (0)