Package spoon.support.sniper.internal
Class ElementSourceFragment
java.lang.Object
spoon.support.sniper.internal.ElementSourceFragment
- All Implemented Interfaces:
SourceFragment
Represents a part of source code of an
CtElement
It is connected into a tree of ElementSourceFragments.
Use SourcePositionHolder.getOriginalSourceFragment() to get it.-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic ElementSourceFragmentrepresents anElementSourceFragment, which doesn't exist -
Constructor Summary
ConstructorsConstructorDescriptionElementSourceFragment(SourcePositionHolder element, RoleHandler roleHandlerInParent)Creates a source fragment ofSourcePositionHolder -
Method Summary
Modifier and TypeMethodDescriptionadd(ElementSourceFragment other)adds `other`ElementSourceFragmentinto tree ofElementSourceFragments represented by this root elementstatic ElementSourceFragmentcreateSourceFragmentsFrom(CtElement element)Builds a tree of source fragments for `element` and all its children, based on the source positions of each elementNote: the List of children is flat.intgetEnd()Detects all child fragments of thisElementSourceFragment.getSourceCode(int start, int end)getSourceFragmentOf(SourcePositionHolder element, int start, int end)Searches the tree of fragments for theElementSourceFragmentwith expected `element`, which contains `start` and `end` source interval.intgetStart()toString()
-
Field Details
-
NO_SOURCE_FRAGMENT
represents anElementSourceFragment, which doesn't exist
-
-
Constructor Details
-
ElementSourceFragment
Creates a source fragment ofSourcePositionHolder- Parameters:
element- targetSourcePositionHolderroleHandlerInParent- TheRoleHandler, which defines role of target `element` in it's parent
-
-
Method Details
-
getStart
public int getStart()- Returns:
- offset of first character which belongs to this fragment
-
getEnd
public int getEnd()- Returns:
- offset of character after this fragment
-
getSourcePosition
- Returns:
SourcePositionof this fragment
-
toString
-
getSourceCode
- Specified by:
getSourceCodein interfaceSourceFragment- Returns:
- origin source code of this fragment
-
getSourceCode
- Parameters:
start- start offset relative to compilation unitend- end offset (after last character) relative to compilation unit- Returns:
- source code of this Fragment between start/end offsets
-
createSourceFragmentsFrom
Builds a tree of source fragments for `element` and all its children, based on the source positions of each element- Parameters:
element- the root element of the tree
-
add
adds `other`ElementSourceFragmentinto tree ofElementSourceFragments represented by this root element- Parameters:
other- to be addedElementSourceFragment- Returns:
- new root of the tree of the
ElementSourceFragments. It can be be this or `other`
-
getNextSibling
- Returns:
ElementSourceFragmentwhich belongs to the same parent and is next in the sources
-
getFirstChild
- Returns:
ElementSourceFragment, which is first child of this fragment
-
getSourceFragmentOf
Searches the tree of fragments for theElementSourceFragmentwith expected `element`, which contains `start` and `end` source interval. It searches in siblings and children of thisElementSourceFragmentrecursively.- Parameters:
element- theSourcePositionHolderof fragment it is looking for or null for any elementstart- the start offset of searched fragmentend- the offset of next character after the end of searched fragment- Returns:
ElementSourceFragmentwhich represents the root of the CtElement whose sources are in interval [start, end]
-
getElement
- Returns:
CtElementwhose source code is contained in this fragment. May be null
-
getChildrenFragments
Note: the List of children is flat. The child fragments of collections (parameters, type members, ...) are next to each other.- Returns:
- list of child fragments of this
ElementSourceFragment.
-
getGroupedChildrenFragments
Detects all child fragments of thisElementSourceFragment. Note: the List of children contains oneCollectionSourceFragmentfor each collection of fragments (parameters, type members, ...). Note: theCollectionSourceFragmentmay contain a mix of fragments of different roles, when they overlap. For example this code contains mix of annotations and modifierspublic @Test static @Ignored void method()- Returns:
- list of child fragments of this
ElementSourceFragmentwhere fragments, which belongs to the same collection are grouped intoCollectionSourceFragment
-
getRoleInParent
- Returns:
- role of the element of this fragment in scope of it's parent
-
getContainerKindInParent
- Returns:
- the
ContainerKindof the attribute which holds the element of this fragment in it's parent
-