First pass to ignore generic typing.
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@1344 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
index d8e364a..9759032 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
@@ -154,6 +154,7 @@
import org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
import org.eclipse.jdt.internal.compiler.lookup.MethodScope;
import org.eclipse.jdt.internal.compiler.lookup.NestedTypeBinding;
+import org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding;
import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
import org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding;
import org.eclipse.jdt.internal.compiler.lookup.SyntheticArgumentBinding;
@@ -563,7 +564,7 @@
JExpression processExpression(AllocationExpression x) {
SourceInfo info = makeSourceInfo(x);
- SourceTypeBinding typeBinding = (SourceTypeBinding) x.resolvedType;
+ SourceTypeBinding typeBinding = erasure(x.resolvedType);
if (typeBinding.constantPoolName() == null) {
/*
* Weird case: if JDT determines that this local class is totally
@@ -620,7 +621,7 @@
// Synthetic args for inner classes
ReferenceBinding targetBinding = b.declaringClass;
if (targetBinding.isNestedType() && !targetBinding.isStatic()) {
- NestedTypeBinding nestedBinding = (NestedTypeBinding) targetBinding;
+ NestedTypeBinding nestedBinding = (NestedTypeBinding) erasure(targetBinding);
// Synthetic this args for inner classes
if (nestedBinding.enclosingInstances != null) {
for (int i = 0; i < nestedBinding.enclosingInstances.length; ++i) {
@@ -901,7 +902,8 @@
SourceInfo info = makeSourceInfo(x);
JType type = (JType) typeMap.get(x.resolvedType);
JMethod method = (JMethod) typeMap.get(x.binding);
- assert (type == method.getType());
+ // TODO
+ //assert (type == method.getType());
JExpression qualifier;
if (x.receiver instanceof ThisReference) {
@@ -1811,6 +1813,13 @@
return createVariableRef(info, variable);
}
+ private SourceTypeBinding erasure(TypeBinding typeBinding) {
+ if (typeBinding instanceof ParameterizedTypeBinding) {
+ typeBinding = ((ParameterizedTypeBinding)typeBinding).erasure();
+ }
+ return (SourceTypeBinding)typeBinding;
+ }
+
/**
* Get a new label of a particular name, or create a new one if it doesn't
* exist already.
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/TypeMap.java b/dev/core/src/com/google/gwt/dev/jjs/impl/TypeMap.java
index 4dbef44..0d5b561 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/TypeMap.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/TypeMap.java
@@ -24,6 +24,10 @@
import org.eclipse.jdt.internal.compiler.lookup.ArrayBinding;
import org.eclipse.jdt.internal.compiler.lookup.BaseTypeBinding;
import org.eclipse.jdt.internal.compiler.lookup.Binding;
+import org.eclipse.jdt.internal.compiler.lookup.ParameterizedFieldBinding;
+import org.eclipse.jdt.internal.compiler.lookup.ParameterizedMethodBinding;
+import org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding;
+import org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding;
import java.util.IdentityHashMap;
import java.util.Map;
@@ -48,6 +52,19 @@
}
public JNode get(Binding binding) {
+ if (binding instanceof TypeVariableBinding) {
+ TypeVariableBinding tvb = (TypeVariableBinding) binding;
+ binding = tvb.erasure();
+ } else if (binding instanceof ParameterizedTypeBinding) {
+ ParameterizedTypeBinding ptb = (ParameterizedTypeBinding) binding;
+ binding = ptb.erasure();
+ } else if (binding instanceof ParameterizedMethodBinding) {
+ ParameterizedMethodBinding pmb = (ParameterizedMethodBinding) binding;
+ binding = pmb.original();
+ } else if (binding instanceof ParameterizedFieldBinding) {
+ ParameterizedFieldBinding pfb = (ParameterizedFieldBinding) binding;
+ binding = pfb.original();
+ }
JNode result = internalGet(binding);
if (result == null) {
InternalCompilerException ice = new InternalCompilerException(