blob: 29d9d0272df0760a82d213538b60f30ec63e7c82 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 Oracle Corporation.
* 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:
* Cameron Bateman/Oracle - initial API and implementation
*
********************************************************************************/
package org.eclipse.jst.jsf.context.symbol.internal.impl;
import java.util.Collection;
import java.util.Iterator;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.impl.EObjectImpl;
import org.eclipse.jdt.core.Signature;
import org.eclipse.jst.jsf.context.symbol.SymbolPackage;
import org.eclipse.jst.jsf.context.symbol.internal.provisional.IObjectSymbol;
import org.eclipse.jst.jsf.context.symbol.internal.provisional.ITypeDescriptor;
/**
* <!-- begin-user-doc -->
* An implementation of the model object '<em><b>IType Descriptor</b></em>'.
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
* <ul>
* <li>{@link org.eclipse.jst.jsf.context.symbol.internal.impl.ITypeDescriptorImpl#getProperties <em>Properties</em>}</li>
* <li>{@link org.eclipse.jst.jsf.context.symbol.internal.impl.ITypeDescriptorImpl#getTypeSignature <em>Type Signature</em>}</li>
* <li>{@link org.eclipse.jst.jsf.context.symbol.internal.impl.ITypeDescriptorImpl#getSuperTypeSignatures <em>Super Type Signatures</em>}</li>
* <li>{@link org.eclipse.jst.jsf.context.symbol.internal.impl.ITypeDescriptorImpl#getInterfaceTypeSignatures <em>Interface Type Signatures</em>}</li>
* <li>{@link org.eclipse.jst.jsf.context.symbol.internal.impl.ITypeDescriptorImpl#getTypeSignatureDelegate <em>Type Signature Delegate</em>}</li>
* <li>{@link org.eclipse.jst.jsf.context.symbol.internal.impl.ITypeDescriptorImpl#getMethods <em>Methods</em>}</li>
* </ul>
* </p>
*
* @generated
*/
public abstract class ITypeDescriptorImpl extends EObjectImpl implements ITypeDescriptor {
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public static final String copyright = "Copyright 2006 Oracle";
/**
* The default value of the '{@link #getTypeSignature() <em>Type Signature</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getTypeSignature()
* @generated
* @ordered
*/
protected static final String TYPE_SIGNATURE_EDEFAULT = "";
/**
* The default value of the '{@link #getTypeSignatureDelegate() <em>Type Signature Delegate</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getTypeSignatureDelegate()
* @generated
* @ordered
*/
protected static final String TYPE_SIGNATURE_DELEGATE_EDEFAULT = null;
/**
* The cached value of the '{@link #getTypeSignatureDelegate() <em>Type Signature Delegate</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getTypeSignatureDelegate()
* @generated
* @ordered
*/
protected String typeSignatureDelegate = TYPE_SIGNATURE_DELEGATE_EDEFAULT;
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected ITypeDescriptorImpl() {
super();
}
/**
* <!-- begin-user-doc -->
* @return the static class
* <!-- end-user-doc -->
* @generated
*/
protected EClass eStaticClass() {
return SymbolPackage.Literals.ITYPE_DESCRIPTOR;
}
/**
* <!-- begin-user-doc -->
* @return get properties for this type
* <!-- end-user-doc -->
* @generated NOT
*/
public abstract EList getProperties();
/**
* <!-- begin-user-doc -->
* @return the type signature in JVM/JDT signature form
* <!-- end-user-doc -->
* @generated NOT
*/
public abstract String getTypeSignature();
/**
* <!-- begin-user-doc -->
* @return the list of super types
* <!-- end-user-doc -->
* @generated NOT
*/
public abstract EList getSuperTypeSignatures();
/**
* <!-- begin-user-doc -->
* @return the list of implemented interfaces
* <!-- end-user-doc -->
* @generated NOT
*/
public abstract EList getInterfaceTypeSignatures();
/**
* <!-- begin-user-doc -->
* @return the type signature delegate. The descriptor may choose to use
* this delegate it if it is set and it cannot derive this information
* from other properties
* <!-- end-user-doc -->
* @generated
*/
public String getTypeSignatureDelegate() {
return typeSignatureDelegate;
}
/**
* <!-- begin-user-doc -->
* @param newTypeSignatureDelegate
* <!-- end-user-doc -->
* @generated
*/
public void setTypeSignatureDelegate(String newTypeSignatureDelegate) {
String oldTypeSignatureDelegate = typeSignatureDelegate;
typeSignatureDelegate = newTypeSignatureDelegate;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, SymbolPackage.ITYPE_DESCRIPTOR__TYPE_SIGNATURE_DELEGATE, oldTypeSignatureDelegate, typeSignatureDelegate));
}
/**
* <!-- begin-user-doc -->
* @return the methods for this type or empty list if none exist
* <!-- end-user-doc -->
* @generated NOT
*/
public abstract EList getMethods();
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean instanceOf(final String typeSignature)
{
if (getTypeSignature() != null
&& getTypeSignature().equals(typeSignature))
{
return true;
}
for (final Iterator it = getSuperTypeSignatures().iterator(); it.hasNext();)
{
final String superType = (String) it.next();
if (superType.equals(typeSignature))
{
return true;
}
}
for (final Iterator it = getInterfaceTypeSignatures().iterator(); it.hasNext();)
{
final String superType = (String) it.next();
if (superType.equals(typeSignature))
{
return true;
}
}
return false;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean isArray()
{
return Signature.getArrayCount(getTypeSignature()) > 0;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public IObjectSymbol getArrayElement()
{
if (isArray())
{
// sub-class of ITypeDescriptor must implement this if they which to provide
// array element support
throw new UnsupportedOperationException("Base type descriptor does not support this function");
}
// shouldn't be called if not an array
return null;
}
/**
* <!-- begin-user-doc -->
* @param featureID
* @param resolve
* @param coreType
* @return get the feature
* <!-- end-user-doc -->
* @generated
*/
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case SymbolPackage.ITYPE_DESCRIPTOR__PROPERTIES:
return getProperties();
case SymbolPackage.ITYPE_DESCRIPTOR__TYPE_SIGNATURE:
return getTypeSignature();
case SymbolPackage.ITYPE_DESCRIPTOR__SUPER_TYPE_SIGNATURES:
return getSuperTypeSignatures();
case SymbolPackage.ITYPE_DESCRIPTOR__INTERFACE_TYPE_SIGNATURES:
return getInterfaceTypeSignatures();
case SymbolPackage.ITYPE_DESCRIPTOR__TYPE_SIGNATURE_DELEGATE:
return getTypeSignatureDelegate();
case SymbolPackage.ITYPE_DESCRIPTOR__METHODS:
return getMethods();
}
return super.eGet(featureID, resolve, coreType);
}
/**
* <!-- begin-user-doc -->
* @param featureID
* @param newValue
* <!-- end-user-doc -->
* @generated
*/
public void eSet(int featureID, Object newValue) {
switch (featureID) {
case SymbolPackage.ITYPE_DESCRIPTOR__PROPERTIES:
getProperties().clear();
getProperties().addAll((Collection)newValue);
return;
case SymbolPackage.ITYPE_DESCRIPTOR__SUPER_TYPE_SIGNATURES:
getSuperTypeSignatures().clear();
getSuperTypeSignatures().addAll((Collection)newValue);
return;
case SymbolPackage.ITYPE_DESCRIPTOR__INTERFACE_TYPE_SIGNATURES:
getInterfaceTypeSignatures().clear();
getInterfaceTypeSignatures().addAll((Collection)newValue);
return;
case SymbolPackage.ITYPE_DESCRIPTOR__TYPE_SIGNATURE_DELEGATE:
setTypeSignatureDelegate((String)newValue);
return;
case SymbolPackage.ITYPE_DESCRIPTOR__METHODS:
getMethods().clear();
getMethods().addAll((Collection)newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc -->
* @param featureID
* <!-- end-user-doc -->
* @generated
*/
public void eUnset(int featureID) {
switch (featureID) {
case SymbolPackage.ITYPE_DESCRIPTOR__PROPERTIES:
getProperties().clear();
return;
case SymbolPackage.ITYPE_DESCRIPTOR__SUPER_TYPE_SIGNATURES:
getSuperTypeSignatures().clear();
return;
case SymbolPackage.ITYPE_DESCRIPTOR__INTERFACE_TYPE_SIGNATURES:
getInterfaceTypeSignatures().clear();
return;
case SymbolPackage.ITYPE_DESCRIPTOR__TYPE_SIGNATURE_DELEGATE:
setTypeSignatureDelegate(TYPE_SIGNATURE_DELEGATE_EDEFAULT);
return;
case SymbolPackage.ITYPE_DESCRIPTOR__METHODS:
getMethods().clear();
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc -->
* @param featureID
* @return true if feature has been set
* <!-- end-user-doc -->
* @generated
*/
public boolean eIsSet(int featureID) {
switch (featureID) {
case SymbolPackage.ITYPE_DESCRIPTOR__PROPERTIES:
return !getProperties().isEmpty();
case SymbolPackage.ITYPE_DESCRIPTOR__TYPE_SIGNATURE:
return TYPE_SIGNATURE_EDEFAULT == null ? getTypeSignature() != null : !TYPE_SIGNATURE_EDEFAULT.equals(getTypeSignature());
case SymbolPackage.ITYPE_DESCRIPTOR__SUPER_TYPE_SIGNATURES:
return !getSuperTypeSignatures().isEmpty();
case SymbolPackage.ITYPE_DESCRIPTOR__INTERFACE_TYPE_SIGNATURES:
return !getInterfaceTypeSignatures().isEmpty();
case SymbolPackage.ITYPE_DESCRIPTOR__TYPE_SIGNATURE_DELEGATE:
return TYPE_SIGNATURE_DELEGATE_EDEFAULT == null ? typeSignatureDelegate != null : !TYPE_SIGNATURE_DELEGATE_EDEFAULT.equals(typeSignatureDelegate);
case SymbolPackage.ITYPE_DESCRIPTOR__METHODS:
return !getMethods().isEmpty();
}
return super.eIsSet(featureID);
}
/**
* <!-- begin-user-doc -->
* @return the debug string format of the type signature
* <!-- end-user-doc -->
* @generated
*/
public String toString() {
if (eIsProxy()) return super.toString();
StringBuffer result = new StringBuffer(super.toString());
result.append(" (typeSignatureDelegate: ");
result.append(typeSignatureDelegate);
result.append(')');
return result.toString();
}
} //ITypeDescriptorImpl