blob: 477000017bb32d295070d2e14784204c47a9b079 [file] [log] [blame]
/*
* Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.dev.javac.typemodel;
import com.google.gwt.core.ext.typeinfo.JType;
import com.google.gwt.core.ext.typeinfo.NotFoundException;
import java.util.ArrayList;
import java.util.List;
/**
* Represents a raw type; that is a generic type with no type arguments.
*/
public class JRawType extends JMaybeParameterizedType implements
com.google.gwt.core.ext.typeinfo.JRawType {
private static final Substitution ERASURE_SUBSTITUTION = new Substitution() {
public JClassType getSubstitution(JClassType type) {
return type.getErasedType();
}
};
private List<JClassType> interfaces;
private final AbstractMembers members;
JRawType(JGenericType genericType) {
super.setBaseType(genericType);
members = new DelegateMembers(this, getBaseType(), ERASURE_SUBSTITUTION);
}
public JParameterizedType asParameterizedByWildcards() {
return getBaseType().asParameterizedByWildcards();
}
@Override
public JConstructor findConstructor(JType[] paramTypes) {
return members.findConstructor(paramTypes);
}
@Override
public JField findField(String name) {
return members.findField(name);
}
@Override
public JMethod findMethod(String name, JType[] paramTypes) {
return members.findMethod(name, paramTypes);
}
@Override
public JClassType findNestedType(String typeName) {
return members.findNestedType(typeName);
}
@Override
public JConstructor getConstructor(JType[] paramTypes)
throws NotFoundException {
return members.getConstructor(paramTypes);
}
@Override
public JConstructor[] getConstructors() {
return members.getConstructors();
}
@Override
public JField getField(String name) {
return members.getField(name);
}
@Override
public JField[] getFields() {
return members.getFields();
}
public JGenericType getGenericType() {
return getBaseType();
}
@Override
public JClassType[] getImplementedInterfaces() {
if (interfaces == null) {
interfaces = new ArrayList<JClassType>();
JClassType[] intfs = getBaseType().getImplementedInterfaces();
for (JClassType intf : intfs) {
JClassType newIntf = intf.getErasedType();
interfaces.add(newIntf);
}
}
return interfaces.toArray(TypeOracle.NO_JCLASSES);
}
@Override
public JMethod[] getInheritableMethods() {
return members.getInheritableMethods();
}
@Override
public JMethod getMethod(String name, JType[] paramTypes)
throws NotFoundException {
return members.getMethod(name, paramTypes);
}
@Override
public JMethod[] getMethods() {
return members.getMethods();
}
@Override
public JClassType getNestedType(String typeName) throws NotFoundException {
return members.getNestedType(typeName);
}
@Override
public JClassType[] getNestedTypes() {
return members.getNestedTypes();
}
@Override
public JMethod[] getOverloads(String name) {
return members.getOverloads(name);
}
@Override
public JMethod[] getOverridableMethods() {
return members.getOverridableMethods();
}
@Override
public String getParameterizedQualifiedSourceName() {
return getQualifiedSourceName();
}
@Override
public String getQualifiedBinaryName() {
return getBaseType().getQualifiedBinaryName();
}
@Override
public String getQualifiedSourceName() {
return getBaseType().getQualifiedSourceName();
}
@Override
public String getSimpleSourceName() {
return getBaseType().getSimpleSourceName();
}
@Override
public JClassType[] getSubtypes() {
JClassType[] baseSubTypes = super.getSubtypes();
JClassType[] rawSubTypes = new JClassType[baseSubTypes.length];
for (int i = 0; i < baseSubTypes.length; ++i) {
JClassType subType = baseSubTypes[i];
JGenericType isGenericType = subType.isGenericType();
if (isGenericType != null) {
rawSubTypes[i] = isGenericType.getRawType();
} else {
rawSubTypes[i] = subType;
}
}
return rawSubTypes;
}
@Override
public JClassType getSuperclass() {
JClassType baseSuper = getBaseType().getSuperclass();
if (baseSuper == null) {
return null;
}
return baseSuper.getErasedType();
}
@Override
public JGenericType isGenericType() {
return null;
}
@Override
public JParameterizedType isParameterized() {
return null;
}
@Override
public JRawType isRawType() {
return this;
}
@Override
public JWildcardType isWildcard() {
return null;
}
@Override
JRawType getSubstitutedType(JParameterizedType parameterizedType) {
/*
* Raw types do not participate in substitution.
*/
return this;
}
}