Exemplo n.º 1
0
 /** Return true if the sole purpose of asPackage is to host implicit opposite properties. */
 public static boolean isImplicitPackage(org.eclipse.ocl.pivot.@NonNull Package asPackage) {
   boolean hasImplicits = false;
   if (!asPackage.getOwnedAnnotations().isEmpty()) {
     return false;
   }
   if (!asPackage.getOwnedComments().isEmpty()) {
     return false;
   }
   if (!asPackage.getOwnedConstraints().isEmpty()) {
     return false;
   }
   if (!asPackage.getOwnedExtensions().isEmpty()) {
     return false;
   }
   if (!asPackage.getOwnedInstances().isEmpty()) {
     return false;
   }
   if (!asPackage.getOwnedPackages().isEmpty()) {
     return false;
   }
   for (org.eclipse.ocl.pivot.Class asClass : asPackage.getOwnedClasses()) {
     if (!asClass.getOwnedAnnotations().isEmpty()) {
       return false;
     }
     if (!asClass.getOwnedBehaviors().isEmpty()) {
       return false;
     }
     if (!asClass.getOwnedBindings().isEmpty()) {
       return false;
     }
     if (!asClass.getOwnedComments().isEmpty()) {
       return false;
     }
     if (!asClass.getOwnedConstraints().isEmpty()) {
       return false;
     }
     if (!asClass.getOwnedExtensions().isEmpty()) {
       return false;
     }
     if (!asClass.getOwnedInvariants().isEmpty()) {
       return false;
     }
     if (!asClass.getOwnedOperations().isEmpty()) {
       return false;
     }
     for (Property asProperty : asClass.getOwnedProperties()) {
       if (!asProperty.isIsImplicit()) {
         return false;
       }
       hasImplicits = true;
     }
   }
   return hasImplicits;
 }
 /** Tests a guarded let if in operator. This gave CG problems. */
 @Test
 public void test_cg_let_implies() {
   TestOCL ocl = createOCL();
   StandardLibrary standardLibrary = ocl.getStandardLibrary();
   String textQuery =
       "let bodyConstraint : Constraint = null\n"
           + "in bodyConstraint <> null implies\n"
           + "bodyConstraint?.ownedSpecification = null";
   org.eclipse.ocl.pivot.Class testType = standardLibrary.getIntegerType();
   assert testType.getOwnedInvariants().isEmpty();
   ocl.assertQueryTrue(testType, textQuery);
   //		ocl.assertQueryTrue(ValuesUtil.createTypeValue(metamodelManager.getMetaclass(testType)),
   // textQuery);
   ocl.dispose();
 }
 @Test
 public void test_let_implies_let_implies() {
   TestOCL ocl = createOCL();
   StandardLibrary standardLibrary = ocl.getStandardLibrary();
   String textQuery =
       "let bodyConstraint : Constraint = oclType().ownedInvariants?->any(name = 'body')\n"
           + "in bodyConstraint <> null implies\n"
           + "let bodySpecification : ValueSpecification = bodyConstraint?.ownedSpecification\n"
           + "in bodySpecification <> null and\n"
           + "bodySpecification?.oclIsKindOf(ExpressionInOCL) implies\n"
           + "true";
   //	    "CompatibleBody(bodySpecification)";
   org.eclipse.ocl.pivot.Class testType = standardLibrary.getIntegerType();
   assert testType.getOwnedInvariants().isEmpty();
   ocl.assertQueryTrue(-1, textQuery);
   ocl.dispose();
 }
