Fixed service resolution for EOperation with EObject parameter.

Change-Id: I00a6d5647a0aceae5c8f75cd23bc5f9b3a93328f
diff --git a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/ServiceUtils.java b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/ServiceUtils.java
index 606d0f0..3f6c9ab 100644
--- a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/ServiceUtils.java
+++ b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/runtime/ServiceUtils.java
@@ -24,6 +24,7 @@
 import org.eclipse.emf.ecore.EClassifier;
 import org.eclipse.emf.ecore.EOperation;
 import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EcorePackage;
 
 /**
  * Utility for {@link IService}.
@@ -255,10 +256,26 @@
 		final Set<IService> result = new LinkedHashSet<IService>();
 
 		for (EOperation eOperation : eCls.getEAllOperations()) {
-			result.add(new EOperationService(eOperation));
+			if (isServiceEOperation(eOperation)) {
+				result.add(new EOperationService(eOperation));
+			}
 		}
 
 		return result;
 	}
 
+	/**
+	 * Tells if the given {@link EOperation} is considered as a {@link IService}.
+	 * {@link org.eclipse.emf.ecore.EObject EObject} {@link EOperation} are not considered as {@link IService}
+	 * .
+	 * 
+	 * @param eOperation
+	 *            the {@link EOperation} to test
+	 * @return <code>true</code> if the given {@link EOperation} is considered as a {@link IService},
+	 *         <code>false</code> otherwise
+	 */
+	public static boolean isServiceEOperation(EOperation eOperation) {
+		return eOperation.getEContainingClass() != EcorePackage.eINSTANCE.getEObject();
+	}
+
 }
