blob: a42b2cc9db594a339b6596b8a38a76cbe7c5d457 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2005 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.jem.java.internal.impl;
/*
*/
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.EObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.impl.EParameterImpl;
import org.eclipse.emf.ecore.util.*;
import org.eclipse.jem.internal.java.adapters.IJavaMethodAdapter;
import org.eclipse.jem.internal.java.adapters.ReadAdaptor;
import org.eclipse.jem.java.*;
/**
* @generated
*/
public class JavaParameterImpl extends EParameterImpl implements JavaParameter {
/**
* The default value of the '{@link #isFinal() <em>Final</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isFinal()
* @generated
* @ordered
*/
protected static final boolean FINAL_EDEFAULT = false;
/**
* The flag representing the value of the '{@link #isFinal() <em>Final</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isFinal()
* @generated
* @ordered
*/
protected static final int FINAL_EFLAG = 1 << 10;
/**
* The default value of the '{@link #getParameterKind() <em>Parameter Kind</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getParameterKind()
* @generated
* @ordered
*/
protected static final JavaParameterKind PARAMETER_KIND_EDEFAULT = JavaParameterKind.IN_LITERAL;
/**
* @generated This field/method will be replaced during code generation.
*/
protected JavaParameterKind parameterKind = PARAMETER_KIND_EDEFAULT;
protected JavaParameterImpl() {
super();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected EClass eStaticClass() {
return JavaRefPackage.Literals.JAVA_PARAMETER;
}
public JavaHelpers getJavaType() {
return (JavaHelpers)getEType();
}
public String getQualifiedName() {
return (eContainer() instanceof Method) ? ((Method)eContainer()).getName() + "." + this.getName() : this.getName();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case JavaRefPackage.JAVA_PARAMETER__FINAL:
return isFinal() ? Boolean.TRUE : Boolean.FALSE;
case JavaRefPackage.JAVA_PARAMETER__PARAMETER_KIND:
return getParameterKind();
}
return super.eGet(featureID, resolve, coreType);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void eSet(int featureID, Object newValue) {
switch (featureID) {
case JavaRefPackage.JAVA_PARAMETER__FINAL:
setFinal(((Boolean)newValue).booleanValue());
return;
case JavaRefPackage.JAVA_PARAMETER__PARAMETER_KIND:
setParameterKind((JavaParameterKind)newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void eUnset(int featureID) {
switch (featureID) {
case JavaRefPackage.JAVA_PARAMETER__FINAL:
setFinal(FINAL_EDEFAULT);
return;
case JavaRefPackage.JAVA_PARAMETER__PARAMETER_KIND:
setParameterKind(PARAMETER_KIND_EDEFAULT);
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean eIsSet(int featureID) {
switch (featureID) {
case JavaRefPackage.JAVA_PARAMETER__FINAL:
return ((eFlags & FINAL_EFLAG) != 0) != FINAL_EDEFAULT;
case JavaRefPackage.JAVA_PARAMETER__PARAMETER_KIND:
return parameterKind != PARAMETER_KIND_EDEFAULT;
}
return super.eIsSet(featureID);
}
/**
* Is this parameter type an array type.
*/
public boolean isArray() {
return getJavaType().isArray();
}
/**
* Is this a return parameter.
*/
public boolean isReturn() {
return JavaParameterKind.RETURN == getParameterKind().getValue();
}
/**
* @generated This field/method will be replaced during code generation
*/
public boolean isFinal() {
return (eFlags & FINAL_EFLAG) != 0;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setFinal(boolean newFinal) {
boolean oldFinal = (eFlags & FINAL_EFLAG) != 0;
if (newFinal) eFlags |= FINAL_EFLAG; else eFlags &= ~FINAL_EFLAG;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, JavaRefPackage.JAVA_PARAMETER__FINAL, oldFinal, newFinal));
}
/**
* @generated This field/method will be replaced during code generation
*/
public JavaParameterKind getParameterKind() {
return parameterKind;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setParameterKind(JavaParameterKind newParameterKind) {
JavaParameterKind oldParameterKind = parameterKind;
parameterKind = newParameterKind == null ? PARAMETER_KIND_EDEFAULT : newParameterKind;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, JavaRefPackage.JAVA_PARAMETER__PARAMETER_KIND, oldParameterKind, parameterKind));
}
/*
* This is not meant to be used outside of the reflection adapters.
*/
public synchronized ReadAdaptor getReadAdapter() {
return (ReadAdaptor) EcoreUtil.getRegisteredAdapter(eContainer(), ReadAdaptor.TYPE_KEY);
}
private static final int REFLECTED_BASE = 0x1, REFLECTED_PARAM_NAME = 0x2;
protected int reflectionStatus = REFLECTED_BASE; // At this time base reflection
// is performed at creation.
protected void reflectParamName() {
// We only want the testing of the hasReflected and get readadapter to be sync(this) so that
// it is short and no deadlock possibility (this is because the the method reflection adapter may go
// back to the containing java class to get its reflection adapter, which would lock on itself. So
// we need to keep the sections that are sync(this) to not be deadlockable by not doing significant work
// during the sync.
ReadAdaptor readAdaptor = null;
synchronized (this) {
if ((reflectionStatus & REFLECTED_PARAM_NAME) == 0) {
readAdaptor = getReadAdapter();
}
}
if (readAdaptor != null) {
boolean setReflected = ((IJavaMethodAdapter) readAdaptor).reflectParamNamesIfNecessary();
synchronized (this) {
// Don't want to set it false. That is job of reflection adapter. Otherwise we could have a race.
// Normally we wouldn't need to set this because it would be set during the reflectParamNamesIfNecessary, but
// in case there was a problem we mark it still reflected so we don't try again.
if (setReflected)
reflectionStatus |= (REFLECTED_BASE | REFLECTED_PARAM_NAME); // We can be certain base will be done by reflect generated if not already
// done.
}
}
}
public String getName() {
reflectParamName();
return super.getName();
}
public void setName(String name) {
super.setName(name);
synchronized (this) {
reflectionStatus |= (REFLECTED_PARAM_NAME);
}
}
/**
* @generated This field/method will be replaced during code generation.
*/
public String toString() {
if (eIsProxy()) return super.toString();
StringBuffer result = new StringBuffer(super.toString());
result.append(" (final: ");
result.append((eFlags & FINAL_EFLAG) != 0);
result.append(", parameterKind: ");
result.append(parameterKind);
result.append(')');
return result.toString();
}
@Override
public EList<EObject> eContents()
{
if (eContents == null)
{
eContents = EContentsEList.createEContentsEList(this);
}
return eContents;
}
@Override
public EList<EObject> eCrossReferences()
{
if (eCrossReferences == null)
{
eCrossReferences = ECrossReferenceEList.createECrossReferenceEList(this);
}
return eCrossReferences;
}
}