| /** |
| * <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 |