|
135 | 135 |
|
136 | 136 | // TODO: superclass inheritance for JAXB XmlAccessorType |
137 | 137 |
|
| 138 | +//BH 2020.04.05 -- 3.2.9-v1f (Boolean ? ...) not unboxed |
138 | 139 | //BH 2020.03.21 -- 3.2.9-v1e better v1c |
139 | 140 | //BH 2020.03.20 -- 3.2.9-v1d proper check for new String("x") == "x" (should be false), but new integer(3) == 3 (true) |
140 | 141 | //BH 2020.03.20 -- 3.2.9-v1c more efficient static call from 3.2.9-v1a |
@@ -860,46 +861,46 @@ private void addConstructor(ITypeBinding javaClass, |
860 | 861 | buffer.append(")"); |
861 | 862 | } |
862 | 863 |
|
863 | | - /** |
864 | | - * 3.2.9.v1a |
865 | | - * |
866 | | - * Static method invocations must process parameters before initializing the method's class |
867 | | - * if any parameter either calls a method or defines a static variable. We do this by changing |
868 | | - * |
869 | | - * $I$(3).xxxx(x,y,z) |
870 | | - * |
871 | | - * to |
872 | | - * |
873 | | - * (function(a,b){b.apply(null,a)})([x,y,z],$I$(3).xxxx) |
874 | | - * |
875 | | - * In addition, for constructors, Clazz.new_ needs to have the parameters as the first |
876 | | - * parameter and the constructor method as the second parameter: |
877 | | - * |
878 | | - * Clazz.new_([args],constr) |
879 | | - * |
880 | | - * The method invocation has not been closed at this point. |
881 | | - * |
882 | | - * @param pt start of method name |
883 | | - * @param pt1 end of method name |
884 | | - */ |
885 | | - private void checkStaticParams(int pt, int pt1, boolean isConstructor) { |
886 | | - String args; |
887 | | - // must switch from Clazz.new_($I$(3).xxxx,[x,y,z] to Clazz.new([x,y,z],$I$(3).xxxx |
888 | | - // ............................^pt........^pt1 |
889 | | - // must switch from $I$(3).xxxx(x,y,z to (function(a,f){return f.apply(null,a)})([x,y,z],$I$(3).xxxx |
890 | | - // .................^pt........^pt1 |
891 | | - if (pt1 == pt |
892 | | - || buffer.charAt(pt) != '$' |
893 | | - || (args = buffer.substring(pt1 + 1)).indexOf("(") < 0 && args.indexOf("=") < 0) |
894 | | - return; |
895 | | - String f = buffer.substring(pt, pt1); |
896 | | - buffer.setLength(pt); |
897 | | - if (!isConstructor) { |
898 | | - args = "(function(a,f){return f.apply(null,a)})([" + args + "]"; |
899 | | - } |
900 | | - buffer.append(args).append(",").append(f); |
901 | | - } |
902 | | - |
| 864 | +// /** |
| 865 | +// * 3.2.9.v1a |
| 866 | +// * |
| 867 | +// * Static method invocations must process parameters before initializing the method's class |
| 868 | +// * if any parameter either calls a method or defines a static variable. We do this by changing |
| 869 | +// * |
| 870 | +// * $I$(3).xxxx(x,y,z) |
| 871 | +// * |
| 872 | +// * to |
| 873 | +// * |
| 874 | +// * (function(a,b){b.apply(null,a)})([x,y,z],$I$(3).xxxx) |
| 875 | +// * |
| 876 | +// * In addition, for constructors, Clazz.new_ needs to have the parameters as the first |
| 877 | +// * parameter and the constructor method as the second parameter: |
| 878 | +// * |
| 879 | +// * Clazz.new_([args],constr) |
| 880 | +// * |
| 881 | +// * The method invocation has not been closed at this point. |
| 882 | +// * |
| 883 | +// * @param pt start of method name |
| 884 | +// * @param pt1 end of method name |
| 885 | +// */ |
| 886 | +// private void checkStaticParams(int pt, int pt1, boolean isConstructor) { |
| 887 | +// String args; |
| 888 | +// // must switch from Clazz.new_($I$(3).xxxx,[x,y,z] to Clazz.new([x,y,z],$I$(3).xxxx |
| 889 | +// // ............................^pt........^pt1 |
| 890 | +// // must switch from $I$(3).xxxx(x,y,z to (function(a,f){return f.apply(null,a)})([x,y,z],$I$(3).xxxx |
| 891 | +// // .................^pt........^pt1 |
| 892 | +// if (pt1 == pt |
| 893 | +// || buffer.charAt(pt) != '$' |
| 894 | +// || (args = buffer.substring(pt1 + 1)).indexOf("(") < 0 && args.indexOf("=") < 0) |
| 895 | +// return; |
| 896 | +// String f = buffer.substring(pt, pt1); |
| 897 | +// buffer.setLength(pt); |
| 898 | +// if (!isConstructor) { |
| 899 | +// args = "(function(a,f){return f.apply(null,a)})([" + args + "]"; |
| 900 | +// } |
| 901 | +// buffer.append(args).append(",").append(f); |
| 902 | +// } |
| 903 | +// |
903 | 904 |
|
904 | 905 | /** |
905 | 906 | * 3.2.9.v1c |
@@ -3458,7 +3459,10 @@ public boolean visit(ConditionalExpression node) { |
3458 | 3459 | ITypeBinding binding = node.resolveTypeBinding(); |
3459 | 3460 | Expression expThen = node.getThenExpression(); |
3460 | 3461 | Expression expElse = node.getElseExpression(); |
3461 | | - node.getExpression().accept(this); |
| 3462 | + Expression exp = node.getExpression(); |
| 3463 | + exp.accept(this); |
| 3464 | + if (exp.resolveUnboxing()) |
| 3465 | + buffer.append(".booleanValue$()"); |
3462 | 3466 | buffer.append(" ? "); |
3463 | 3467 | addExpressionAsTargetType(expThen, binding, "e", null); |
3464 | 3468 | buffer.append(" : "); |
@@ -6507,12 +6511,31 @@ static String getPrimitiveTYPE(String name) { |
6507 | 6511 | return type.substring(0, type.indexOf(",")); |
6508 | 6512 | } |
6509 | 6513 |
|
6510 | | - private final static String[] knownClasses = new String[] { "java.lang.Object", "java.lang.Class", |
6511 | | - "java.lang.String", "java.lang.Byte", "java.lang.Character", "java.lang.Short", "java.lang.Long", |
6512 | | - "java.lang.Integer", "java.lang.Float", "java.lang.Double", "java.io.Serializable", |
6513 | | - "java.lang.Iterable", "java.lang.CharSequence", "java.lang.Cloneable", "java.lang.Comparable", |
6514 | | - "java.lang.Runnable", "java.lang.System", "java.lang.ClassLoader", "java.lang.Math", |
6515 | | - "java.lang.Number" }; |
| 6514 | + private final static String[] knownClasses = new String[] { |
| 6515 | + "java.lang.Object", |
| 6516 | + "java.lang.Class", |
| 6517 | + "java.lang.String", |
| 6518 | + "java.lang.Number", |
| 6519 | + "java.lang.Byte", |
| 6520 | + "java.lang.Character", |
| 6521 | + "java.lang.Short", |
| 6522 | + "java.lang.Long", |
| 6523 | + "java.lang.Integer", |
| 6524 | + "java.lang.Float", |
| 6525 | + "java.lang.Double", |
| 6526 | + "java.lang.Boolean", |
| 6527 | + "java.lang.Iterable", |
| 6528 | + "java.lang.CharSequence", |
| 6529 | + "java.lang.Cloneable", |
| 6530 | + "java.lang.Comparable", |
| 6531 | + "java.lang.Runnable", |
| 6532 | + "java.lang.System", |
| 6533 | + "java.lang.Throwable", |
| 6534 | + "java.lang.ClassLoader", |
| 6535 | + "java.lang.Math", |
| 6536 | + "java.io.Serializable", |
| 6537 | + "java.util.Date" |
| 6538 | + }; |
6516 | 6539 | private final static Set<String> knownClassHash = new HashSet<String>(); |
6517 | 6540 | static { |
6518 | 6541 | for (int i = knownClasses.length; --i >= 0;) |
|
0 commit comments