diff --git a/src/main/java/spoon/support/reflect/declaration/CtCompilationUnitImpl.java b/src/main/java/spoon/support/reflect/declaration/CtCompilationUnitImpl.java index 99dd5ec68da..bf714fff1a5 100644 --- a/src/main/java/spoon/support/reflect/declaration/CtCompilationUnitImpl.java +++ b/src/main/java/spoon/support/reflect/declaration/CtCompilationUnitImpl.java @@ -356,8 +356,7 @@ public ElementSourceFragment getOriginalSourceFragment() { if (declaredTypeReferences.isEmpty()) { throw new SpoonException("Root source fragment of compilation unit of package is not supported"); } - rootFragment = new ElementSourceFragment(this, null); - rootFragment.addTreeOfSourceFragmentsOfElement(this); + rootFragment = ElementSourceFragment.createSourceFragmentsFrom(this); } return rootFragment; } diff --git a/src/main/java/spoon/support/sniper/internal/ElementSourceFragment.java b/src/main/java/spoon/support/sniper/internal/ElementSourceFragment.java index 6a9f223c9a8..84fae2c269f 100644 --- a/src/main/java/spoon/support/sniper/internal/ElementSourceFragment.java +++ b/src/main/java/spoon/support/sniper/internal/ElementSourceFragment.java @@ -143,12 +143,13 @@ private boolean isFromSameSource(SourcePosition position) { } /** - * Builds tree of {@link SourcePosition}s of `element` and all it's children + * Builds a tree of source fragments for `element` and all its children, based on the source positions of each element * @param element the root element of the tree */ - public void addTreeOfSourceFragmentsOfElement(CtElement element) { + public static ElementSourceFragment createSourceFragmentsFrom(CtElement element) { + ElementSourceFragment rootFragment = new ElementSourceFragment(element, null); Deque parents = new ArrayDeque<>(); - parents.push(this); + parents.push(rootFragment); /* * scan all children of `element` and build tree of SourceFragments * Note: we cannot skip implicit elements, @@ -228,6 +229,7 @@ protected void exit(CtElement e) { } .setVisitCompilationUnitContent(true) .scan(element.getRoleInParent(), element); + return rootFragment; } /** * @param parentFragment the parent {@link ElementSourceFragment}, which will receive {@link ElementSourceFragment} made for `otherElement`