scala.tools.refactoring.implementations
Replace the first sequence of elements with another sequence.
Contains the common framework of PartialsFinder and PartialPartialsFinder that fill in the missing parts.
Represent an import selector as a tree, including both names as trees.
Import selectors are not trees, but we can provide an extractor that converts the ImportSelectors into our own ImportSelectorTrees.
defdef is the selected method that should be refactored.
Represent a modifier as a tree, including its position.
Represent a Name as a tree, including its position.
The PlainText "tree" provides a hook into the source code generation.
Preparing a refactoring can either return a result or an instance of PreparationError, describing the cause why the refactoring cannot be performed.
Preparing a refactoring can either return a result or an instance of PreparationError, describing the cause why the refactoring cannot be performed.
PrintingContext is passed around with all the print methods and contains the context or environment for the current printing.
Refactorings are parameterized by the user, and to keep them stateless, the result of the preparation step needs to be passed to the perform method.
Refactorings are parameterized by the user, and to keep them stateless, the result of the preparation step needs to be passed to the perform method.
The result can either be an error or a list of trees that contain changes.
Representation of self type annotations: self: A with B => ^^^^^^^^^^^^^^
The call to the super constructor in a class: class A(i: Int) extends B(i) ^^^^
A traverser that also traverses a TypeTree's original type.
A traverser that creates fake trees for various type trees so they can be treated as if they were regular trees.
Add some methods to Tree that make it easier to compare Trees by position and to extract the position of a tree's name, which is tricky for Selects.
A SourceLayoutTree can be used to insert arbitrary text into the code, for example, blank lines.
Unify the children of a Block tree and sort them in the same order they appear in the source code.
Extract the modifiers with their position from a Modifiers object.
Finds all DefDefs and ValDefs that are partial applications of a partially applied method, i.
Finds all DefDefs and ValDefs that are partial applications of a method.
Provides a finer-grained extractor for Template that distinguishes between class constructor parameters, early definitions, parents, self type annotation and the real body.
When extracting source code from the file via a tree's position, it depends on the tree type whether we can use the position's start or point.
When extracting source code from the file via a tree's position, it depends on the tree type whether we can use the position's start or point.
The tree that will be replaced.
The position to adapt. This does not have to be the position of t.
Applies a transformation to all subtrees of a tree T, returning a new tree,typically of the same kind as T.
Applies a transformation to all subtrees of a tree T, returning a new tree,typically of the same kind as T.
If the transformation fails on one child, abort and fail the whole application.
Returns the (symbol) ancestors of the tree excluding the ROOT in descending order. Also filters the symbols for package objects!
Converts a tree containing Idents and Selects to a .
separated string.
Converts a tree containing Idents and Selects to a .
separated string.
Returns a fully loaded and typed Tree instance for the given SourceFile.
Returns a fully loaded and typed Tree instance for the given SourceFile.
Returns all children that have a representation in the source code.
Returns all children that have a representation in the source code. This includes Name and Modifier trees and excludes everything that has no Position or is an EmptyTree.
Creates a transformation that always returns the value x.
Creates a transformation that always returns the value x.
Creates a list of TextChanges from a list of trees, regenerating only those trees that have changed.
Creates a list of TextChanges from a list of trees, regenerating only those trees that have changed.
Creates a fragment from a tree, regenerating only those trees that have changed.
Creates a fragment from a tree, regenerating only those trees that have changed.
Creates a string from a tree, regenerating all trees.
Creates a string from a tree, regenerating all trees.
If the sourceFile parameter is passed, it will be used to figure out what kinds of newline separators we should generate. If None is passed, '\n' is used.
The characters that are used to indent changed code.
The characters that are used to indent changed code.
Trees that reach the end of the file don't seem to have the correct end position, except if there's a newline at the end.
Trees that reach the end of the file don't seem to have the correct end position, except if there's a newline at the end.
Takes a name and wraps it in if the name corresponds to a Scala keyword.
Takes a name and wraps it in if the name corresponds to a Scala keyword.
Always fails, independent of the input.
Always fails, independent of the input.
Starting from a root tree, returns all children that have changed.
Starting from a root tree, returns all children that have changed. The format of the result is a tuple of a top-level tree, a position of the range that should be replaced and a set of all trees that changed in the context of that top-level tree, including the top-level tree.
Finds a tree by its position, can be used to find the original tree from a transformed tree.
Finds a tree by its position, can be used to find the original tree from a transformed tree.
If multiple trees are candidates, then take the last one, because it is likely more specific.
Searches for a Symbol of a name in the type members of a tree.
Searches for a Symbol of a name in the type members of a tree.
This is mainly used for ImportSelectors, which don't carry any symbol information with them.
The expr of an Import tree.
The name of an ImportSelector of the import.
Returns whether the tree is considered empty.
Returns whether the tree is considered empty.
Prior to Scala 2.10.1 it was sufficient to check Tree#isEmpty, but now we also need to check if the tree is equal to emptyValDef.
Locates the imports in a PackageDef.
Locates the imports in a PackageDef. If we have nested packages, it will only match in the innermost.
Applies a transformation to all subtrees of a tree T, returning a new tree,typically of the same kind as T.
Applies a transformation to all subtrees of a tree T, returning a new tree,typically of the same kind as T.
If the transformation fails on one child, apply the
identity transformation id
and don't fail, unlike
allChildren
.
Creates a function call fun
on the selector and passes a function with
a single parameter param
and the body body
.
Creates a function call fun
on the selector and passes a function with
a single parameter param
and the body body
.
Example:
someExpr becomes someExpr fun (param => body)
Creates a function call fun
on the selector and passes a function with
no parameter and the body body
.
Creates a function call fun
on the selector and passes a function with
no parameter and the body body
.
Example:
someExpr becomes someExpr fun (body)
Do a transformation until it succeeded once, then just fail.
Do a transformation until it succeeded once, then just fail.
Note that because of the statefulness of once, you need to make sure that it isn't accidentally passed as a by-name parameter to another transformation and instantiated multiple times.
We often want to use transformations as predicates, which execute the next transformations if the result is true.
We often want to use transformations as predicates, which execute the next transformations if the result is true. For example:
val tree_with_range_pos = filter[Tree] { case t: Tree => t.pos.isRange }
We can then use the predicate like this: tree_with_range_pos andThen do_something_with_the_tree orElse nothing
Creates a list of changes from a list of (potentially changed) trees.
Creates a list of changes from a list of (potentially changed) trees.
A list of changes that can be applied to the source file.
The characters that surround an import with multiple import selectors inside the braces:
The characters that surround an import with multiple import selectors inside the braces:
import a.{*name*}
Always succeeds and returns the input unchanged.
Always succeeds and returns the input unchanged.
Returns the most specific package declaration in the compilation unit. For example, given the following declaration:
package a package b
class C
it returns b
. If there are further nested packages, they are ignored:
package a class C package b
returns a
.
Creates changes by applying several transformations to the root tree of an abstract file.
Creates changes by applying several transformations to the root tree of an abstract file. Each transformation creates a new root tree that is used as input of the next transformation.
Creates changes by applying a transformation to the root tree of an abstract file.
Creates changes by applying a transformation to the root tree of an abstract file.
Construct a transformation from a partial function; this is the most commonly used way to create new transformations, for example like:
Construct a transformation from a partial function; this is the most commonly used way to create new transformations, for example like:
val reverse_all_class_members = transformation[Tree, Tree] { case t: Template => t.copy(body = t.body.reverse) }
Applies a transformation bottom-up, that is, it applies the transformation to the children of the tree first and then to their parent.
Applies a transformation bottom-up, that is, it applies the transformation to the children of the tree first and then to their parent. The consequence is that the parent "sees" its transformed children.
Applies a transformation top-down, that is, it applies the transformation to the tree T and then passes the transformed T to all children.
Applies a transformation top-down, that is, it applies the transformation to the tree T and then passes the transformed T to all children. The consequence is that the children "see" their new parent.
(Since version 0.5.0) Use PlainText objects and its components
Generic implementation of a refactoring that changes a method signature (i.e. does something with the parameters). This generic implementation tries to detect all occurrences of the selected method, this includes definitions of other methods that are partial applications of the original one (and recursively) and calls to all those methods. An concrete implementation of a method signature refactoring only has to provide the actual transformations of a definition and an application of a method.