/******************************************************************************* * Copyright (c) 2000, 2007 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.wst.jsdt.internal.corext.refactoring.typeconstraints2; import org.eclipse.core.runtime.Assert; import org.eclipse.wst.jsdt.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$ } }