Class TreeVisitor<T extends Tree,​P>

  • Type Parameters:
    T - The type of tree.
    P - An input object that is passed to every visit method.
    Direct Known Subclasses:
    HasSourcePath, PlainTextVisitor, PolyglotVisitor

    public abstract class TreeVisitor<T extends Tree,​P>
    extends java.lang.Object
    Abstract TreeVisitor for processing elements

    Always returns input type T provides Parameterizable P input which is mutable allowing context to be shared

    postProcessing via afterVisit for conditionally chaining other operations with the expectation is that after TreeVisitors are invoked immediately after visiting SourceFile

    • Constructor Detail

      • TreeVisitor

        public TreeVisitor()
    • Method Detail

      • getLanguage

        @Nullable
        public @Nullable java.lang.String getLanguage()
        Returns:
        Describes the language type that this visitor applies to, e.g. java, xml, properties.
      • doAfterVisit

        protected void doAfterVisit​(TreeVisitor<T,​P> visitor)
        Execute the visitor once after the whole source file has been visited. The visitor is executed against the whole source file. This operation only happens once immediately after the containing visitor visits the whole source file. A subsequent Recipe cycle will not run it.

        This method is ideal for one-off operations like auto-formatting, adding/removing imports, etc.

        Parameters:
        visitor - The visitor to run.
      • doAfterVisit

        @Incubating(since="7.0.0")
        protected void doAfterVisit​(Recipe recipe)
        Execute the recipe's main visitor once after the whole source file has been visited. The visitor is executed against the whole source file. This operation only happens once immediately after the containing visitor visits the whole source file. A subsequent Recipe cycle will not run it.

        This method is ideal for one-off operations like auto-formatting, adding/removing imports, etc.

        Parameters:
        recipe - The recipe whose visitor to run.
      • getAfterVisit

        protected java.util.List<TreeVisitor<T,​P>> getAfterVisit()
      • getCursor

        public final Cursor getCursor()
      • postVisit

        @Nullable
        public T postVisit​(T tree,
                           P p)
      • visitNonNull

        public T visitNonNull​(Tree tree,
                              P p)
        By calling this method, you are asserting that you know that the outcome will be non-null when the compiler couldn't otherwise prove this to be the case. This method is a shortcut for having to assert the non-nullability of the returned tree.
        Parameters:
        tree - A non-null tree.
        p - A state object that passes through the visitor.
        Returns:
        A non-null tree.
      • visitNonNull

        public T visitNonNull​(Tree tree,
                              P p,
                              Cursor parent)
      • debugOnChange

        @Incubating(since="7.3.0")
        protected void debugOnChange​(@Nullable
                                     @Nullable Tree before,
                                     @Nullable
                                     @Nullable Tree after)
        A debugging probe that is only called if a tree changes and either the org.openrewrite.debug system property is set or the process is running in debug mode.
      • visitAndCast

        @Incubating(since="7.0.0")
        protected final <T2 extends Tree> T2 visitAndCast​(T2 t,
                                                          P p,
                                                          java.util.function.BiFunction<T2,​P,​Tree> callSuper)