Class CtElementImpl
java.lang.Object
spoon.support.reflect.declaration.CtElementImpl
- All Implemented Interfaces:
Serializable
,Cloneable
,FactoryAccessor
,SourcePositionHolder
,CtElement
,CtQueryable
,CtVisitable
- Direct Known Subclasses:
CtCodeElementImpl
,CtCompilationUnitImpl
,CtImportImpl
,CtJavaDocTagImpl
,CtModuleRequirementImpl
,CtNamedElementImpl
,CtPackageDeclarationImpl
,CtPackageExportImpl
,CtProvidedServiceImpl
,CtReferenceImpl
,CtTypeMemberWildcardImportReferenceImpl
,CtUnresolvedImport
,CtUsedServiceImpl
Contains the default implementation of most CtElement methods.
- See Also:
- Serialized Form
-
Field Summary
Modifier and TypeFieldDescriptionstatic String
protected Factory
this field `factory` must be transient in order to allow proper serialization the factory is restored in all AST nodes inSerializationModelStreamer
protected static org.slf4j.Logger
protected CtElement
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescription<E extends CtElement>
EaddAnnotation(CtAnnotation<? extends Annotation> annotation)
Add an annotation for this element<E extends CtElement>
EaddComment(CtComment comment)
Add a comment to the current elementelement.addComment(element.getFactory().Code().createComment("comment", CtComment.CommentType.INLINE)
Returns an Iterable instance of this CtElement, allowing for dfs traversal of its descendants.clone()
Clone the element which calls this method in a new object.void
comment()
Replace the statement with a CtComment having the statement as textvoid
delete()
Deletes the element.Returns an iterator over this CtElement's descendants.static <T> List<T>
static <T> Set<T>
emptySet()
boolean
filterChildren(Filter<P> predicate)
Retrieves all metadata stored in an element.getAnnotatedChildren(Class<? extends Annotation> annotationType)
Gets the child elements annotated with the given annotation type's instances.<A extends Annotation>
AgetAnnotation(Class<A> annotationType)
Searches for an annotation of the given class that annotates the current element.<A extends Annotation>
CtAnnotation<A>getAnnotation(CtTypeReference<A> annotationType)
Gets the annotation element for a given annotation type.List<CtAnnotation<? extends Annotation>>
Returns the annotations that are present on this element.The list of commentsReturns the text of the documentation ("javadoc") comment of this element.getElements(Filter<E> filter)
Returns all the children elements recursively matching the filter.Gets the factory of this object.getMetadata(String key)
Retrieves metadata stored in an element.Returns the metadata keys stored in an element.Returns the original source code (maybe different from toString() if a transformation has been applied).Gets the parent of current reference.<P extends CtElement>
PGets the first parent that matches the given type.<E extends CtElement>
EGets the first parent that matches the filter.getPath()
Return the path from the model root to this CtElement, eg `.spoon.test.path.Foo.foo#body#statement[index=0]`Gets the position of this element in input source filesSet<CtTypeReference<?>>
Calculates and returns the set of all the types referenced by this element (and sub-elements in the AST).Build a short representation of any element.<T> T
getValueByRole(CtRole role)
<A extends Annotation>
booleanhasAnnotation(Class<A> annotationType)
int
hashCode()
boolean
Tells if the given element is a direct or indirect parent.boolean
Returns true if this element is not present in the code (automatically added by the Java compiler or inferred when the model is built).boolean
Tells if this parent has been initialized.<I> CtQuery
map(CtConsumableFunction<I> queryStep)
<I, R> CtQuery
map(CtFunction<I,R> function)
<E extends CtElement>
EputMetadata(String key, Object val)
Saves metadata inside an Element.boolean
removeAnnotation(CtAnnotation<? extends Annotation> annotation)
Remove an annotation for this element<E extends CtElement>
EremoveComment(CtComment comment)
Remove a comment<E extends CtElement>
voidreplace(Collection<E> elements)
Replaces this element by several elements.void
Replaces this element by another one.<E extends CtElement>
EsetAllMetadata(Map<String,Object> metadata)
Saves a bunch of metadata inside an Element<E extends CtElement>
EsetAnnotations(List<CtAnnotation<? extends Annotation>> annotations)
Sets the annotations for this element.<E extends CtElement>
EsetComments(List<CtComment> comments)
Set the comment list<E extends CtElement>
EsetDocComment(String docComment)
Sets the text of the documentation ("javadoc") comment of this declaration.void
setFactory(Factory factory)
Sets the factory object.<E extends CtElement>
EsetImplicit(boolean implicit)
Sets this element to be implicit.<E extends CtElement>
EManually sets the parent element of the current element.<E extends CtElement>
EsetPosition(SourcePosition position)
Sets the position in the Java source file.<E extends CtElement>
EsetPositions(SourcePosition position)
Sets the position of this element and all its children element.<E extends CtElement, T>
EsetValueByRole(CtRole role, T value)
Sets a field according to a role.toString()
static <T> List<T>
unmodifiableList(List<T> list)
void
Calculates and sets all the parents below this element.Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface spoon.reflect.visitor.CtVisitable
accept
-
Field Details
-
LOGGER
protected static final org.slf4j.Logger LOGGER -
ERROR_MESSAGE_TO_STRING
- See Also:
- Constant Field Values
-
factory
this field `factory` must be transient in order to allow proper serialization the factory is restored in all AST nodes inSerializationModelStreamer
-
parent
-
-
Constructor Details
-
CtElementImpl
public CtElementImpl()
-
-
Method Details
-
emptyList
-
emptySet
-
unmodifiableList
-
getShortRepresentation
Description copied from interface:CtElement
Build a short representation of any element.- Specified by:
getShortRepresentation
in interfaceCtElement
-
equals
-
getAnnotation
Description copied from interface:CtElement
Searches for an annotation of the given class that annotates the current element. When used with a shadow element, this method might return an empty list even on an annotated element because annotations without a RUNTIME retention policy are lost after compilation. WARNING: this method uses a class loader proxy, which is costly. UseCtElement.getAnnotation(CtTypeReference)
preferably.NOTE: before using an annotation proxy, you have to make sure that all the types referenced by the annotation have been compiled and are in the classpath so that accessed values can be converted into the actual types.
- Specified by:
getAnnotation
in interfaceCtElement
- Type Parameters:
A
- the annotation's type- Parameters:
annotationType
- the annotation's class- Returns:
- if found, returns a proxy for this annotation
-
hasAnnotation
- Specified by:
hasAnnotation
in interfaceCtElement
- Parameters:
annotationType
- the annotation type- Returns:
- true if the element is annotated by the given annotation type.
-
getAnnotation
Description copied from interface:CtElement
Gets the annotation element for a given annotation type. When used with a shadow element, this method might return an empty list even on an annotated element because annotations without a RUNTIME retention policy are lost after compilation.- Specified by:
getAnnotation
in interfaceCtElement
- Parameters:
annotationType
- the annotation type- Returns:
- the annotation if this element is annotated by one annotation of the given type
-
getAnnotations
Description copied from interface:CtElement
Returns the annotations that are present on this element. For sake of encapsulation, the returned list is unmodifiable.- Specified by:
getAnnotations
in interfaceCtElement
-
getDocComment
Description copied from interface:CtElement
Returns the text of the documentation ("javadoc") comment of this element. It contains the text of Javadoc together with the tags. If one only wants only the text without the tag, one can call `getComments().get(0).getContent()` If one wants to analyze the tags, one can call `getComments().get(0).asJavaDoc().getTags()` See alsoCtElement.getComments()
.andCtJavaDoc
- Specified by:
getDocComment
in interfaceCtElement
-
getPosition
Description copied from interface:CtElement
Gets the position of this element in input source files- Specified by:
getPosition
in interfaceCtElement
- Specified by:
getPosition
in interfaceSourcePositionHolder
- Returns:
- Source file and line number of this element.
It never returns null. Use
SourcePosition.isValidPosition()
to detect whether return instance contains start/end indexes.
-
hashCode
public int hashCode() -
setAnnotations
public <E extends CtElement> E setAnnotations(List<CtAnnotation<? extends Annotation>> annotations)Description copied from interface:CtElement
Sets the annotations for this element.- Specified by:
setAnnotations
in interfaceCtElement
-
delete
public void delete()Description copied from interface:CtElement
Deletes the element. For instance, delete a statement from its containing block. Warning: it may result in an incorrect AST, use at your own risk. -
addAnnotation
Description copied from interface:CtElement
Add an annotation for this element- Specified by:
addAnnotation
in interfaceCtElement
- Returns:
- true if this element changed as a result of the call
-
removeAnnotation
Description copied from interface:CtElement
Remove an annotation for this element- Specified by:
removeAnnotation
in interfaceCtElement
- Returns:
- true if this element changed as a result of the call
-
setDocComment
Description copied from interface:CtElement
Sets the text of the documentation ("javadoc") comment of this declaration. This API will set the content of the first javadocCtComment
or create a new javadocCtComment
if no javadocCtComment
is available on this object.- Specified by:
setDocComment
in interfaceCtElement
-
setPosition
Description copied from interface:CtElement
Sets the position in the Java source file. Note that this information is used to feed the line numbers in the generated bytecode if any (which is useful for debugging).- Specified by:
setPosition
in interfaceCtElement
- Parameters:
position
- of this element in the input source files
-
setPositions
Description copied from interface:CtElement
Sets the position of this element and all its children element. Note that this information is used to feed the line numbers in the generated bytecode if any (which is useful for debugging).- Specified by:
setPositions
in interfaceCtElement
- Parameters:
position
- of this element and all children in the input source file
-
prettyprint
- Specified by:
prettyprint
in interfaceCtElement
- Returns:
- the source code of this element with the pretty-printing rules of Spoon
Warning: this is not side-effect free, this triggers some
ImportAnalyzer
which would change the model: add/remove imports, change the value `implicit` of some model elements, etc.
-
toStringDebug
- Specified by:
toStringDebug
in interfaceCtElement
- Returns:
- the most straightforward and explicit version of this element.
-
toString
- Specified by:
toString
in interfaceCtElement
- Overrides:
toString
in classObject
- Returns:
- the source code of this element according to the setting of
Environment.getPrettyPrintingMode()
.
-
getAnnotatedChildren
public <E extends CtElement> List<E> getAnnotatedChildren(Class<? extends Annotation> annotationType)Description copied from interface:CtElement
Gets the child elements annotated with the given annotation type's instances.- Specified by:
getAnnotatedChildren
in interfaceCtElement
- Type Parameters:
E
- the element's type- Parameters:
annotationType
- the annotation type- Returns:
- all the child elements annotated with an instance of the given annotation type
-
isImplicit
public boolean isImplicit()Description copied from interface:CtElement
Returns true if this element is not present in the code (automatically added by the Java compiler or inferred when the model is built). Consequently, implicit elements are not pretty-printed and have no position.- Specified by:
isImplicit
in interfaceCtElement
-
setImplicit
Description copied from interface:CtElement
Sets this element to be implicit.- Specified by:
setImplicit
in interfaceCtElement
-
getReferencedTypes
Description copied from interface:CtElement
Calculates and returns the set of all the types referenced by this element (and sub-elements in the AST).- Specified by:
getReferencedTypes
in interfaceCtElement
-
getElements
Description copied from interface:CtElement
Returns all the children elements recursively matching the filter. If the receiver (this) matches the filter, it is also returned- Specified by:
getElements
in interfaceCtElement
-
map
- Specified by:
map
in interfaceCtQueryable
- See Also:
CtQuery.map(CtConsumableFunction)
-
map
- Specified by:
map
in interfaceCtQueryable
- See Also:
CtQuery.map(CtFunction)
-
filterChildren
- Specified by:
filterChildren
in interfaceCtQueryable
- See Also:
CtQuery.filterChildren(Filter)
-
getParent
Description copied from interface:CtElement
Gets the parent of current reference.- Specified by:
getParent
in interfaceCtElement
- Throws:
ParentNotInitializedException
- when the parent of this element is not initialized
-
setParent
Description copied from interface:CtElement
Manually sets the parent element of the current element. -
isParentInitialized
public boolean isParentInitialized()Description copied from interface:CtElement
Tells if this parent has been initialized.- Specified by:
isParentInitialized
in interfaceCtElement
-
getParent
Description copied from interface:CtElement
Gets the first parent that matches the given type. -
getParent
Description copied from interface:CtElement
Gets the first parent that matches the filter. -
hasParent
Description copied from interface:CtElement
Tells if the given element is a direct or indirect parent. -
getRoleInParent
- Specified by:
getRoleInParent
in interfaceCtElement
- Returns:
- the
CtRole
of the parent's attribute where this element is used. It returns the primary role. For example ((CtMethod) method).getRoleInParent() returnsCtRole.TYPE_MEMBER
.
Returns null if parent doesn't contain this element as direct children or if this element has no parent.
-
updateAllParentsBelow
public void updateAllParentsBelow()Description copied from interface:CtElement
Calculates and sets all the parents below this element. This function can be called to check and fix parents after manipulating the model.- Specified by:
updateAllParentsBelow
in interfaceCtElement
-
getFactory
Description copied from interface:FactoryAccessor
Gets the factory of this object.- Specified by:
getFactory
in interfaceFactoryAccessor
-
setFactory
Description copied from interface:FactoryAccessor
Sets the factory object.- Specified by:
setFactory
in interfaceFactoryAccessor
-
replace
Description copied from interface:CtElement
Replaces this element by another one. -
replace
Description copied from interface:CtElement
Replaces this element by several elements. If `elements` contains one single element, it is equivalent toCtElement.replace(CtElement)
. If `elements` is empty, it is equivalent toCtElement.delete()
. -
setAllMetadata
Description copied from interface:CtElement
Saves a bunch of metadata inside an Element- Specified by:
setAllMetadata
in interfaceCtElement
-
putMetadata
Description copied from interface:CtElement
Saves metadata inside an Element.- Specified by:
putMetadata
in interfaceCtElement
-
getMetadata
Description copied from interface:CtElement
Retrieves metadata stored in an element. Returns null if it does not exist.- Specified by:
getMetadata
in interfaceCtElement
-
getAllMetadata
Description copied from interface:CtElement
Retrieves all metadata stored in an element.- Specified by:
getAllMetadata
in interfaceCtElement
-
getMetadataKeys
Description copied from interface:CtElement
Returns the metadata keys stored in an element.- Specified by:
getMetadataKeys
in interfaceCtElement
-
getComments
Description copied from interface:CtElement
The list of comments- Specified by:
getComments
in interfaceCtElement
- Returns:
- the list of comment
-
addComment
Description copied from interface:CtElement
Add a comment to the current elementelement.addComment(element.getFactory().Code().createComment("comment", CtComment.CommentType.INLINE)
- Specified by:
addComment
in interfaceCtElement
- Parameters:
comment
- the comment
-
removeComment
Description copied from interface:CtElement
Remove a comment- Specified by:
removeComment
in interfaceCtElement
- Parameters:
comment
- the comment to remove
-
setComments
Description copied from interface:CtElement
Set the comment list- Specified by:
setComments
in interfaceCtElement
-
clone
Description copied from interface:CtElement
Clone the element which calls this method in a new object. Note that that references are kept as is, and thus, so if you clone whole classes or methods, some parts of the cloned element (eg executable references) may still point to the initial element. In this case, consider using methodsRefactoring.copyType(CtType)
andRefactoring.copyMethod(CtMethod)
instead which does additional work beyond cloning. -
getValueByRole
- Specified by:
getValueByRole
in interfaceCtElement
- Parameters:
role
- the role of the returned attribute with respect to this element. For instance, "klass.getValueByRole(CtRole.METHOD)" returns a list of methods. SeeRoleHandlerHelper
for more advanced methods.- Returns:
- a a single value (eg a CtElement), List, Set or Map depending on this `element` and `role`. Returned collections are read-only.
-
setValueByRole
Description copied from interface:CtElement
Sets a field according to a role.- Specified by:
setValueByRole
in interfaceCtElement
- Parameters:
role
- the role of the field to be setvalue
- to be assigned to this field.
-
getPath
Description copied from interface:CtElement
Return the path from the model root to this CtElement, eg `.spoon.test.path.Foo.foo#body#statement[index=0]` -
descendantIterator
Description copied from interface:CtElement
Returns an iterator over this CtElement's descendants.- Specified by:
descendantIterator
in interfaceCtElement
- Returns:
- An iterator over this CtElement's descendants.
-
asIterable
Description copied from interface:CtElement
Returns an Iterable instance of this CtElement, allowing for dfs traversal of its descendants.- Specified by:
asIterable
in interfaceCtElement
- Returns:
- an Iterable object that allows iterating through this CtElement's descendants.
-
getOriginalSourceFragment
Description copied from interface:SourcePositionHolder
Returns the original source code (maybe different from toString() if a transformation has been applied). Warning: this is a advanced method which cannot be considered as part of the stable API- Specified by:
getOriginalSourceFragment
in interfaceCtElement
- Specified by:
getOriginalSourceFragment
in interfaceSourcePositionHolder
-
comment
public void comment()Replace the statement with a CtComment having the statement as text -
getDirectChildren
- Specified by:
getDirectChildren
in interfaceCtElement
- Returns:
- a list of CtElement containing the element's direct children.
-