[440495] Workaround inadequate templateParameter deduction
diff --git a/examples/org.eclipse.ocl.examples.pivot/emf-gen/org/eclipse/ocl/examples/pivot/lookup/AutoPivotLookupVisitor.java b/examples/org.eclipse.ocl.examples.pivot/emf-gen/org/eclipse/ocl/examples/pivot/lookup/AutoPivotLookupVisitor.java
index 061efec..598e956 100644
--- a/examples/org.eclipse.ocl.examples.pivot/emf-gen/org/eclipse/ocl/examples/pivot/lookup/AutoPivotLookupVisitor.java
+++ b/examples/org.eclipse.ocl.examples.pivot/emf-gen/org/eclipse/ocl/examples/pivot/lookup/AutoPivotLookupVisitor.java
@@ -38,6 +38,7 @@
import org.eclipse.ocl.examples.domain.values.SetValue;
import org.eclipse.ocl.examples.domain.values.impl.InvalidValueException;
import org.eclipse.ocl.examples.domain.values.util.ValuesUtil;
+import org.eclipse.ocl.examples.library.collection.CollectionAsSetOperation;
import org.eclipse.ocl.examples.library.collection.CollectionIncludesOperation;
import org.eclipse.ocl.examples.library.collection.OrderedCollectionIndexOfOperation;
import org.eclipse.ocl.examples.library.collection.OrderedSetSubOrderedSetOperation;
@@ -158,7 +159,8 @@
* visitClass(element : Class) : env::Environment[?]
*
*
- * let superClasses : Set(Class) = element->closure(superClass)
+ * let
+ * superClasses : Set(Class) = element->closure(superClass->asSet())
* in
* let
* inner : env::Environment = context.addElements(
@@ -178,14 +180,14 @@
final @NonNull /*@Thrown*/ SetValue oclAsSet = OclAnyOclAsSetOperation.INSTANCE.evaluate(evaluator, SET_CLSSid_Class, element);
final @NonNull DomainType TYPE_superClasses_0 = evaluator.getStaticTypeOf(oclAsSet);
final @NonNull LibraryIteration IMPL_superClasses_0 = (LibraryIteration)TYPE_superClasses_0.lookupImplementation(standardLibrary, OCLstdlibTables.Operations._Set__closure);
- final @NonNull Object ACC_superClasses_0 = IMPL_superClasses_0.createAccumulatorValue(evaluator, SET_CLSSid_Class, ORD_CLSSid_Type);
+ final @NonNull Object ACC_superClasses_0 = IMPL_superClasses_0.createAccumulatorValue(evaluator, SET_CLSSid_Class, SET_CLSSid_Type);
/**
* Implementation of the iterator body.
*/
final @NonNull AbstractBinaryOperation BODY_superClasses_0 = new AbstractBinaryOperation()
{
/**
- * superClass
+ * superClass->asSet()
*/
@Override
public @Nullable Object evaluate(final @NonNull DomainEvaluator evaluator, final @NonNull TypeId typeId, final @Nullable Object oclAsSet, final @Nullable /*@NonInvalid*/ Object _1) {
@@ -195,7 +197,8 @@
}
final @NonNull /*@Thrown*/ List<? extends DomainType> superClass = symbol_0.getSuperClass();
final @NonNull /*@Thrown*/ OrderedSetValue BOXED_superClass = idResolver.createOrderedSetOfAll(ORD_CLSSid_Type, superClass);
- return BOXED_superClass;
+ final @NonNull /*@Thrown*/ SetValue asSet = CollectionAsSetOperation.INSTANCE.evaluate(BOXED_superClass);
+ return asSet;
}
};
final @NonNull ExecutorSingleIterationManager MGR_superClasses_0 = new ExecutorSingleIterationManager(evaluator, SET_CLSSid_Class, BODY_superClasses_0, oclAsSet, ACC_superClasses_0);
@@ -350,63 +353,64 @@
*
*
* let
- * inner : env::Environment = context.addElements(
- * element->closure(superClass)
- * .ownedAttribute->select(not isStatic))
- * .addElements(
- * element->closure(superClass)
- * .ownedOperation->select(not isStatic))
+ * superClasses : Set(Class) = element->closure(c | c.superClass->asSet())
* in
- * if inner.hasFinalResult()
- * then inner
- * else this.parentEnv(element)
- * endif
+ * let
+ * inner : env::Environment = context.addElements(
+ * superClasses.ownedAttribute->select(not isStatic))
+ * .addElements(superClasses.ownedOperation->select(not isStatic))
+ * in
+ * if inner.hasFinalResult()
+ * then inner
+ * else this.parentEnv(element)
+ * endif
*/
@Override
public @Nullable /*@NonInvalid*/ Environment visitDataType(final @NonNull /*@NonInvalid*/ DataType element_0) {
final @NonNull /*@NonInvalid*/ IdResolver idResolver = evaluator.getIdResolver();
final @NonNull /*@NonInvalid*/ DomainStandardLibrary standardLibrary = idResolver.getStandardLibrary();
- final @NonNull /*@Thrown*/ SetValue oclAsSet_0 = OclAnyOclAsSetOperation.INSTANCE.evaluate(evaluator, SET_CLSSid_DataType, element_0);
- final @NonNull DomainType TYPE_closure_0_0 = evaluator.getStaticTypeOf(oclAsSet_0);
- final @NonNull LibraryIteration IMPL_closure_0_0 = (LibraryIteration)TYPE_closure_0_0.lookupImplementation(standardLibrary, OCLstdlibTables.Operations._Set__closure);
- final @NonNull Object ACC_closure_0_0 = IMPL_closure_0_0.createAccumulatorValue(evaluator, SET_CLSSid_DataType, ORD_CLSSid_Type);
+ final @NonNull /*@Thrown*/ SetValue oclAsSet = OclAnyOclAsSetOperation.INSTANCE.evaluate(evaluator, SET_CLSSid_DataType, element_0);
+ final @NonNull DomainType TYPE_superClasses_0 = evaluator.getStaticTypeOf(oclAsSet);
+ final @NonNull LibraryIteration IMPL_superClasses_0 = (LibraryIteration)TYPE_superClasses_0.lookupImplementation(standardLibrary, OCLstdlibTables.Operations._Set__closure);
+ final @NonNull Object ACC_superClasses_0 = IMPL_superClasses_0.createAccumulatorValue(evaluator, SET_CLSSid_DataType, SET_CLSSid_Type);
/**
* Implementation of the iterator body.
*/
- final @NonNull AbstractBinaryOperation BODY_closure_0_0 = new AbstractBinaryOperation()
+ final @NonNull AbstractBinaryOperation BODY_superClasses_0 = new AbstractBinaryOperation()
{
/**
- * superClass
+ * c.superClass->asSet()
*/
@Override
- public @Nullable Object evaluate(final @NonNull DomainEvaluator evaluator, final @NonNull TypeId typeId, final @Nullable Object oclAsSet_0, final @Nullable /*@NonInvalid*/ Object _1_2) {
- final @Nullable /*@NonInvalid*/ DataType symbol_3 = (DataType)_1_2;
- if (symbol_3 == null) {
+ public @Nullable Object evaluate(final @NonNull DomainEvaluator evaluator, final @NonNull TypeId typeId, final @Nullable Object oclAsSet, final @Nullable /*@NonInvalid*/ Object c) {
+ final @Nullable /*@NonInvalid*/ Class symbol_0 = (Class)c;
+ if (symbol_0 == null) {
throw new InvalidValueException("Null source for \'pivot::Type::superClass\'");
}
- final @NonNull /*@Thrown*/ List<? extends DomainType> superClass_0 = symbol_3.getSuperClass();
- final @NonNull /*@Thrown*/ OrderedSetValue BOXED_superClass_0 = idResolver.createOrderedSetOfAll(ORD_CLSSid_Type, superClass_0);
- return BOXED_superClass_0;
+ final @NonNull /*@Thrown*/ List<? extends DomainType> superClass = symbol_0.getSuperClass();
+ final @NonNull /*@Thrown*/ OrderedSetValue BOXED_superClass = idResolver.createOrderedSetOfAll(ORD_CLSSid_Type, superClass);
+ final @NonNull /*@Thrown*/ SetValue asSet = CollectionAsSetOperation.INSTANCE.evaluate(BOXED_superClass);
+ return asSet;
}
};
- final @NonNull ExecutorSingleIterationManager MGR_closure_0_0 = new ExecutorSingleIterationManager(evaluator, SET_CLSSid_DataType, BODY_closure_0_0, oclAsSet_0, ACC_closure_0_0);
- final @NonNull /*@Thrown*/ SetValue closure_0 = DomainUtil.nonNullState((SetValue)IMPL_closure_0_0.evaluateIteration(MGR_closure_0_0));
+ final @NonNull ExecutorSingleIterationManager MGR_superClasses_0 = new ExecutorSingleIterationManager(evaluator, SET_CLSSid_DataType, BODY_superClasses_0, oclAsSet, ACC_superClasses_0);
+ final @NonNull /*@Thrown*/ SetValue superClasses = DomainUtil.nonNullState((SetValue)IMPL_superClasses_0.evaluateIteration(MGR_superClasses_0));
@NonNull /*@Thrown*/ BagValue.Accumulator accumulator = ValuesUtil.createBagAccumulatorValue(BAG_CLSSid_Property);
- @Nullable Iterator<?> ITERATOR__1_0 = closure_0.iterator();
+ @Nullable Iterator<?> ITERATOR__1 = superClasses.iterator();
@NonNull /*@Thrown*/ BagValue collect;
while (true) {
- if (!ITERATOR__1_0.hasNext()) {
+ if (!ITERATOR__1.hasNext()) {
collect = accumulator;
break;
}
- @Nullable /*@NonInvalid*/ DataType _1_0 = (DataType)ITERATOR__1_0.next();
+ @Nullable /*@NonInvalid*/ Class _1 = (Class)ITERATOR__1.next();
/**
* ownedAttribute
*/
- if (_1_0 == null) {
+ if (_1 == null) {
throw new InvalidValueException("Null source for \'pivot::Type::ownedAttribute\'");
}
- final @NonNull /*@Thrown*/ List<? extends DomainProperty> ownedAttribute = _1_0.getOwnedAttribute();
+ final @NonNull /*@Thrown*/ List<? extends DomainProperty> ownedAttribute = _1.getOwnedAttribute();
final @NonNull /*@Thrown*/ OrderedSetValue BOXED_ownedAttribute = idResolver.createOrderedSetOfAll(ORD_CLSSid_Property, ownedAttribute);
//
for (Object value : BOXED_ownedAttribute.flatten().getElements()) {
@@ -414,23 +418,23 @@
}
}
@NonNull /*@Thrown*/ BagValue.Accumulator accumulator_0 = ValuesUtil.createBagAccumulatorValue(BAG_CLSSid_Property);
- @Nullable Iterator<?> ITERATOR__1_1 = collect.iterator();
+ @Nullable Iterator<?> ITERATOR__1_0 = collect.iterator();
@NonNull /*@Thrown*/ BagValue select;
while (true) {
- if (!ITERATOR__1_1.hasNext()) {
+ if (!ITERATOR__1_0.hasNext()) {
select = accumulator_0;
break;
}
- @Nullable /*@NonInvalid*/ DomainProperty _1_1 = (DomainProperty)ITERATOR__1_1.next();
+ @Nullable /*@NonInvalid*/ DomainProperty _1_0 = (DomainProperty)ITERATOR__1_0.next();
/**
* _'null' : Boolean
*/
@NonNull /*@Caught*/ Object CAUGHT_self_0;
try {
- if (_1_1 == null) {
+ if (_1_0 == null) {
throw new InvalidValueException("Null source for \'pivot::NamedElement::isStatic\'");
}
- final /*@Thrown*/ boolean self_0 = _1_1.isStatic();
+ final /*@Thrown*/ boolean self_0 = _1_0.isStatic();
CAUGHT_self_0 = self_0;
}
catch (Exception e) {
@@ -450,28 +454,28 @@
}
//
if (symbol_2 == ValuesUtil.TRUE_VALUE) {
- accumulator_0.add(_1_1);
+ accumulator_0.add(_1_0);
}
}
final List<? extends Property> UNBOXED_select = select.asEcoreObjects(idResolver, Property.class);
assert UNBOXED_select != null;
final @NonNull /*@Thrown*/ Environment addElements = context.addElements(UNBOXED_select);
@NonNull /*@Thrown*/ BagValue.Accumulator accumulator_1 = ValuesUtil.createBagAccumulatorValue(BAG_CLSSid_Operation);
- @Nullable Iterator<?> ITERATOR__1_3 = closure_0.iterator();
+ @Nullable Iterator<?> ITERATOR__1_1 = superClasses.iterator();
@NonNull /*@Thrown*/ BagValue collect_0;
while (true) {
- if (!ITERATOR__1_3.hasNext()) {
+ if (!ITERATOR__1_1.hasNext()) {
collect_0 = accumulator_1;
break;
}
- @Nullable /*@NonInvalid*/ DataType _1_3 = (DataType)ITERATOR__1_3.next();
+ @Nullable /*@NonInvalid*/ Class _1_1 = (Class)ITERATOR__1_1.next();
/**
* ownedOperation
*/
- if (_1_3 == null) {
+ if (_1_1 == null) {
throw new InvalidValueException("Null source for \'pivot::Type::ownedOperation\'");
}
- final @NonNull /*@Thrown*/ List<? extends DomainOperation> ownedOperation = _1_3.getOwnedOperation();
+ final @NonNull /*@Thrown*/ List<? extends DomainOperation> ownedOperation = _1_1.getOwnedOperation();
final @NonNull /*@Thrown*/ OrderedSetValue BOXED_ownedOperation = idResolver.createOrderedSetOfAll(ORD_CLSSid_Operation, ownedOperation);
//
for (Object value : BOXED_ownedOperation.flatten().getElements()) {
@@ -479,23 +483,23 @@
}
}
@NonNull /*@Thrown*/ BagValue.Accumulator accumulator_2 = ValuesUtil.createBagAccumulatorValue(BAG_CLSSid_Operation);
- @Nullable Iterator<?> ITERATOR__1_4 = collect_0.iterator();
+ @Nullable Iterator<?> ITERATOR__1_2 = collect_0.iterator();
@NonNull /*@Thrown*/ BagValue select_0;
while (true) {
- if (!ITERATOR__1_4.hasNext()) {
+ if (!ITERATOR__1_2.hasNext()) {
select_0 = accumulator_2;
break;
}
- @Nullable /*@NonInvalid*/ DomainOperation _1_4 = (DomainOperation)ITERATOR__1_4.next();
+ @Nullable /*@NonInvalid*/ DomainOperation _1_2 = (DomainOperation)ITERATOR__1_2.next();
/**
* _'null' : Boolean
*/
@NonNull /*@Caught*/ Object CAUGHT_self_1;
try {
- if (_1_4 == null) {
+ if (_1_2 == null) {
throw new InvalidValueException("Null source for \'pivot::NamedElement::isStatic\'");
}
- final /*@Thrown*/ boolean self_1 = _1_4.isStatic();
+ final /*@Thrown*/ boolean self_1 = _1_2.isStatic();
CAUGHT_self_1 = self_1;
}
catch (Exception e) {
@@ -504,33 +508,33 @@
if (CAUGHT_self_1 instanceof InvalidValueException) {
throw (InvalidValueException)CAUGHT_self_1;
}
- final /*@NonInvalid*/ boolean symbol_4 = CAUGHT_self_1 instanceof InvalidValueException;
- /*@Thrown*/ boolean symbol_5;
- if (symbol_4) {
- symbol_5 = (Boolean)CAUGHT_self_1;
+ final /*@NonInvalid*/ boolean symbol_3 = CAUGHT_self_1 instanceof InvalidValueException;
+ /*@Thrown*/ boolean symbol_4;
+ if (symbol_3) {
+ symbol_4 = (Boolean)CAUGHT_self_1;
}
else {
final /*@Thrown*/ boolean eq_0 = CAUGHT_self_1 == Boolean.FALSE;
- symbol_5 = eq_0;
+ symbol_4 = eq_0;
}
//
- if (symbol_5 == ValuesUtil.TRUE_VALUE) {
- accumulator_2.add(_1_4);
+ if (symbol_4 == ValuesUtil.TRUE_VALUE) {
+ accumulator_2.add(_1_2);
}
}
final List<? extends Operation> UNBOXED_select_0 = select_0.asEcoreObjects(idResolver, Operation.class);
assert UNBOXED_select_0 != null;
final @NonNull /*@Thrown*/ Environment inner = addElements.addElements(UNBOXED_select_0);
final /*@Thrown*/ boolean hasFinalResult = inner.hasFinalResult();
- @Nullable /*@Thrown*/ Environment symbol_6;
+ @Nullable /*@Thrown*/ Environment symbol_5;
if (hasFinalResult) {
- symbol_6 = inner;
+ symbol_5 = inner;
}
else {
final @Nullable /*@Thrown*/ Environment parentEnv = this.parentEnv(element_0);
- symbol_6 = parentEnv;
+ symbol_5 = parentEnv;
}
- return symbol_6;
+ return symbol_5;
}
/**
diff --git a/examples/org.eclipse.ocl.examples.pivot/model/PivotNameResolution.ocl b/examples/org.eclipse.ocl.examples.pivot/model/PivotNameResolution.ocl
index b1dc477..6740542 100644
--- a/examples/org.eclipse.ocl.examples.pivot/model/PivotNameResolution.ocl
+++ b/examples/org.eclipse.ocl.examples.pivot/model/PivotNameResolution.ocl
@@ -10,7 +10,7 @@
context Class
def : _env(child : Element) : env::Environment =
- let superClasses : Set(Class) = self->closure(superClass) in
+ let superClasses : Set(Class) = self->closure(superClass->asSet()) in
parentEnv().nestedEnv()
-- .addElements(self.ownedTemplateSignature.ownedParameter.parameteredElement->selectByKind(Type)) FIXME badOclOperation ???
.addElements(superClasses.ownedAttribute->select(not isStatic))
@@ -19,10 +19,10 @@
context DataType
def : _env(child : Element) : env::Environment =
- -- FIXME need to translate NewPivotLookupVisitor.visitDatatype
+ let superClasses : Set(Class) = self->closure(c : Class | c.superClass->asSet()) in
parentEnv().nestedEnv()
- .addElements(self->closure(superClass).ownedAttribute->select(not isStatic))
- .addElements(self->closure(superClass).ownedOperation->select(not isStatic))
+ .addElements(superClasses.ownedAttribute->select(not isStatic))
+ .addElements(superClasses.ownedOperation->select(not isStatic))
-- .addElements(self.ownedTemplateSignature.ownedParameter.parameteredElement->selectByKind(Type)) FIXME badOclOperation ???
context Element