Interface CtElement

    • Method Detail

      • getAnnotation

        <A extends java.lang.annotation.Annotation> A getAnnotation​(java.lang.Class<A> annotationType)
        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. Use 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.

        Type Parameters:
        A - the annotation's type
        Parameters:
        annotationType - the annotation's class
        Returns:
        if found, returns a proxy for this annotation
      • getAnnotation

        <A extends java.lang.annotation.Annotation> CtAnnotation<A> getAnnotation​(CtTypeReference<A> annotationType)
        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.
        Parameters:
        annotationType - the annotation type
        Returns:
        the annotation if this element is annotated by one annotation of the given type
      • hasAnnotation

        <A extends java.lang.annotation.Annotation> boolean hasAnnotation​(java.lang.Class<A> annotationType)
        Parameters:
        annotationType - the annotation type
        Returns:
        true if the element is annotated by the given annotation type.
      • getAnnotations

        java.util.List<CtAnnotation<? extends java.lang.annotation.Annotation>> getAnnotations()
        Returns the annotations that are present on this element. For sake of encapsulation, the returned list is unmodifiable.
      • getDocComment

        java.lang.String getDocComment()
        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 also getComments().and CtJavaDoc
      • getShortRepresentation

        java.lang.String getShortRepresentation()
        Build a short representation of any element.
      • replace

        void replace​(CtElement element)
        Replaces this element by another one.
      • replace

        <E extends CtElement> void replace​(java.util.Collection<E> elements)
        Replaces this element by several elements. If `elements` contains one single element, it is equivalent to replace(CtElement). If `elements` is empty, it is equivalent to delete().
      • addAnnotation

        <E extends CtElement> E addAnnotation​(CtAnnotation<? extends java.lang.annotation.Annotation> annotation)
        Add an annotation for this element
        Parameters:
        annotation -
        Returns:
        true if this element changed as a result of the call
      • removeAnnotation

        boolean removeAnnotation​(CtAnnotation<? extends java.lang.annotation.Annotation> annotation)
        Remove an annotation for this element
        Parameters:
        annotation -
        Returns:
        true if this element changed as a result of the call
      • setDocComment

        <E extends CtElement> E setDocComment​(java.lang.String docComment)
        Sets the text of the documentation ("javadoc") comment of this declaration. This API will set the content of the first javadoc CtComment or create a new javadoc CtComment if no javadoc CtComment is available on this object.
      • setPosition

        <E extends CtElement> E setPosition​(SourcePosition position)
        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).
        Parameters:
        position - of this element in the input source files
      • getAnnotatedChildren

        <E extends CtElement> java.util.List<E> getAnnotatedChildren​(java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
        Gets the child elements annotated with the given annotation type's instances.
        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

        boolean isImplicit()
        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.
      • setImplicit

        <E extends CtElement> E setImplicit​(boolean b)
        Sets this element to be implicit.
      • getReferencedTypes

        java.util.Set<CtTypeReference<?>> getReferencedTypes()
        Calculates and returns the set of all the types referenced by this element (and sub-elements in the AST).
      • getElements

        <E extends CtElement> java.util.List<E> getElements​(Filter<E> filter)
        Returns all the children elements recursively matching the filter. If the receiver (this) matches the filter, it is also returned
      • setPositions

        <E extends CtElement> E setPositions​(SourcePosition position)
        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).
        Parameters:
        position - of this element and all children in the input source file
      • setAnnotations

        <E extends CtElement> E setAnnotations​(java.util.List<CtAnnotation<? extends java.lang.annotation.Annotation>> annotation)
        Sets the annotations for this element.
      • getParent

        <P extends CtElement> P getParent​(java.lang.Class<P> parentType)
        Gets the first parent that matches the given type.
        Returns:
        the nearest matching parent; null if no match is found or this element has no parent
      • getParent

        <E extends CtElement> E getParent​(Filter<E> filter)
        Gets the first parent that matches the filter.
        Returns:
        the nearest matching parent; null if no match is found or this element has no parent
      • setParent

        <E extends CtElement> E setParent​(CtElement parent)
        Manually sets the parent element of the current element.
        Type Parameters:
        E - this element's type
        Parameters:
        parent - parent reference.
        Returns:
        this element
      • isParentInitialized

        boolean isParentInitialized()
        Tells if this parent has been initialized.
      • hasParent

        boolean hasParent​(CtElement candidate)
        Tells if the given element is a direct or indirect parent.
      • updateAllParentsBelow

        void updateAllParentsBelow()
        Calculates and sets all the parents below this element. This function can be called to check and fix parents after manipulating the model.
      • getRoleInParent

        CtRole getRoleInParent()
        Returns:
        the CtRole of the parent's attribute where this element is used. It returns the primary role. For example ((CtMethod) method).getRoleInParent() returns CtRole.TYPE_MEMBER.
        Returns null if parent doesn't contain this element as direct children or if this element has no parent.
      • delete

        void delete()
        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.
      • setAllMetadata

        <E extends CtElement> E setAllMetadata​(java.util.Map<java.lang.String,​java.lang.Object> metadata)
        Saves a bunch of metadata inside an Element
      • putMetadata

        <E extends CtElement> E putMetadata​(java.lang.String key,
                                            java.lang.Object val)
        Saves metadata inside an Element.
      • getMetadata

        java.lang.Object getMetadata​(java.lang.String key)
        Retrieves metadata stored in an element. Returns null if it does not exist.
      • getAllMetadata

        java.util.Map<java.lang.String,​java.lang.Object> getAllMetadata()
        Retrieves all metadata stored in an element.
      • getMetadataKeys

        java.util.Set<java.lang.String> getMetadataKeys()
        Returns the metadata keys stored in an element.
      • setComments

        <E extends CtElement> E setComments​(java.util.List<CtComment> comments)
        Set the comment list
      • getComments

        java.util.List<CtComment> getComments()
        The list of comments
        Returns:
        the list of comment
      • addComment

        <E extends CtElement> E addComment​(CtComment comment)
        Add a comment to the current element element.addComment(element.getFactory().Code().createComment("comment", CtComment.CommentType.INLINE)
        Parameters:
        comment - the comment
      • removeComment

        <E extends CtElement> E removeComment​(CtComment comment)
        Remove a comment
        Parameters:
        comment - the comment to remove
      • clone

        CtElement clone()
        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 methods Refactoring.copyType(CtType) and Refactoring.copyMethod(CtMethod) instead which does additional work beyond cloning.
      • getValueByRole

        <T> T getValueByRole​(CtRole role)
        Parameters:
        role - the role of the returned attribute with respect to this element. For instance, "klass.getValueByRole(CtRole.METHOD)" returns a list of methods. See RoleHandlerHelper 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

        <E extends CtElement,​T> E setValueByRole​(CtRole role,
                                                       T value)
        Sets a field according to a role.
        Parameters:
        role - the role of the field to be set
        value - to be assigned to this field.
      • getPath

        CtPath getPath()
        Return the path from the model root to this CtElement, eg `.spoon.test.path.Foo.foo#body#statement[index=0]`
      • descendantIterator

        java.util.Iterator<CtElement> descendantIterator()
        Returns an iterator over this CtElement's descendants.
        Returns:
        An iterator over this CtElement's descendants.
      • asIterable

        java.lang.Iterable<CtElement> asIterable()
        Returns an Iterable instance of this CtElement, allowing for dfs traversal of its descendants.
        Returns:
        an Iterable object that allows iterating through this CtElement's descendants.
      • getDirectChildren

        java.util.List<CtElement> getDirectChildren()
        Returns:
        a list of CtElement containing the element's direct children.
      • toString

        java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
        Returns:
        the source code of this element according to the setting of Environment.getPrettyPrintingMode().
      • toStringDebug

        java.lang.String toStringDebug()
        Returns:
        the most straightforward and explicit version of this element.
      • prettyprint

        java.lang.String prettyprint()
        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.