diff --git a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/validation/type/EClassifierType.java b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/validation/type/EClassifierType.java
index 317c14c..75a6a57 100644
--- a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/validation/type/EClassifierType.java
+++ b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/validation/type/EClassifierType.java
@@ -13,6 +13,7 @@
 import org.eclipse.acceleo.query.runtime.IReadOnlyQueryEnvironment;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EcorePackage;
 
 /**
  * {@link EClassifier} validation type.
@@ -67,6 +68,7 @@
 			result = false;
 		} else if (getType() instanceof EClass && otherType.getType() instanceof EClass) {
 			result = getType() == otherType.getType()
+					|| getType() == EcorePackage.eINSTANCE.getEObject()
 					|| queryEnvironment.getEPackageProvider().getAllSubTypes((EClass)getType()).contains(
 							otherType.getType());
 		} else {
diff --git a/query/tests/org.eclipse.acceleo.query.tests.anydsl.edit/src-gen/org/eclipse/acceleo/query/tests/anydsl/provider/EStringToRecipeMapItemProvider.java b/query/tests/org.eclipse.acceleo.query.tests.anydsl.edit/src-gen/org/eclipse/acceleo/query/tests/anydsl/provider/EStringToRecipeMapItemProvider.java
index c5512f3..9b541f5 100644
--- a/query/tests/org.eclipse.acceleo.query.tests.anydsl.edit/src-gen/org/eclipse/acceleo/query/tests/anydsl/provider/EStringToRecipeMapItemProvider.java
+++ b/query/tests/org.eclipse.acceleo.query.tests.anydsl.edit/src-gen/org/eclipse/acceleo/query/tests/anydsl/provider/EStringToRecipeMapItemProvider.java
@@ -16,12 +16,9 @@
 import java.util.Map;

 

 import org.eclipse.acceleo.query.tests.anydsl.AnydslPackage;

-

 import org.eclipse.emf.common.notify.AdapterFactory;

 import org.eclipse.emf.common.notify.Notification;

-

 import org.eclipse.emf.common.util.ResourceLocator;

-

 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;

 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;

 import org.eclipse.emf.edit.provider.IItemLabelProvider;

diff --git a/query/tests/org.eclipse.acceleo.query.tests.anydsl.editor/src-gen/org/eclipse/acceleo/query/tests/anydsl/presentation/AnydslEditor.java b/query/tests/org.eclipse.acceleo.query.tests.anydsl.editor/src-gen/org/eclipse/acceleo/query/tests/anydsl/presentation/AnydslEditor.java
index 6c19905..f44652d 100644
--- a/query/tests/org.eclipse.acceleo.query.tests.anydsl.editor/src-gen/org/eclipse/acceleo/query/tests/anydsl/presentation/AnydslEditor.java
+++ b/query/tests/org.eclipse.acceleo.query.tests.anydsl.editor/src-gen/org/eclipse/acceleo/query/tests/anydsl/presentation/AnydslEditor.java
@@ -1379,6 +1379,7 @@
 		final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
 		saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED,
 				Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+		saveOptions.put(Resource.OPTION_LINE_DELIMITER, Resource.OPTION_LINE_DELIMITER_UNSPECIFIED);
 
 		// Do the work within an operation because this is a long running activity that modifies the
 		// workbench.
diff --git a/query/tests/org.eclipse.acceleo.query.tests.anydsl/model/anydsl.ecore b/query/tests/org.eclipse.acceleo.query.tests.anydsl/model/anydsl.ecore
index 38a667c..3a8a549 100644
--- a/query/tests/org.eclipse.acceleo.query.tests.anydsl/model/anydsl.ecore
+++ b/query/tests/org.eclipse.acceleo.query.tests.anydsl/model/anydsl.ecore
@@ -79,6 +79,9 @@
     <eOperations name="preferredLabel" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
       <eParameters name="text" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     </eOperations>
+    <eOperations name="identity" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
+      <eParameters name="eObject" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
+    </eOperations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="color" upperBound="-1"
         eType="#//Color"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="caliber" eType="#//Caliber"/>
diff --git a/query/tests/org.eclipse.acceleo.query.tests.anydsl/model/anydsl.genmodel b/query/tests/org.eclipse.acceleo.query.tests.anydsl/model/anydsl.genmodel
index 650107d..2083d96 100644
--- a/query/tests/org.eclipse.acceleo.query.tests.anydsl/model/anydsl.genmodel
+++ b/query/tests/org.eclipse.acceleo.query.tests.anydsl/model/anydsl.genmodel
@@ -134,6 +134,9 @@
       <genOperations ecoreOperation="anydsl.ecore#//Food/preferredLabel">
         <genParameters ecoreParameter="anydsl.ecore#//Food/preferredLabel/text"/>
       </genOperations>
+      <genOperations ecoreOperation="anydsl.ecore#//Food/identity">
+        <genParameters ecoreParameter="anydsl.ecore#//Food/identity/eObject"/>
+      </genOperations>
     </genClasses>
     <genClasses image="false" ecoreClass="anydsl.ecore#//Source">
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference anydsl.ecore#//Source/foods"/>
diff --git a/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/AnydslPackage.java b/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/AnydslPackage.java
index 786f483..8ac3f3e 100644
--- a/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/AnydslPackage.java
+++ b/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/AnydslPackage.java
@@ -744,12 +744,20 @@
 	int FOOD___PREFERRED_LABEL__STRING = NAMED_ELEMENT_OPERATION_COUNT + 7;
 
 	/**
+	 * The operation id for the '<em>Identity</em>' operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 * @ordered
+	 */
+	int FOOD___IDENTITY__EOBJECT = NAMED_ELEMENT_OPERATION_COUNT + 8;
+
+	/**
 	 * The number of operations of the '<em>Food</em>' class. <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 * @ordered
 	 */
