diff options
| author | Yvan Lussaud | 2015-03-23 09:27:29 +0000 |
|---|---|---|
| committer | Yvan Lussaud | 2015-03-26 15:52:57 +0000 |
| commit | 6d7a437a54a05d0ec2cea52c21527b09de0c9c84 (patch) | |
| tree | 7816fc778597204bb961096903c2508bb97fdaaf | |
| parent | 66eae954d664cca363b394609c46259827cec09e (diff) | |
| download | org.eclipse.acceleo-6d7a437a54a05d0ec2cea52c21527b09de0c9c84.tar.gz org.eclipse.acceleo-6d7a437a54a05d0ec2cea52c21527b09de0c9c84.tar.xz org.eclipse.acceleo-6d7a437a54a05d0ec2cea52c21527b09de0c9c84.zip | |
[462491] CCE when Validating eObject.eInverse(String)
Bug: 462491
Change-Id: I0918b539f3ed74e6252b129895a8310203036e38
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() }); |
