blob: 8831391fe59f32c9d2f15a9b1537b495a895297a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types;
import org.eclipse.jdt.core.dom.ITypeBinding;
public abstract class AbstractTypeVariable extends TType {
protected TType[] fBounds;
protected AbstractTypeVariable(TypeEnvironment environment) {
super(environment);
}
protected void initialize(ITypeBinding binding) {
super.initialize(binding);
ITypeBinding[] bounds= binding.getTypeBounds();
if (bounds.length == 0) {
fBounds= EMPTY_TYPE_ARRAY;
if (getEnvironment().getJavaLangObject() == null) {
getEnvironment().initializeJavaLangObject(binding.getErasure());
}
} else {
fBounds= new TType[bounds.length];
for (int i= 0; i < bounds.length; i++) {
fBounds[i]= getEnvironment().create(bounds[i]);
}
}
}
public TType getErasure() {
if (fBounds.length == 0)
return getEnvironment().getJavaLangObject();
return fBounds[0].getErasure();
}
/* package */ final boolean isUnbounded() {
if (fBounds.length == 0)
return true;
return fBounds[0].isJavaLangObject();
}
public final TType[] getBounds() {
return (TType[]) fBounds.clone();
}
public final TType[] getSubTypes() {
return EMPTY_TYPE_ARRAY;
}
protected final boolean checkAssignmentBound(TType rhs) {
if (fBounds.length == 0)
return true;
for (int i= 0; i < fBounds.length; i++) {
if (rhs.canAssignTo(fBounds[i]))
return true;
}
return false;
}
protected final boolean canAssignOneBoundTo(TType lhs) {
if (fBounds.length == 0)
return lhs.isJavaLangObject();
for (int i= 0; i < fBounds.length; i++) {
if (fBounds[i].canAssignTo(lhs))
return true;
}
return false;
}
}