-	int FOOD_OPERATION_COUNT = NAMED_ELEMENT_OPERATION_COUNT + 8;
+	int FOOD_OPERATION_COUNT = NAMED_ELEMENT_OPERATION_COUNT + 9;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.acceleo.query.tests.anydsl.Source <em>Source</em>}'
@@ -1562,6 +1570,17 @@
 	EOperation getFood__PreferredLabel__String();
 
 	/**
+	 * Returns the meta object for the '
+	 * {@link org.eclipse.acceleo.query.tests.anydsl.Food#identity(org.eclipse.emf.ecore.EObject)
+	 * <em>Identity</em>}' operation. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @return the meta object for the '<em>Identity</em>' operation.
+	 * @see org.eclipse.acceleo.query.tests.anydsl.Food#identity(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	EOperation getFood__Identity__EObject();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.acceleo.query.tests.anydsl.Source
 	 * <em>Source</em>}'. <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * 
@@ -2161,6 +2180,14 @@
 		EOperation FOOD___PREFERRED_LABEL__STRING = eINSTANCE.getFood__PreferredLabel__String();
 
 		/**
+		 * The meta object literal for the '<em><b>Identity</b></em>' operation. <!-- begin-user-doc --> <!--
+		 * end-user-doc -->
+		 * 
+		 * @generated
+		 */
+		EOperation FOOD___IDENTITY__EOBJECT = eINSTANCE.getFood__Identity__EObject();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.acceleo.query.tests.anydsl.Source
 		 * <em>Source</em>}' class. <!-- begin-user-doc --> <!-- end-user-doc -->
 		 * 
diff --git a/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/Food.java b/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/Food.java
index 9dd6998..3469226 100644
--- a/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/Food.java
+++ b/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/Food.java
@@ -11,6 +11,7 @@
 package org.eclipse.acceleo.query.tests.anydsl;
 
 import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
 
 /**
  * <!-- begin-user-doc --> A representation of the model object '<em><b>Food</b></em>'. <!-- end-user-doc -->
@@ -265,4 +266,12 @@
 	 */
 	String preferredLabel(String text);
 
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @model
+	 * @generated
+	 */
+	EObject identity(EObject eObject);
+
 } // Food
diff --git a/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/AnydslFactoryImpl.java b/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/AnydslFactoryImpl.java
index 8f70677..f7562a2 100644
--- a/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/AnydslFactoryImpl.java
+++ b/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/AnydslFactoryImpl.java
@@ -11,6 +11,7 @@
 package org.eclipse.acceleo.query.tests.anydsl.impl;
 
 import java.util.Map;
+
 import org.eclipse.acceleo.query.tests.anydsl.Adress;
 import org.eclipse.acceleo.query.tests.anydsl.Animal;
 import org.eclipse.acceleo.query.tests.anydsl.AnydslFactory;
diff --git a/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/AnydslPackageImpl.java b/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/AnydslPackageImpl.java
index fa18602..c803291 100644
--- a/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/AnydslPackageImpl.java
+++ b/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/AnydslPackageImpl.java
@@ -11,6 +11,7 @@
 package org.eclipse.acceleo.query.tests.anydsl.impl;
 
 import java.util.Map;
+
 import org.eclipse.acceleo.query.tests.anydsl.Adress;
 import org.eclipse.acceleo.query.tests.anydsl.Animal;
 import org.eclipse.acceleo.query.tests.anydsl.AnydslFactory;
@@ -682,6 +683,15 @@
 	 * 
 	 * @generated
 	 */
+	public EOperation getFood__Identity__EObject() {
+		return foodEClass.getEOperations().get(8);
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated
+	 */
 	public EClass getSource() {
 		return sourceEClass;
 	}
@@ -922,6 +932,7 @@
 		createEOperation(foodEClass, FOOD___ACCEPTED_CALIBER__CALIBER);
 		createEOperation(foodEClass, FOOD___LABEL__STRING);
 		createEOperation(foodEClass, FOOD___PREFERRED_LABEL__STRING);
+		createEOperation(foodEClass, FOOD___IDENTITY__EOBJECT);
 
 		sourceEClass = createEClass(SOURCE);
 		createEReference(sourceEClass, SOURCE__FOODS);
@@ -1126,6 +1137,10 @@
 				0, 1, IS_UNIQUE, IS_ORDERED);
 		addEParameter(op, ecorePackage.getEString(), "text", 0, 1, IS_UNIQUE, IS_ORDERED);
 
