From fb401dbc902cc1662550fa318e39b1d7eb7dc92d Mon Sep 17 00:00:00 2001
From: Irina Muntean <muntean@fortiss.org>
Date: Wed, 1 Dec 2021 11:15:59 +0100
Subject: [PATCH] Add caught exception to list and throw new exception

Issue-Ref: 4168
Issue-Url: https://git.fortiss.org/af3/af3/-/issues/4168

Signed-off-by: Irina Muntean <muntean@fortiss.org>
---
 .../tooling/kernel/utils/TransformationUtils.java        | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/utils/TransformationUtils.java b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/utils/TransformationUtils.java
index 552d3a9d5..4ee95df16 100644
--- a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/utils/TransformationUtils.java
+++ b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/utils/TransformationUtils.java
@@ -17,12 +17,14 @@ package org.fortiss.tooling.kernel.utils;
 
 import static org.eclipse.core.runtime.Assert.isNotNull;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.emf.ecore.EObject;
 import org.fortiss.tooling.kernel.extension.data.ITransformationContext;
 import org.fortiss.tooling.kernel.extension.data.TransformationProviderChain;
 import org.fortiss.tooling.kernel.extension.exception.ChainTransformationFailedException;
+import org.fortiss.tooling.kernel.extension.exception.AllChainTransformationsFailedException;
 import org.fortiss.tooling.kernel.service.ITransformationService;
 
 /**
@@ -52,6 +54,7 @@ public final class TransformationUtils {
 			throws ChainTransformationFailedException {
 		List<TransformationProviderChain> chainList = ITransformationService.getInstance()
 				.getTransformationProviderChain(sourceElement.getClass(), targetClass, context);
+		List<ChainTransformationFailedException> exceptionList = new ArrayList<>();
 		if(!chainList.isEmpty()) {
 			for(TransformationProviderChain chain : chainList) {
 				try {
@@ -67,10 +70,14 @@ public final class TransformationUtils {
 					return executableObject;
 				} catch(ChainTransformationFailedException ctfe) {
 					// fall through
+					exceptionList.add(ctfe);
 				}
 			}
 		}
-		throw new NoTransformationChainFound(sourceElement, targetClass);
+		if(exceptionList.isEmpty())
+			throw new NoTransformationChainFound(sourceElement, targetClass);
+
+		throw new AllChainTransformationsFailedException(exceptionList);
 	}
 
 	/** Exception thrown when no transformation chain was found. */
-- 
GitLab