blob: 6a514486b1197efbb5fd85301ad3680aaeb10be0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 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.typeconstraints2;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.TType;
public abstract class ConstraintVariable2 {
public static final String TO_STRING= "toString"; //$NON-NLS-1$
private Object[] fDatas;
private TypeEquivalenceSet fTypeEquivalenceSet;
protected final TType fType;
/**
* @param type the type
*/
protected ConstraintVariable2(TType type) {
fType= type;
}
public Object getData(String name) {
if (fDatas == null) {
return null;
} else {
for (int i= 0; i < fDatas.length; i+= 2) {
String key= (String) fDatas[i];
if (key.equals(name))
return fDatas[i + 1];
}
return null;
}
}
public TypeEquivalenceSet getTypeEquivalenceSet() {
return fTypeEquivalenceSet;
}
/**
* @return the type binding, or <code>null</code> iff the type constraint variable has no type in the original source (e.g. {@link CollectionElementVariable2})
*/
public TType getType() {
return fType;
}
public ITypeSet getTypeEstimate() {
Assert.isNotNull(fTypeEquivalenceSet);
return fTypeEquivalenceSet.getTypeEstimate();
}
public void setData(String name, Object data) {
int index= 0;
if (fDatas != null) {
while (index < fDatas.length) {
if (name.equals(fDatas[index]))
break;
index+= 2;
}
}
if (data != null) { // add
if (fDatas != null) {
if (index == fDatas.length) {
Object[] newTable= new Object[fDatas.length + 2];
System.arraycopy(fDatas, 0, newTable, 0, fDatas.length);
fDatas= newTable;
}
} else {
fDatas= new Object[2];
}
fDatas[index]= name;
fDatas[index + 1]= data;
} else { // remove
if (fDatas != null) {
if (index != fDatas.length) {
int length= fDatas.length - 2;
if (length == 0) {
fDatas= null;
} else {
Object[] newTable= new Object[length];
System.arraycopy(fDatas, 0, newTable, 0, index);
System.arraycopy(fDatas, index + 2, newTable, index, length - index);
fDatas= newTable;
}
}
}
}
}
public void setTypeEquivalenceSet(TypeEquivalenceSet set) {
fTypeEquivalenceSet= set;
}
public String toString() {
String toString= (String) getData(TO_STRING);
if (toString != null)
return toString;
String name= getClass().getName();
int dot= name.lastIndexOf('.');
return name.substring(dot + 1) + ": " + fType != null ? fType.getPrettySignature() : "<NONE>"; //$NON-NLS-1$ //$NON-NLS-2$
}
}