+		op = initEOperation(getFood__Identity__EObject(), ecorePackage.getEObject(), "identity", 0, 1,
+				IS_UNIQUE, IS_ORDERED);
+		addEParameter(op, ecorePackage.getEObject(), "eObject", 0, 1, IS_UNIQUE, IS_ORDERED);
+
 		initEClass(sourceEClass, Source.class, "Source", IS_ABSTRACT, IS_INTERFACE,
 				IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getSource_Foods(), this.getFood(), this.getFood_Source(), "foods", null, 0, -1,
diff --git a/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/EStringToRecipeMapImpl.java b/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/EStringToRecipeMapImpl.java
index 7391a4d..df0b48f 100644
--- a/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/EStringToRecipeMapImpl.java
+++ b/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/EStringToRecipeMapImpl.java
@@ -13,16 +13,12 @@
 

 import org.eclipse.acceleo.query.tests.anydsl.AnydslPackage;

 import org.eclipse.acceleo.query.tests.anydsl.Recipe;

-

 import org.eclipse.emf.common.notify.Notification;

-

 import org.eclipse.emf.common.util.BasicEMap;

 import org.eclipse.emf.common.util.EMap;

-

 import org.eclipse.emf.ecore.EClass;

 import org.eclipse.emf.ecore.EObject;

 import org.eclipse.emf.ecore.InternalEObject;

-

 import org.eclipse.emf.ecore.impl.ENotificationImpl;

 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;

 

diff --git a/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/FoodImpl.java b/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/FoodImpl.java
index b51efc8..850f929 100644
--- a/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/FoodImpl.java
+++ b/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/FoodImpl.java
@@ -24,6 +24,7 @@
 import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
@@ -470,6 +471,15 @@
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * 
+	 * @generated NOT
+	 */
+	public EObject identity(EObject eObject) {
+		return eObject;
+	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	@SuppressWarnings("unchecked")
@@ -666,6 +676,8 @@
 				return null;
 			case AnydslPackage.FOOD___PREFERRED_LABEL__STRING:
 				return preferredLabel((String)arguments.get(0));
+			case AnydslPackage.FOOD___IDENTITY__EOBJECT:
+				return identity((EObject)arguments.get(0));
 		}
 		return super.eInvoke(operationID, arguments);
 	}
diff --git a/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/RestaurantImpl.java b/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/RestaurantImpl.java
index 7c81059..aaaa125 100644
--- a/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/RestaurantImpl.java
+++ b/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/impl/RestaurantImpl.java
@@ -11,6 +11,7 @@
 package org.eclipse.acceleo.query.tests.anydsl.impl;
 
 import java.util.Collection;
+
 import org.eclipse.acceleo.query.tests.anydsl.Adress;
 import org.eclipse.acceleo.query.tests.anydsl.AnydslPackage;
 import org.eclipse.acceleo.query.tests.anydsl.Chef;
diff --git a/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/util/AnydslAdapterFactory.java b/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/util/AnydslAdapterFactory.java
index 30bf50c..dce1938 100644
--- a/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/util/AnydslAdapterFactory.java
+++ b/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/util/AnydslAdapterFactory.java
@@ -11,6 +11,7 @@
 package org.eclipse.acceleo.query.tests.anydsl.util;
 
 import java.util.Map;
+
 import org.eclipse.acceleo.query.tests.anydsl.Adress;
 import org.eclipse.acceleo.query.tests.anydsl.Animal;
 import org.eclipse.acceleo.query.tests.anydsl.AnydslPackage;
