blob: 1989995113daa31f2c1a1c86e97f707d38593403 [file] [log] [blame]
/**
* <copyright>
* </copyright>
*
* $Id: IBoundedMapTypeDescriptorImpl.java,v 1.7 2007/10/01 04:29:44 cbateman Exp $
*/
package org.eclipse.jst.jsf.context.symbol.internal.impl;
import java.util.Iterator;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.jdt.core.Signature;
import org.eclipse.jst.jsf.common.internal.types.TypeConstants;
import org.eclipse.jst.jsf.common.internal.types.ValueType;
import org.eclipse.jst.jsf.context.symbol.IBoundedJavaTypeDescriptor;
import org.eclipse.jst.jsf.context.symbol.IBoundedMapTypeDescriptor;
import org.eclipse.jst.jsf.context.symbol.IPropertySymbol;
import org.eclipse.jst.jsf.context.symbol.ISymbol;
import org.eclipse.jst.jsf.context.symbol.SymbolFactory;
import org.eclipse.jst.jsf.context.symbol.SymbolPackage;
/**
* <!-- begin-user-doc -->
* An implementation of the model object '<em><b>IBounded Map Type Descriptor</b></em>'.
* <!-- end-user-doc -->
* <p>
* </p>
*
* @generated
*/
public class IBoundedMapTypeDescriptorImpl extends IMapTypeDescriptorImpl implements IBoundedMapTypeDescriptor {
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@SuppressWarnings("hiding")
public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected IBoundedMapTypeDescriptorImpl() {
super();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected EClass eStaticClass() {
return SymbolPackage.Literals.IBOUNDED_MAP_TYPE_DESCRIPTOR;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean isUnboundedForType(String typeSignature) {
// TODO: for now, return true if the type is a resolved object
// need to add support for template checking (Java5) and
// decide what to do with unresolved (Q) type signatures
return typeSignature != null
&& typeSignature.startsWith(Character.toString(Signature.C_RESOLVED));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public ISymbol getUnboundedProperty(Object name, String typeSignature) {
ISymbol retValue = null;
if (isUnboundedForType(typeSignature))
{
// first see if we have it in our map source
retValue = getFromMap(name.toString());
if (retValue == null)
{
IPropertySymbol propSymbol = SymbolFactory.eINSTANCE.createIPropertySymbol();
// TODO: there is a possible problem here for non-string keyed maps
propSymbol.setName(name.toString());
propSymbol.setReadable(true);
IBoundedJavaTypeDescriptor typeDesc =
SymbolFactory.eINSTANCE.createIBoundedJavaTypeDescriptor();
typeDesc.setTypeSignatureDelegate(TypeConstants.TYPE_JAVAOBJECT);
propSymbol.setTypeDescriptor(typeDesc);
retValue = propSymbol;
}
}
return retValue;
}
/**
* @see org.eclipse.jst.jsf.context.symbol.internal.impl.ITypeDescriptorImpl#calculateSyntheticCall(java.lang.String, org.eclipse.emf.common.util.EList, java.lang.String)
* @generated NOT
*/
public ISymbol calculateSyntheticCall(String methodName, EList methodArgs,
String symbolName) {
if ("get".equals(methodName) //$NON-NLS-1$
&& methodArgs.size() == 1)
{
return getUnboundedProperty(symbolName, ((ValueType) methodArgs.get(0)).getSignature());
}
// default is return null
return null;
}
/**
* @generated NOT
*/
private ISymbol getFromMap(final String name)
{
for (final Iterator it = getProperties().iterator(); it.hasNext();)
{
ISymbol symbol = (ISymbol) it.next();
if (symbol.getName().equals(name))
{
return symbol;
}
}
return null;
}
} //IBoundedMapTypeDescriptorImpl