Author: [EMAIL PROTECTED]
Date: Mon Sep 8 15:19:55 2008
New Revision: 3630
Added:
trunk/user/test/com/google/gwt/dev/jjs/test/GenericCastTest.java
- copied unchanged from r3629,
/releases/1.5/user/test/com/google/gwt/dev/jjs/test/GenericCastTest.java
Modified:
trunk/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
trunk/dev/core/src/com/google/gwt/dev/shell/DispatchClassInfo.java
trunk/distro-source/core/src/release_notes.html
trunk/user/super/com/google/gwt/emul/java/lang/Integer.java
trunk/user/super/com/google/gwt/emul/java/lang/Long.java
trunk/user/test/com/google/gwt/dev/jjs/CompilerSuite.java
Log:
Merge 1.5 branch changes.
$ svn merge -r 3587:HEAD
https://google-web-toolkit.googlecode.com/svn/releases/1.5
Modified:
trunk/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
==============================================================================
--- trunk/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
(original)
+++ trunk/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java Mon
Sep 8 15:19:55 2008
@@ -997,7 +997,6 @@
JExpression processExpression(FieldReference x) {
SourceInfo info = makeSourceInfo(x);
FieldBinding fieldBinding = x.binding;
- JType type = (JType) typeMap.get(x.resolvedType);
JField field;
if (fieldBinding.declaringClass == null) {
// probably array.length
@@ -1012,11 +1011,15 @@
JExpression fieldRef = new JFieldRef(program, info, instance, field,
currentClass);
- /*
- * Note, this may result in an invalid AST due to an LHS cast
operation.
- * We fix this up in FixAssignmentToUnbox.
- */
- return maybeCast(type, fieldRef);
+ if (x.genericCast != null) {
+ JType castType = (JType) typeMap.get(x.genericCast);
+ /*
+ * Note, this may result in an invalid AST due to an LHS cast
operation.
+ * We fix this up in FixAssignmentToUnbox.
+ */
+ return maybeCast(castType, fieldRef);
+ }
+ return fieldRef;
}
JExpression processExpression(InstanceOfExpression x) {
@@ -1028,7 +1031,6 @@
JExpression processExpression(MessageSend x) {
SourceInfo info = makeSourceInfo(x);
- JType type = (JType) typeMap.get(x.resolvedType);
JMethod method = (JMethod) typeMap.get(x.binding);
JExpression qualifier;
@@ -1064,7 +1066,11 @@
// The arguments come first...
addCallArgs(x.arguments, call, x.binding);
- return maybeCast(type, call);
+ if (x.valueCast != null) {
+ JType castType = (JType) typeMap.get(x.valueCast);
+ return maybeCast(castType, call);
+ }
+ return call;
}
@SuppressWarnings("unused")
@@ -1197,6 +1203,10 @@
JVariable variable = (JVariable) node;
JExpression curRef = createVariableRef(info, variable, binding);
+ if (x.genericCast != null) {
+ JType castType = (JType) typeMap.get(x.genericCast);
+ curRef = maybeCast(castType, curRef);
+ }
/*
* Wackiness: JDT represents multiple field access as an array of
fields,
@@ -1204,7 +1214,8 @@
* otherBindings takes the current expression as a qualifier.
*/
if (x.otherBindings != null) {
- for (FieldBinding fieldBinding : x.otherBindings) {
+ for (int i = 0; i < x.otherBindings.length; ++i) {
+ FieldBinding fieldBinding = x.otherBindings[i];
JField field;
if (fieldBinding.declaringClass == null) {
// probably array.length
@@ -1217,6 +1228,10 @@
field = (JField) typeMap.get(fieldBinding);
}
curRef = new JFieldRef(program, info, curRef, field,
currentClass);
+ if (x.otherGenericCasts != null && x.otherGenericCasts[i] !=
null) {
+ JType castType = (JType) typeMap.get(x.otherGenericCasts[i]);
+ curRef = maybeCast(castType, curRef);
+ }
}
}
@@ -1254,15 +1269,22 @@
* instance. CreateThisRef should compute a "this" access of the
* appropriate type, unless the field is static.
*/
+ JExpression result = null;
if (x.syntheticAccessors != null) {
JField field = (JField) variable;
if (!field.isStatic()) {
JExpression instance = createThisRef(info,
field.getEnclosingType());
- return new JFieldRef(program, info, instance, field,
currentClass);
+ result = new JFieldRef(program, info, instance, field,
currentClass);
}
}
-
- return createVariableRef(info, variable, binding);
+ if (result == null) {
+ result = createVariableRef(info, variable, binding);
+ }
+ if (x.genericCast != null) {
+ JType castType = (JType) typeMap.get(x.genericCast);
+ result = maybeCast(castType, result);
+ }
+ return result;
}
JExpression processExpression(SuperReference x) {
Modified: trunk/dev/core/src/com/google/gwt/dev/shell/DispatchClassInfo.java
==============================================================================
--- trunk/dev/core/src/com/google/gwt/dev/shell/DispatchClassInfo.java
(original)
+++ trunk/dev/core/src/com/google/gwt/dev/shell/DispatchClassInfo.java Mon
Sep 8 15:19:55 2008
@@ -63,11 +63,12 @@
}
private void addMember(Member member, String sig) {
- if (!memberIdByName.containsKey(sig)) {
- memberById.add(member);
- int index = memberById.size() - 1;
- memberIdByName.put(sig, new Integer(index));
+ if (member.isSynthetic()) {
+ return;
}
+ int index = memberById.size();
+ memberById.add(member);
+ memberIdByName.put(sig, index);
}
private String getJsniSignature(Member member) {
@@ -148,7 +149,8 @@
private void lazyInitTargetMembersUsingReflectionHelper(Class<?>
targetClass,
boolean addConstructors) {
- // Start by analyzing the superclass recursively.
+ // Start by analyzing the superclass recursively; the concrete class
will
+ // clobber on overrides.
Class<?> superclass = targetClass.getSuperclass();
if (superclass != null) {
lazyInitTargetMembersUsingReflectionHelper(superclass, false);
@@ -158,11 +160,10 @@
}
if (addConstructors) {
- Constructor<?>[] constructors =
targetClass.getDeclaredConstructors();
- for (Constructor<?> c : constructors) {
- c.setAccessible(true);
- String sig = getJsniSignature(c);
- addMember(c, sig);
+ for (Constructor<?> ctor : targetClass.getDeclaredConstructors()) {
+ ctor.setAccessible(true);
+ String sig = getJsniSignature(ctor);
+ addMember(ctor, sig);
}
}
@@ -180,19 +181,17 @@
*/
// Get the methods on this class/interface.
- //
- Method[] methods = targetClass.getDeclaredMethods();
- for (int i = 0; i < methods.length; i++) {
- methods[i].setAccessible(true);
- String sig = getJsniSignature(methods[i]);
- addMember(methods[i], sig);
+ for (Method method : targetClass.getDeclaredMethods()) {
+ method.setAccessible(true);
+ String sig = getJsniSignature(method);
+ addMember(method, sig);
}
// Get the fields on this class/interface.
Field[] fields = targetClass.getDeclaredFields();
- for (int i = 0; i < fields.length; i++) {
- fields[i].setAccessible(true);
- addMember(fields[i], fields[i].getName());
+ for (Field field : fields) {
+ field.setAccessible(true);
+ addMember(field, field.getName());
}
}
}
Modified: trunk/distro-source/core/src/release_notes.html
==============================================================================
--- trunk/distro-source/core/src/release_notes.html (original)
+++ trunk/distro-source/core/src/release_notes.html Mon Sep 8 15:19:55 2008
@@ -66,7 +66,7 @@
</ul>
<p>
See the GWT issue tracker for
- <a
href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%2CFixedNotReleased%20milestone%3A1_5_Final%20type%3Adefect&num=1000">
+ <a
href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%2CFixedNotReleased%20milestone%3A1_5_Final&num=1000">
the complete list of bug fixes and enhancements</a> in this
release.
</p>
Modified: trunk/user/super/com/google/gwt/emul/java/lang/Integer.java
==============================================================================
--- trunk/user/super/com/google/gwt/emul/java/lang/Integer.java (original)
+++ trunk/user/super/com/google/gwt/emul/java/lang/Integer.java Mon Sep 8
15:19:55 2008
@@ -184,19 +184,20 @@
final int bufSize = 33;
char[] buf = new char[bufSize];
+ char[] digits = __Digits.digits;
int pos = bufSize - 1;
if (value >= 0) {
while (value >= radix) {
- buf[pos--] = __Digits.digits[value % radix];
+ buf[pos--] = digits[value % radix];
value /= radix;
}
- buf[pos] = __Digits.digits[value];
+ buf[pos] = digits[value];
} else {
while (value <= -radix) {
- buf[pos--] = __Digits.digits[-(value % radix)];
+ buf[pos--] = digits[-(value % radix)];
value /= radix;
}
- buf[pos--] = __Digits.digits[-value];
+ buf[pos--] = digits[-value];
buf[pos] = '-';
}
return String.__valueOf(buf, pos, bufSize);
@@ -227,19 +228,20 @@
final int bufSize = 32 / shift;
int bitMask = (1 << shift) - 1;
char[] buf = new char[bufSize];
+ char[] digits = __Digits.digits;
int pos = bufSize - 1;
if (value >= 0) {
while (value > bitMask) {
- buf[pos--] = __Digits.digits[value & bitMask];
+ buf[pos--] = digits[value & bitMask];
value >>= shift;
}
} else {
while (pos > 0) {
- buf[pos--] = __Digits.digits[value & bitMask];
+ buf[pos--] = digits[value & bitMask];
value >>= shift;
}
}
- buf[pos] = __Digits.digits[value & bitMask];
+ buf[pos] = digits[value & bitMask];
return String.__valueOf(buf, pos, bufSize);
}
Modified: trunk/user/super/com/google/gwt/emul/java/lang/Long.java
==============================================================================
--- trunk/user/super/com/google/gwt/emul/java/lang/Long.java (original)
+++ trunk/user/super/com/google/gwt/emul/java/lang/Long.java Mon Sep 8
15:19:55 2008
@@ -225,21 +225,22 @@
final int bufSize = 65;
char[] buf = new char[bufSize];
+ char[] digits = __Digits.digits;
int pos = bufSize - 1;
// Cache a converted version for performance (pure long ops are
faster).
long radix = intRadix;
if (value >= 0) {
while (value >= radix) {
- buf[pos--] = __Digits.digits[(int) (value % radix)];
+ buf[pos--] = digits[(int) (value % radix)];
value /= radix;
}
- buf[pos] = __Digits.digits[(int) value];
+ buf[pos] = digits[(int) value];
} else {
while (value <= -radix) {
- buf[pos--] = __Digits.digits[(int) -(value % radix)];
+ buf[pos--] = digits[(int) -(value % radix)];
value /= radix;
}
- buf[pos--] = __Digits.digits[(int) -value];
+ buf[pos--] = digits[(int) -value];
buf[pos] = '-';
}
return String.__valueOf(buf, pos, bufSize);
@@ -292,19 +293,20 @@
final int bufSize = 64 / shift;
long bitMask = (1 << shift) - 1;
char[] buf = new char[bufSize];
+ char[] digits = __Digits.digits;
int pos = bufSize - 1;
if (value >= 0) {
while (value > bitMask) {
- buf[pos--] = __Digits.digits[(int) (value & bitMask)];
+ buf[pos--] = digits[(int) (value & bitMask)];
value >>= shift;
}
} else {
while (pos > 0) {
- buf[pos--] = __Digits.digits[(int) (value & bitMask)];
+ buf[pos--] = digits[(int) (value & bitMask)];
value >>= shift;
}
}
- buf[pos] = __Digits.digits[(int) (value & bitMask)];
+ buf[pos] = digits[(int) (value & bitMask)];
return String.__valueOf(buf, pos, bufSize);
}
Modified: trunk/user/test/com/google/gwt/dev/jjs/CompilerSuite.java
==============================================================================
--- trunk/user/test/com/google/gwt/dev/jjs/CompilerSuite.java (original)
+++ trunk/user/test/com/google/gwt/dev/jjs/CompilerSuite.java Mon Sep 8
15:19:55 2008
@@ -24,6 +24,7 @@
import com.google.gwt.dev.jjs.test.CoverageTest;
import com.google.gwt.dev.jjs.test.EnhancedForLoopTest;
import com.google.gwt.dev.jjs.test.EnumsTest;
+import com.google.gwt.dev.jjs.test.GenericCastTest;
import com.google.gwt.dev.jjs.test.HostedTest;
import com.google.gwt.dev.jjs.test.InnerClassTest;
import com.google.gwt.dev.jjs.test.InnerOuterSuperTest;
@@ -62,6 +63,7 @@
suite.addTestSuite(CoverageTest.class);
suite.addTestSuite(EnhancedForLoopTest.class);
suite.addTestSuite(EnumsTest.class);
+ suite.addTestSuite(GenericCastTest.class);
suite.addTestSuite(HostedTest.class);
suite.addTestSuite(InnerClassTest.class);
suite.addTestSuite(InnerOuterSuperTest.class);
--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---