diff --git a/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/util/AnydslSwitch.java b/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/util/AnydslSwitch.java
index 8bcaa6c..6a9efaf 100644
--- a/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/util/AnydslSwitch.java
+++ b/query/tests/org.eclipse.acceleo.query.tests.anydsl/src-gen/org/eclipse/acceleo/query/tests/anydsl/util/AnydslSwitch.java
@@ -11,6 +11,7 @@
 package org.eclipse.acceleo.query.tests.anydsl.util;
 
 import java.util.Map;
+
 import org.eclipse.acceleo.query.tests.anydsl.Adress;
 import org.eclipse.acceleo.query.tests.anydsl.Animal;
 import org.eclipse.acceleo.query.tests.anydsl.AnydslPackage;
diff --git a/query/tests/org.eclipse.acceleo.query.tests/model/nooperationreflection.ecore b/query/tests/org.eclipse.acceleo.query.tests/model/nooperationreflection.ecore
index 9dcc9df..82bf5d9 100644
--- a/query/tests/org.eclipse.acceleo.query.tests/model/nooperationreflection.ecore
+++ b/query/tests/org.eclipse.acceleo.query.tests/model/nooperationreflection.ecore
@@ -12,5 +12,8 @@
     <eOperations name="eOperationNoReflectionListParameter" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
       <eParameters name="classifiers" lowerBound="1" upperBound="-1" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EClassifier"/>
     </eOperations>
+    <eOperations name="identity" lowerBound="1" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject">
+      <eParameters name="eObject" lowerBound="1" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
+    </eOperations>
   </eClassifiers>
 </ecore:EPackage>
diff --git a/query/tests/org.eclipse.acceleo.query.tests/model/nooperationreflection.genmodel b/query/tests/org.eclipse.acceleo.query.tests/model/nooperationreflection.genmodel
index 7a8ce55..057a166 100644
--- a/query/tests/org.eclipse.acceleo.query.tests/model/nooperationreflection.genmodel
+++ b/query/tests/org.eclipse.acceleo.query.tests/model/nooperationreflection.genmodel
@@ -16,6 +16,9 @@
       <genOperations ecoreOperation="nooperationreflection.ecore#//NoOperationReflection/eOperationNoReflectionListParameter">
         <genParameters ecoreParameter="nooperationreflection.ecore#//NoOperationReflection/eOperationNoReflectionListParameter/classifiers"/>
       </genOperations>
+      <genOperations ecoreOperation="nooperationreflection.ecore#//NoOperationReflection/identity">
+        <genParameters ecoreParameter="nooperationreflection.ecore#//NoOperationReflection/identity/eObject"/>
+      </genOperations>
     </genClasses>
   </genPackages>
 </genmodel:GenModel>
diff --git a/query/tests/org.eclipse.acceleo.query.tests/src-gen-nooperationreflection/nooperationreflection/NoOperationReflection.java b/query/tests/org.eclipse.acceleo.query.tests/src-gen-nooperationreflection/nooperationreflection/NoOperationReflection.java
index 69ce6a4..841f73a 100644
--- a/query/tests/org.eclipse.acceleo.query.tests/src-gen-nooperationreflection/nooperationreflection/NoOperationReflection.java
+++ b/query/tests/org.eclipse.acceleo.query.tests/src-gen-nooperationreflection/nooperationreflection/NoOperationReflection.java
@@ -41,4 +41,12 @@
 	 */
 	String eOperationNoReflectionListParameter(EList<EClassifier> classifiers);
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model required="true" eObjectRequired="true"
+	 * @generated
+	 */
+	EObject identity(EObject eObject);
+
 } // NoOperationReflection
diff --git a/query/tests/org.eclipse.acceleo.query.tests/src-gen-nooperationreflection/nooperationreflection/impl/NoOperationReflectionImpl.java b/query/tests/org.eclipse.acceleo.query.tests/src-gen-nooperationreflection/nooperationreflection/impl/NoOperationReflectionImpl.java
index 19ea8f1..769de57 100644
--- a/query/tests/org.eclipse.acceleo.query.tests/src-gen-nooperationreflection/nooperationreflection/impl/NoOperationReflectionImpl.java
+++ b/query/tests/org.eclipse.acceleo.query.tests/src-gen-nooperationreflection/nooperationreflection/impl/NoOperationReflectionImpl.java
@@ -5,6 +5,7 @@
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
 
 import nooperationreflection.NoOperationReflection;