Exemplo n.º 4
0
 public void addAllElements(
     org.eclipse.ocl.pivot.@NonNull Class asClass, @NonNull ScopeView scopeView) {
   Attribution attribution = PivotUtilInternal.getAttribution(asClass);
   attribution.computeLookup(asClass, this, scopeView);
   org.eclipse.ocl.pivot.Class asUnspecializedClass =
       PivotUtil.getUnspecializedTemplateableElement(asClass);
   org.eclipse.ocl.pivot.Package asPackage = asUnspecializedClass.getOwningPackage();
   if (asPackage != null) {
     attribution = PivotUtilInternal.getAttribution(asPackage);
     attribution.computeLookup(asPackage, this, scopeView);
   }
   { // FIXME redundant
     asPackage = asUnspecializedClass.getOwningPackage();
     if (asPackage != null) {
       attribution = PivotUtilInternal.getAttribution(asPackage);
       attribution.computeLookup(asPackage, this, scopeView);
     }
   }
 }
 @Test
 public void test_cg_loop_source_self_or() throws ParserException, IOException {
   TestOCL ocl = createOCL();
   if (!EMFPlugin.IS_ECLIPSE_RUNNING) {
     OCLinEcoreStandaloneSetup.doSetup();
   }
   String metamodelText =
       "import ecore : 'http://www.eclipse.org/emf/2002/Ecore#/';\n"
           + "package pkg : pkg = 'pkg' {\n"
           + "  class A {\n"
           + "    invariant True : true;\n"
           + "  }\n"
           + "}\n";
   Resource metamodel = cs2as(ocl, metamodelText);
   Model pivotModel = (Model) metamodel.getContents().get(0);
   org.eclipse.ocl.pivot.Package pivotPackage = pivotModel.getOwnedPackages().get(0);
   org.eclipse.ocl.pivot.Class pivotType = pivotPackage.getOwnedClasses().get(0);
   Constraint pivotConstraint = pivotType.getOwnedInvariants().get(0);
   String textQuery =
       "context.oclAsType(Class).ownedInvariants->excluding(self)?->forAll(name <> self.name or isCallable <> self.isCallable)";
   ocl.assertQueryTrue(pivotConstraint, textQuery);
   ocl.dispose();
 }
 @Test
 public void test_dynamic_dispatch_411154() throws ParserException, IOException {
   if (useCodeGen) return;
   TestOCL ocl = createOCL();
   if (!EMFPlugin.IS_ECLIPSE_RUNNING) {
     OCLinEcoreStandaloneSetup.doSetup();
     //			OCLDelegateDomain.initialize(null);
   }
   MetamodelManager metamodelManager = ocl.getMetamodelManager();
   String metamodelText =
       "package Bug411154 : pfx = 'Bug411154.ecore'\n"
           + "{\n"
           + "	class Domain {\n"
           + "		property types : T1[*] { ordered composes };\n"
           + "		property t1_2a : T1;\n"
           + "		property t1_3a : T1;\n"
           + "		property t1_3b : T1;\n"
           + "		property t1_4 : T1;\n"
           + "		property t2a_2a : T2a;\n"
           + "		property t2a_3a : T2a;\n"
           + "		property t2b_2b : T2b;\n"
           + "		property t3a : T3a;\n"
           + "	}\n"
           + "	abstract class T1 {\n"
           + "		operation op1() : String { body: 'T1::op1'; }\n"
           + "		operation op4() : String { body: 'T1::op4'; }\n"
           + "		operation op5() : String { body: 'T1::op5'; }\n"
           + "		operation op6() : String { body: 'T1::op6'; }\n"
           + "	}\n"
           + "	class T2a extends T1 {\n"
           + "		operation op1() : String { body: 'T2a::op1'; }\n"
           + "		operation op2() : String { body: 'T2a::op2'; }\n"
           + "		operation op4() : String { body: 'T2a::op4'; }\n"
           + "		operation op6() : String { body: 'T2a::op6'; }\n"
           + "		operation op7() : String { body: 'T2a::op7'; }\n"
           + "		operation op9() : String { body: 'T2a::op9'; }\n"
           + "	}\n"
           + "	class T2b extends T1 {\n"
           + "		operation op6() : String { body: 'T2b::op6'; }\n"
           + "		operation op7() : String { body: 'T2b::op7'; }\n"
           + "		operation op9() : String { body: 'T2b::op9'; }\n"
           + "	}\n"
           + "	class T3a extends T2a,T2b {\n"
           + "		operation op1() : String { body: 'T3a::op1'; }\n"
           + "		operation op2() : String { body: 'T3a::op2'; }\n"
           + "		operation op3() : String { body: 'T3a::op3'; }\n"
           + "		operation op6() : String { body: 'T3a::op6'; }\n"
           + "		operation op7() : String { body: 'T3a::op7'; }\n"
           + "	}\n"
           + "	class T3b extends T2a,T2b {\n"
           + "	}\n"
           + "	class T4 extends T3a,T3b {\n"
           + "		operation op6() : String { body: 'T4::op6'; }\n"
           + "		operation op7() : String { body: 'T4::op7'; }\n"
           + "	}\n"
           + "}\n";
   Resource metamodel = cs2as(ocl, metamodelText);
   Model pivotModel = (Model) metamodel.getContents().get(0);
   org.eclipse.ocl.pivot.Package pivotPackage = pivotModel.getOwnedPackages().get(0);
   org.eclipse.ocl.pivot.Class pivotTypeDomain =
       NameUtil.getNameable(pivotPackage.getOwnedClasses(), "Domain");
   //		org.eclipse.ocl.pivot.Class pivotTypeT1 =
   // ClassUtil.getNamedElement(pivotPackage.getOwnedType(), "T1");
   org.eclipse.ocl.pivot.Class pivotTypeT2a =
       NameUtil.getNameable(pivotPackage.getOwnedClasses(), "T2a");
   org.eclipse.ocl.pivot.Class pivotTypeT2b =
       NameUtil.getNameable(pivotPackage.getOwnedClasses(), "T2b");
   org.eclipse.ocl.pivot.Class pivotTypeT3a =
       NameUtil.getNameable(pivotPackage.getOwnedClasses(), "T3a");
   org.eclipse.ocl.pivot.Class pivotTypeT3b =
       NameUtil.getNameable(pivotPackage.getOwnedClasses(), "T3b");
   org.eclipse.ocl.pivot.Class pivotTypeT4 =
       NameUtil.getNameable(pivotPackage.getOwnedClasses(), "T4");
   EPackage ePackage = metamodelManager.getEcoreOfPivot(EPackage.class, pivotPackage);
   EClass eClassDomain = metamodelManager.getEcoreOfPivot(EClass.class, pivotTypeDomain);
   //		EClass eClassT1 = metamodelManager.getEcoreOfPivot(EClass.class, pivotTypeT1);
   EClass eClassT2a = metamodelManager.getEcoreOfPivot(EClass.class, pivotTypeT2a);
   EClass eClassT2b = metamodelManager.getEcoreOfPivot(EClass.class, pivotTypeT2b);
   EClass eClassT3a = metamodelManager.getEcoreOfPivot(EClass.class, pivotTypeT3a);
   EClass eClassT3b = metamodelManager.getEcoreOfPivot(EClass.class, pivotTypeT3b);
   EClass eClassT4 = metamodelManager.getEcoreOfPivot(EClass.class, pivotTypeT4);
   EReference eReferenceDomain_types =
       metamodelManager.getEcoreOfPivot(
           EReference.class, NameUtil.getNameable(pivotTypeDomain.getOwnedProperties(), "types"));
   EReference eReferenceDomain_t1_2a =
       metamodelManager.getEcoreOfPivot(
           EReference.class, NameUtil.getNameable(pivotTypeDomain.getOwnedProperties(), "t1_2a"));
   EReference eReferenceDomain_t1_3a =
       metamodelManager.getEcoreOfPivot(
           EReference.class, NameUtil.getNameable(pivotTypeDomain.getOwnedProperties(), "t1_3a"));
   EReference eReferenceDomain_t1_3b =
       metamodelManager.getEcoreOfPivot(
           EReference.class, NameUtil.getNameable(pivotTypeDomain.getOwnedProperties(), "t1_3b"));
   EReference eReferenceDomain_t1_4 =
       metamodelManager.getEcoreOfPivot(
           EReference.class, NameUtil.getNameable(pivotTypeDomain.getOwnedProperties(), "t1_4"));
   EReference eReferenceDomain_t2a_2a =
       metamodelManager.getEcoreOfPivot(
           EReference.class, NameUtil.getNameable(pivotTypeDomain.getOwnedProperties(), "t2a_2a"));
   EReference eReferenceDomain_t2a_3a =
       metamodelManager.getEcoreOfPivot(
           EReference.class, NameUtil.getNameable(pivotTypeDomain.getOwnedProperties(), "t2a_3a"));
   EReference eReferenceDomain_t2b_2b =
       metamodelManager.getEcoreOfPivot(
           EReference.class, NameUtil.getNameable(pivotTypeDomain.getOwnedProperties(), "t2b_2b"));
   EReference eReferenceDomain_t3a =
       metamodelManager.getEcoreOfPivot(
           EReference.class, NameUtil.getNameable(pivotTypeDomain.getOwnedProperties(), "t3a"));
   EFactory eFactory = ePackage.getEFactoryInstance();
   Resource resource = new ResourceImpl();
   EObject testObjectDomain = eFactory.create(eClassDomain);
   resource.getContents().add(testObjectDomain);
   EObject testObjectT2a = eFactory.create(eClassT2a);
   EObject testObjectT2b = eFactory.create(eClassT2b);
   EObject testObjectT3a = eFactory.create(eClassT3a);
   EObject testObjectT3b = eFactory.create(eClassT3b);
   EObject testObjectT4 = eFactory.create(eClassT4);
   @SuppressWarnings("unchecked")
   List<EObject> list = (List<EObject>) testObjectDomain.eGet(eReferenceDomain_types);
   list.add(testObjectT2a);
   list.add(testObjectT2b);
   list.add(testObjectT3a);
   list.add(testObjectT3b);
   list.add(testObjectT4);
   testObjectDomain.eSet(eReferenceDomain_t1_2a, testObjectT2a);
   testObjectDomain.eSet(eReferenceDomain_t1_3a, testObjectT3a);
   testObjectDomain.eSet(eReferenceDomain_t1_3b, testObjectT3b);
   testObjectDomain.eSet(eReferenceDomain_t1_4, testObjectT4);
   testObjectDomain.eSet(eReferenceDomain_t2a_2a, testObjectT2a);
   testObjectDomain.eSet(eReferenceDomain_t2a_3a, testObjectT3a);
   testObjectDomain.eSet(eReferenceDomain_t2b_2b, testObjectT2b);
   testObjectDomain.eSet(eReferenceDomain_t3a, testObjectT3a);
   //
   ocl.assertQueryEquals(testObjectT2a, "T2a::op1", "self.op1()");
   ocl.assertQueryEquals(testObjectT2a, "T2a::op2", "self.op2()");
   ocl.assertSemanticErrorQuery(
       pivotTypeT2a,
       "self.op3()",
       PivotMessagesInternal.UnresolvedOperation_ERROR_,
       "Bug411154",
       "T2a::op3");
   ocl.assertQueryEquals(testObjectT2a, "T2a::op4", "self.op4()");
   ocl.assertQueryEquals(testObjectT2a, "T1::op5", "self.op5()");
   ocl.assertQueryEquals(testObjectT2a, "T2a::op6", "self.op6()");
   ocl.assertQueryEquals(testObjectT2a, "T2a::op7", "self.op7()");
   ocl.assertSemanticErrorQuery(
       pivotTypeT2a,
       "self.op8()",
       PivotMessagesInternal.UnresolvedOperation_ERROR_,
       "Bug411154",
       "T2a::op8");
   ocl.assertQueryEquals(testObjectT2a, "T2a::op9", "self.op9()");
   //
   ocl.assertQueryEquals(testObjectT3a, "T3a::op1", "self.op1()");
   ocl.assertQueryEquals(testObjectT3a, "T3a::op2", "self.op2()");
   ocl.assertQueryEquals(testObjectT3a, "T3a::op3", "self.op3()");
   ocl.assertQueryEquals(testObjectT3a, "T2a::op4", "self.op4()");
   ocl.assertQueryEquals(testObjectT3a, "T1::op5", "self.op5()");
   ocl.assertQueryEquals(testObjectT3a, "T3a::op6", "self.op6()");
   ocl.assertQueryEquals(testObjectT3a, "T3a::op7", "self.op7()");
   ocl.assertSemanticErrorQuery(
       pivotTypeT3a,
       "self.op8()",
       PivotMessagesInternal.UnresolvedOperation_ERROR_,
       "Bug411154",
       "T3a::op8");
   ocl.assertSemanticErrorQuery(
       pivotTypeT3a,
       "self.op9()",
       "Ambiguous resolution:\n"
           + "\tOperation : Bug411154::T2a::op9() : String[?]\n"
           + "\tOperation : Bug411154::T2b::op9() : String[?]");
   //
   ocl.assertQueryEquals(testObjectDomain, "T2a::op1", "t1_2a.op1()");
   ocl.assertSemanticErrorQuery(
       pivotTypeDomain,
       "t1_2a.op2()",
       PivotMessagesInternal.UnresolvedOperation_ERROR_,
       "Bug411154",
       "T1::op2");
   ocl.assertSemanticErrorQuery(
       pivotTypeDomain,
       "t1_2a.op3()",
       PivotMessagesInternal.UnresolvedOperation_ERROR_,
       "Bug411154",
       "T1::op3");
   ocl.assertQueryEquals(testObjectDomain, "T2a::op4", "t1_2a.op4()");
   ocl.assertQueryEquals(testObjectDomain, "T1::op5", "t1_2a.op5()");
   //
   ocl.assertQueryEquals(testObjectDomain, "T3a::op1", "t1_3a.op1()");
   ocl.assertSemanticErrorQuery(
       pivotTypeDomain,
       "t1_3a.op2()",
       PivotMessagesInternal.UnresolvedOperation_ERROR_,
       "Bug411154",
       "T1::op2");
   ocl.assertSemanticErrorQuery(
       pivotTypeDomain,
       "t1_3a.op3()",
       PivotMessagesInternal.UnresolvedOperation_ERROR_,
       "Bug411154",
       "T1::op3");
   ocl.assertQueryEquals(testObjectDomain, "T2a::op4", "t1_3a.op4()");
   ocl.assertQueryEquals(testObjectDomain, "T1::op5", "t1_3a.op5()");
   //
   ocl.assertQueryEquals(testObjectDomain, "T2a::op1", "t1_3b.op1()");
   ocl.assertSemanticErrorQuery(
       pivotTypeDomain,
       "t1_3b.op2()",
       PivotMessagesInternal.UnresolvedOperation_ERROR_,
       "Bug411154",
       "T1::op2");
   ocl.assertSemanticErrorQuery(
       pivotTypeDomain,
       "t1_3b.op3()",
       PivotMessagesInternal.UnresolvedOperation_ERROR_,
       "Bug411154",
       "T1::op3");
   ocl.assertQueryEquals(testObjectDomain, "T2a::op4", "t1_3b.op4()");
   ocl.assertQueryEquals(testObjectDomain, "T1::op5", "t1_3b.op5()");
   ocl.assertQueryInvalid(
       testObjectDomain,
       "t1_3b.op6()",
       NLS.bind(
           PivotMessages.AmbiguousOperation, "Bug411154::T1::op6() : String[?]", "Bug411154::T3b"),
       InvalidValueException.class);
   ocl.assertSemanticErrorQuery(
       pivotTypeDomain,
       "t1_3b.op7()",
       PivotMessagesInternal.UnresolvedOperation_ERROR_,
       "Bug411154",
       "T1::op7");
   //
   ocl.assertQueryEquals(testObjectDomain, "T3a::op1", "t1_4.op1()");
   ocl.assertSemanticErrorQuery(
       pivotTypeDomain,
       "t1_4.op2()",
       PivotMessagesInternal.UnresolvedOperation_ERROR_,
       "Bug411154",
       "T1::op2");
   ocl.assertSemanticErrorQuery(
       pivotTypeDomain,
       "t1_4.op3()",
       PivotMessagesInternal.UnresolvedOperation_ERROR_,
       "Bug411154",
       "T1::op3");
   ocl.assertQueryEquals(testObjectDomain, "T2a::op4", "t1_4.op4()");
   ocl.assertQueryEquals(testObjectDomain, "T1::op5", "t1_4.op5()");
   ocl.assertQueryEquals(testObjectDomain, "T4::op6", "t1_4.op6()");
   ocl.assertSemanticErrorQuery(
       pivotTypeDomain,
       "t1_4.op7()",
       PivotMessagesInternal.UnresolvedOperation_ERROR_,
       "Bug411154",
       "T1::op7");
   //
   ocl.assertQueryEquals(testObjectDomain, "T2a::op1", "t2a_2a.op1()");
   ocl.assertQueryEquals(testObjectDomain, "T2a::op2", "t2a_2a.op2()");
   ocl.assertSemanticErrorQuery(
       pivotTypeDomain,
       "t2a_2a.op3()",
       PivotMessagesInternal.UnresolvedOperation_ERROR_,
       "Bug411154",
       "T2a::op3");
   ocl.assertQueryEquals(testObjectDomain, "T2a::op4", "t2a_2a.op4()");
   ocl.assertQueryEquals(testObjectDomain, "T1::op5", "t2a_2a.op5()");
   ocl.assertQueryEquals(testObjectDomain, "T2a::op6", "t2a_2a.op6()");
   ocl.assertQueryEquals(testObjectDomain, "T2a::op7", "t2a_2a.op7()");
   //
   ocl.assertQueryEquals(testObjectDomain, "T2b::op6", "t2b_2b.op6()");
   //
   ocl.assertQueryEquals(testObjectDomain, "T3a::op1", "t2a_3a.op1()");
   ocl.assertQueryEquals(testObjectDomain, "T3a::op2", "t2a_3a.op2()");
   ocl.assertSemanticErrorQuery(
       pivotTypeDomain,
       "t2a_3a.op3()",
       PivotMessagesInternal.UnresolvedOperation_ERROR_,
       "Bug411154",
       "T2a::op3");
   ocl.assertQueryEquals(testObjectDomain, "T2a::op4", "t2a_3a.op4()");
   ocl.assertQueryEquals(testObjectDomain, "T1::op5", "t2a_3a.op5()");
   //
   ocl.assertQueryEquals(testObjectDomain, "T3a::op1", "t3a.op1()");
   ocl.assertQueryEquals(testObjectDomain, "T3a::op2", "t3a.op2()");
   ocl.assertQueryEquals(testObjectDomain, "T3a::op3", "t3a.op3()");
   ocl.assertQueryEquals(testObjectDomain, "T2a::op4", "t3a.op4()");
   ocl.assertQueryEquals(testObjectDomain, "T1::op5", "t3a.op5()");
   ocl.dispose();
 }
 @Test
 public void test_cg_name_occlusion_401692() throws ParserException, IOException {
   TestOCL ocl = createOCL();
   if (!EMFPlugin.IS_ECLIPSE_RUNNING) {
     OCLinEcoreStandaloneSetup.doSetup();
     //			OCLDelegateDomain.initialize(null);
   }
   MetamodelManager metamodelManager = ocl.getMetamodelManager();
   String metamodelText =
       "package scope = 'abc'\n"
           + "{\n"
           + "	class A\n"
           + "	{\n"
           + "		attribute d : String;\n"
           + "		attribute e : String;\n"
           + "	}\n"
           + "	class B\n"
           + "	{\n"
           + "		operation findA(e : String) : A[?]\n"
           + "		{\n"
           + "			body:\n"
           + "				let found : OrderedSet(A) = as?->select(a : A | a.d = e) in if found->size() > 0 then found->first() else null endif;\n"
           + "		}\n"
           + "		property as : A[*] { ordered composes };\n"
           + "	}\n"
           + "}\n";
   Resource metamodel = cs2as(ocl, metamodelText);
   Model pivotModel = (Model) metamodel.getContents().get(0);
   org.eclipse.ocl.pivot.Package pivotPackage = pivotModel.getOwnedPackages().get(0);
   org.eclipse.ocl.pivot.Class pivotTypeA =
       NameUtil.getNameable(pivotPackage.getOwnedClasses(), "A");
   org.eclipse.ocl.pivot.Class pivotTypeB =
       NameUtil.getNameable(pivotPackage.getOwnedClasses(), "B");
   EPackage ePackage = metamodelManager.getEcoreOfPivot(EPackage.class, pivotPackage);
   EClass eClassA = metamodelManager.getEcoreOfPivot(EClass.class, pivotTypeA);
   EClass eClassB = metamodelManager.getEcoreOfPivot(EClass.class, pivotTypeB);
   EAttribute eAttributeAd =
       metamodelManager.getEcoreOfPivot(
           EAttribute.class, NameUtil.getNameable(pivotTypeA.getOwnedProperties(), "d"));
   EAttribute eAttributeAe =
       metamodelManager.getEcoreOfPivot(
           EAttribute.class, NameUtil.getNameable(pivotTypeA.getOwnedProperties(), "e"));
   EReference eReferenceBas =
       metamodelManager.getEcoreOfPivot(
           EReference.class, NameUtil.getNameable(pivotTypeB.getOwnedProperties(), "as"));
   EFactory eFactory = ePackage.getEFactoryInstance();
   Resource resource = new ResourceImpl();
   EObject testObjectA1 = eFactory.create(eClassA);
   testObjectA1.eSet(eAttributeAd, "d1");
   testObjectA1.eSet(eAttributeAe, "e1");
   EObject testObjectA2 = eFactory.create(eClassA);
   testObjectA2.eSet(eAttributeAd, "d2");
   testObjectA2.eSet(eAttributeAe, "e2");
   EObject testObjectB = eFactory.create(eClassB);
   resource.getContents().add(testObjectB);
   @SuppressWarnings("unchecked")
   List<EObject> as = (List<EObject>) testObjectB.eGet(eReferenceBas);
   as.add(testObjectA1);
   as.add(testObjectA2);
   //
   ocl.assertQueryEquals(testObjectB, testObjectA1, "self.findA('d1')");
   ocl.assertQueryEquals(testObjectB, null, "self.findA('e2')");
   ocl.dispose();
 }
