Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYvan Lussaud2015-03-23 09:27:29 +0000
committerYvan Lussaud2015-03-26 15:52:57 +0000
commit6d7a437a54a05d0ec2cea52c21527b09de0c9c84 (patch)
tree7816fc778597204bb961096903c2508bb97fdaaf
parent66eae954d664cca363b394609c46259827cec09e (diff)
downloadorg.eclipse.acceleo-6d7a437a54a05d0ec2cea52c21527b09de0c9c84.tar.gz
org.eclipse.acceleo-6d7a437a54a05d0ec2cea52c21527b09de0c9c84.tar.xz
org.eclipse.acceleo-6d7a437a54a05d0ec2cea52c21527b09de0c9c84.zip
[462491] CCE when Validating eObject.eInverse(String)
-rw-r--r--query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/services/EObjectServices.java13
-rw-r--r--query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/services/tests/EObjectServicesValidationTest.java21
2 files changed, 27 insertions, 7 deletions
diff --git a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/services/EObjectServices.java b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/services/EObjectServices.java
index e7a9edc49..7ed4168dd 100644
--- a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/services/EObjectServices.java
+++ b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/services/EObjectServices.java
@@ -454,7 +454,7 @@ public class EObjectServices extends AbstractServiceProvider {
if (argTypes.get(0).getType() instanceof EClass) {
final EClass eCls = (EClass)argTypes.get(0).getType();
if (eCls == EcorePackage.eINSTANCE.getEObject()) {
- if (argTypes.size() == 1) {
+ if (argTypes.size() == 1 || !(argTypes.get(1).getType() instanceof EClass)) {
result.add(new SetType(queryEnvironment, argTypes.get(0)));
} else if (argTypes.size() == 2) {
result.add(new SetType(queryEnvironment, new EClassifierType(queryEnvironment,
@@ -490,9 +490,10 @@ public class EObjectServices extends AbstractServiceProvider {
IReadOnlyQueryEnvironment queryEnvironment, List<IType> argTypes, final EClass receiverEClass) {
final Set<IType> result = new LinkedHashSet<IType>();
- if (argTypes.size() == 1 || !(argTypes.get(1).getType() instanceof EClassifier)) {
- for (EClass inverseEClass : queryEnvironment.getEPackageProvider().getInverseEClasses(
- receiverEClass)) {
+ final Set<EClass> inverseEClasses = queryEnvironment.getEPackageProvider().getInverseEClasses(
+ receiverEClass);
+ if (argTypes.size() == 1 || !(argTypes.get(1).getType() instanceof EClass)) {
+ for (EClass inverseEClass : inverseEClasses) {
result.add(new SetType(queryEnvironment, new EClassifierType(queryEnvironment,
inverseEClass)));
}
@@ -502,8 +503,7 @@ public class EObjectServices extends AbstractServiceProvider {
}
} else if (argTypes.size() == 2) {
final IType filterType = argTypes.get(1);
- for (EClass inverseEClass : queryEnvironment.getEPackageProvider().getInverseEClasses(
- receiverEClass)) {
+ for (EClass inverseEClass : inverseEClasses) {
final IType lowerType = services.lower(new EClassifierType(queryEnvironment,
inverseEClass), filterType);
if (lowerType != null) {
@@ -518,7 +518,6 @@ public class EObjectServices extends AbstractServiceProvider {
return result;
}
-
}
/**
diff --git a/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/services/tests/EObjectServicesValidationTest.java b/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/services/tests/EObjectServicesValidationTest.java
index 9ff971c3f..e08da5af7 100644
--- a/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/services/tests/EObjectServicesValidationTest.java
+++ b/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/services/tests/EObjectServicesValidationTest.java
@@ -1589,6 +1589,27 @@ public class EObjectServicesValidationTest extends AbstractServicesTest {
}
@Test
+ public void testEInverseFeatureNameObEObject() {
+ final IService service = serviceLookUp("eInverse", new Object[] {EcorePackage.eINSTANCE, "ePackage" });
+ assertTrue(service != null);
+ final List<IType> argTypes = new ArrayList<IType>();
+ argTypes.add(new EClassifierType(getQueryEnvironment(), EcorePackage.eINSTANCE.getEObject()));
+ argTypes.add(new ClassType(getQueryEnvironment(), String.class));
+
+ try {
+ getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
+ final Set<IType> types = service
+ .getType(getValidationServices(), getQueryEnvironment(), argTypes);
+ assertEquals(1, types.size());
+ Iterator<IType> it = types.iterator();
+ assertEquals(new SetType(getQueryEnvironment(), new EClassifierType(getQueryEnvironment(),
+ EcorePackage.eINSTANCE.getEObject())), it.next());
+ } finally {
+ getQueryEnvironment().removeEPackage(EcorePackage.eINSTANCE.getNsPrefix());
+ }
+ }
+
+ @Test
public void testEInverseFiltered() {
final IService service = serviceLookUp("eInverse", new Object[] {EcorePackage.eINSTANCE,
EcorePackage.eINSTANCE.eClass() });

Back to the top