@@ -70,4 +71,13 @@
 
 		return result.toString();
 	}
+
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public EObject identity(EObject eObject) {
+		return eObject;
+	}
 } // NoOperationReflectionImpl
diff --git a/query/tests/org.eclipse.acceleo.query.tests/src-gen-nooperationreflection/nooperationreflection/impl/NooperationreflectionPackageImpl.java b/query/tests/org.eclipse.acceleo.query.tests/src-gen-nooperationreflection/nooperationreflection/impl/NooperationreflectionPackageImpl.java
index 9fe8dcd..37f343a 100644
--- a/query/tests/org.eclipse.acceleo.query.tests/src-gen-nooperationreflection/nooperationreflection/impl/NooperationreflectionPackageImpl.java
+++ b/query/tests/org.eclipse.acceleo.query.tests/src-gen-nooperationreflection/nooperationreflection/impl/NooperationreflectionPackageImpl.java
@@ -168,6 +168,9 @@
 		op = addEOperation(noOperationReflectionEClass, ecorePackage.getEString(), "eOperationNoReflectionListParameter", 0, 1, IS_UNIQUE, IS_ORDERED);
 		addEParameter(op, ecorePackage.getEClassifier(), "classifiers", 1, -1, IS_UNIQUE, IS_ORDERED);
 
+		op = addEOperation(noOperationReflectionEClass, ecorePackage.getEObject(), "identity", 1, 1, IS_UNIQUE, IS_ORDERED);
+		addEParameter(op, ecorePackage.getEObject(), "eObject", 1, 1, IS_UNIQUE, IS_ORDERED);
+
 		// Create resource
 		createResource(eNS_URI);
 	}
diff --git a/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/parser/tests/EvaluationTest.java b/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/parser/tests/EvaluationTest.java
index 4dbbc8c..aead393 100644
--- a/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/parser/tests/EvaluationTest.java
+++ b/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/parser/tests/EvaluationTest.java
@@ -313,6 +313,18 @@
 	}
 
 	@Test
+	public void eOperationEObjectParameterTest() {
+		Map<String, Object> variables = Maps.newHashMap();
+		final Food self = AnydslPackage.eINSTANCE.getAnydslFactory().createFood();
+		self.setName("self berry");
+		final Food other = AnydslPackage.eINSTANCE.getAnydslFactory().createFood();
+		other.setName("other berry");
+		variables.put("self", self);
+		variables.put("other", other);
+		assertOKResultEquals(true, engine.eval(builder.build("self.identity(other) == other"), variables));
+	}
+
+	@Test
 	public void eOperationNoReflectionTest() {
 		Map<String, Object> variables = Maps.newHashMap();
 		final NoOperationReflection self = NooperationreflectionPackage.eINSTANCE
@@ -346,6 +358,18 @@
 	}
 
 	@Test
+	public void eOperationNoReflectionEObjectParameterTest() {
+		Map<String, Object> variables = Maps.newHashMap();
+		final NoOperationReflection self = NooperationreflectionPackage.eINSTANCE
+				.getNooperationreflectionFactory().createNoOperationReflection();
+		final NoOperationReflection other = NooperationreflectionPackage.eINSTANCE
+				.getNooperationreflectionFactory().createNoOperationReflection();
+		variables.put("self", self);
+		variables.put("other", other);
+		assertOKResultEquals(true, engine.eval(builder.build("self.identity(other) == other"), variables));
+	}
+
+	@Test
 	public void serviceNullParameterTest() {
 		Map<String, Object> variables = Maps.newHashMap();
 		variables.put("self", EcorePackage.eINSTANCE.getEClass());