Exemplo n.º 8
0
 /**
  * Executes the query for the specified <tt>target</tt> object. The result is the OCL evaluation
  * result which may be a Number, String, Collection or other object for normal returns or a
  * NullLiteralExp for null, or an InvalidLiteralExp for invalid.
  *
  * @param target the object on which to execute the query; this must be an instance of the context
  *     with which the delegate was created
  * @param arguments a map of variable names to values; these must correspond to the variables with
  *     which the delegate was created
  * @return the query's result
  * @throws InvocationTargetException in case of failure to prepare or execute the query, usually
  *     because of an exception
  */
 @Override
 public Object execute(@Nullable Object target, Map<String, ?> arguments)
     throws InvocationTargetException {
   @SuppressWarnings("null")
   @NonNull
   Map<String, ?> nonNullArguments =
       (arguments != null ? arguments : (Map<String, ?>) Collections.<String, Object>emptyMap());
   try {
     if (specification == null) {
       prepare();
     }
     @SuppressWarnings("null")
     @NonNull
     ExpressionInOCL nonNullSpecification = specification;
     OCL ocl = delegateDomain.getOCL();
     IdResolver idResolver = ocl.getIdResolver();
     Object targetValue = idResolver.boxedValueOf(target);
     org.eclipse.ocl.pivot.Class targetType = idResolver.getStaticTypeOf(targetValue);
     Type requiredType = nonNullSpecification.getOwnedContext().getType();
     if ((requiredType == null)
         || !targetType.conformsTo(ocl.getStandardLibrary(), requiredType)) {
       String message =
           StringUtil.bind(
               PivotMessagesInternal.WrongContextClassifier_ERROR_, targetType, requiredType);
       throw new OCLDelegateException(new SemanticException(message));
     }
     List<Variable> parameterVariables = nonNullSpecification.getOwnedParameters();
     int argCount = arguments != null ? arguments.size() : 0;
     if (parameterVariables.size() != argCount) {
       String message =
           StringUtil.bind(
               PivotMessagesInternal.MismatchedArgumentCount_ERROR_,
               argCount,
               parameterVariables.size());
       throw new OCLDelegateException(new SemanticException(message));
     }
     Query query = ocl.createQuery(nonNullSpecification);
     EvaluationEnvironment env = query.getEvaluationEnvironment(target);
     for (Variable parameterVariable : parameterVariables) {
       // bind arguments to parameter names
       String name = parameterVariable.getName();
       Object object = nonNullArguments.get(name);
       if ((object == null) && !nonNullArguments.containsKey(name)) {
         String message =
             StringUtil.bind(
                 PivotMessagesInternal.EvaluationResultIsInvalid_ERROR_,
                 nonNullSpecification.getBody());
         throw new OCLDelegateException(new SemanticException(message));
       }
       Object value = idResolver.boxedValueOf(object);
       targetType = idResolver.getStaticTypeOf(value);
       requiredType = ClassUtil.nonNullModel(parameterVariable.getType());
       if (!targetType.conformsTo(ocl.getStandardLibrary(), requiredType)) {
         String message =
             StringUtil.bind(
                 PivotMessagesInternal.MismatchedArgumentType_ERROR_,
                 name,
                 targetType,
                 requiredType);
         throw new OCLDelegateException(new SemanticException(message));
       }
       env.add(parameterVariable, value);
     }
     Object result = evaluate(query, target);
     //			if (result.isInvalid()) {
     //				String message = ClassUtil.bind(OCLMessages.EvaluationResultIsInvalid_ERROR_,
     // getOperationName());
     //				throw new OCLDelegateException(message);
     //			}
     //		if ((result == null) / * || ocl.isInvalid(result) * /) {
     //			String message = ClassUtil.bind(OCLMessages.EvaluationResultIsNull_ERROR_,
     // getOperationName());
     //			throw new OCLDelegateException(message);
     //		}
     //		return converter.convert(ocl, result);
     //			if (result == null) {
     //				String message = NLS.bind(OCLMessages.EvaluationResultIsInvalid_ERROR_,
     // PivotUtil.getBody(specification));
     //				throw new InvocationTargetException(new OCLDelegateException(message));
     //			}
     return idResolver.ecoreValueOf(null, result);
   } catch (InvocationTargetException e) {
     throw e;
   } catch (EvaluationException e) {
     String message =
         StringUtil.bind(
             PivotMessagesInternal.EvaluationResultIsInvalid_ERROR_, specification.getBody());
     throw new InvocationTargetException(new EvaluationException(message));
   } catch (WrappedException e) {
     throw new InvocationTargetException(e.getCause());
   } catch (Exception e) {
     throw new InvocationTargetException(e);
   }
 }
 protected org.eclipse.ocl.pivot.@NonNull Class createType(
     org.eclipse.ocl.pivot.@NonNull Class domainType) {
   org.eclipse.ocl.pivot.Class pivotType = PivotFactory.eINSTANCE.createClass();
   pivotType.setName(domainType.getName());
   return pivotType;
 }