@Override public CollectionType<Classifier, Operation> resolveCollectionType( CollectionKind kind, Classifier elementType) { CollectionType<Classifier, Operation> result = super.resolveCollectionType( kind, elementType); // ensure that the collection type's operations are correctly defined DataType umlResult = (DataType) result; Collection<Operation> ownedOperations = umlResult.getOwnedOperations(); if (ownedOperations.isEmpty()) { // first, add a token operation to ensure that the list is not // empty, avoiding unbounded recursion Operation token = UMLFactory.eINSTANCE.createOperation(); ownedOperations.add(token); try { ownedOperations.addAll(OCLStandardLibraryImpl.createCollectionTypeOperations( getEnvironment(), kind)); } finally { ownedOperations.remove(token); // remove the token } } return result; } }
public Operation createOperation(String name, Classifier resultType, List<String> paramNames, List<Classifier> paramTypes) { Operation result = UMLFactory.eINSTANCE.createOperation(); result.setName(name); // OCL can only define query operations result.setIsQuery(true); if (resultType != null) { result.setType(resultType); } int i = 0; for (String pname : paramNames) { result.createOwnedParameter(pname, paramTypes.get(i++)); } return result; }
Operation operation = UMLFactory.eINSTANCE.createOperation(); eModelElementToElementMap.put(eOperation, operation);
public Operation defineOperation(Classifier owner, String name, Classifier type, List<Variable<Classifier, Parameter>> params, Constraint constraint) { resetTypeCaches(); Operation result = UMLFactory.eINSTANCE.createOperation(); result.addKeyword(UMLReflection.OCL_HELPER); result.setName(name); result.setType(type == null ? getOCLStandardLibrary().getOclVoid() : type); result.setIsQuery(true); // OCL can only define queries for (Variable<Classifier, Parameter> next : params) { Parameter param = UMLFactory.eINSTANCE.createParameter(); param.setName(next.getName()); param.setType(next.getType() == null ? getOCLStandardLibrary() .getOclVoid() : next.getType()); param.setDirection(ParameterDirectionKind.IN_LITERAL); param.setEffect(ParameterEffectKind.READ_LITERAL); result.getOwnedParameters().add(param); } annotate(result, constraint); addHelperOperation(owner, result); return result; }