blob: 8d8823c95741e156a36c1f9657465550fd13920a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2018 Willink Transformations and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* E.D.Willink - Initial API and implementation
*******************************************************************************/
package org.eclipse.ocl.xtext.base.cs2as;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.xtext.basecs.ModelElementCS;
public class Continuations implements Continuation<ModelElementCS>
{
public static Continuation<?> combine(Continuation<?>... inputContinuations) {
List<BasicContinuation<?>> continuations = null;
Continuation<?> continuation = null;
for (Continuation<?> inputContinuation : inputContinuations) {
if (inputContinuation != null) {
if (continuation == null) {
continuation = inputContinuation;
}
else {
if (continuations == null) {
continuations = new ArrayList<BasicContinuation<?>>();
continuation.addTo(continuations);
}
inputContinuation.addTo(continuations);
}
}
}
return continuations != null ? new Continuations(continuations) : continuation;
}
private final @NonNull List<BasicContinuation<?>> continuations;
public Continuations() {
this.continuations = new ArrayList<BasicContinuation<?>>();
}
public Continuations(@NonNull List<BasicContinuation<?>> continuations) {
this.continuations = continuations;
}
public void add(@NonNull BasicContinuation<?> continuation) {
continuations.add(continuation);
}
@Override
public void addTo(@NonNull List<BasicContinuation<?>> simpleContinuations) {
for (BasicContinuation<?> continuation : continuations) {
continuation.addTo(simpleContinuations);
}
}
public Continuation<?> getContinuation() {
if (continuations.isEmpty()) {
return null;
}
else if (continuations.size() == 1) {
return continuations.get(0);
}
else {
return this;
}
}
}