diff --git a/src/main/java/spoon/support/util/ModelList.java b/src/main/java/spoon/support/util/ModelList.java index 5d3e947e4aa..d9c7a03d602 100644 --- a/src/main/java/spoon/support/util/ModelList.java +++ b/src/main/java/spoon/support/util/ModelList.java @@ -24,6 +24,7 @@ import java.util.ConcurrentModificationException; import java.util.List; +import spoon.SpoonException; import spoon.experimental.modelobs.FineModelChangeListener; import spoon.reflect.declaration.CtElement; import spoon.reflect.path.CtRole; @@ -89,6 +90,12 @@ public T set(int index, T element) { } static void linkToParent(CtElement owner, CtElement element) { + if (owner.getFactory().getEnvironment().checksAreSkipped() == false && element.isParentInitialized() && element.getParent() != owner) { + //the `e` already has an different parent. Check if it is still linked to that parent + if (element.getRoleInParent() != null) { + throw new SpoonException("The element " + element + " is already used by another part of SpoonModel. Remove it from previous model or clone it before."); + } + } element.setParent(owner); }