public interface PsiElement extends UserDataHolder, Iconable
Iconable.IconFlags, Iconable.LastComputedIcon
Modifier and Type | Field and Description |
---|---|
static ArrayFactory<PsiElement> |
ARRAY_FACTORY |
static PsiElement[] |
EMPTY_ARRAY
The empty array of PSI elements which can be reused to avoid unnecessary allocations.
|
ICON_FLAG_IGNORE_MASK, ICON_FLAG_OPEN, ICON_FLAG_READ_STATUS, ICON_FLAG_VISIBILITY
Modifier and Type | Method and Description |
---|---|
void |
accept(PsiElementVisitor visitor)
Passes the element to the specified visitor.
|
void |
acceptChildren(PsiElementVisitor visitor)
Passes the children of the element to the specified visitor.
|
PsiElement |
add(PsiElement element)
Adds a child to this PSI element.
|
PsiElement |
addAfter(PsiElement element,
PsiElement anchor)
Adds a child to this PSI element, after the specified anchor element.
|
PsiElement |
addBefore(PsiElement element,
PsiElement anchor)
Adds a child to this PSI element, before the specified anchor element.
|
PsiElement |
addRange(PsiElement first,
PsiElement last)
Adds a range of elements as children to this PSI element.
|
PsiElement |
addRangeAfter(PsiElement first,
PsiElement last,
PsiElement anchor)
Adds a range of elements as children to this PSI element, after the specified anchor element.
|
PsiElement |
addRangeBefore(PsiElement first,
PsiElement last,
PsiElement anchor)
Adds a range of elements as children to this PSI element, before the specified anchor element.
|
void |
checkAdd(PsiElement element)
Deprecated.
not all PSI implementations implement this method correctly.
|
void |
checkDelete()
Deprecated.
not all PSI implementations implement this method correctly.
|
PsiElement |
copy()
Creates a copy of the file containing the PSI element and returns the corresponding
element in the created copy.
|
void |
delete()
Deletes this PSI element from the tree.
|
void |
deleteChildRange(PsiElement first,
PsiElement last)
Deletes a range of children of this PSI element from the tree.
|
PsiElement |
findElementAt(int offset)
Finds a leaf PSI element at the specified offset from the start of the text range of this node.
|
PsiReference |
findReferenceAt(int offset)
Finds a reference at the specified offset from the start of the text range of this node.
|
PsiElement [] |
getChildren()
Returns the array of children for the PSI element.
|
PsiFile |
getContainingFile()
Returns the file containing the PSI element.
|
PsiElement |
getContext()
Returns the element which should be used as the parent of this element in a tree up
walk during a resolve operation.
|
<T> T |
getCopyableUserData(Key<T> key)
Returns a copyable user data object attached to this element.
|
PsiElement |
getFirstChild()
Returns the first child of the PSI element.
|
Language |
getLanguage()
Returns the language of the PSI element.
|
PsiElement |
getLastChild()
Returns the last child of the PSI element.
|
PsiManager |
getManager()
Returns the PSI manager for the project to which the PSI element belongs.
|
PsiElement |
getNavigationElement()
Returns the PSI element which should be used as a navigation target
when navigation to this PSI element is requested.
|
PsiElement |
getNextSibling()
Returns the next sibling of the PSI element.
|
ASTNode |
getNode()
Returns the AST node corresponding to the element.
|
PsiElement |
getOriginalElement()
Returns the PSI element which corresponds to this element and belongs to
either the project source path or class path.
|
default java.lang.Iterable<? extends PsiSymbolReference> |
getOwnReferences()
The returned references are expected to be used by language support,
for example in Java `foo` element in `foo = 42` expression has a reference,
which is used by Java language support to compute expected type of the assignment.
|
PsiElement |
getParent()
Returns the parent of the PSI element.
|
PsiElement |
getPrevSibling()
Returns the previous sibling of the PSI element.
|
Project |
getProject()
Returns the project to which the PSI element belongs.
|
PsiReference |
getReference()
Returns the reference from this PSI element to another PSI element (or elements), if one exists.
|
PsiReference [] |
getReferences()
Returns all references from this PSI element to other PSI elements.
|
GlobalSearchScope |
getResolveScope()
Returns the scope in which the declarations for the references in this PSI element are searched.
|
int |
getStartOffsetInParent()
Returns the text offset of the PSI element relative to its parent.
|
java.lang.String |
getText()
Returns the text of the PSI element.
|
int |
getTextLength()
Returns the length of text of the PSI element.
|
int |
getTextOffset()
Returns the offset in the file to which the caret should be placed
when performing the navigation to the element.
|
TextRange |
getTextRange()
Returns the text range in the document occupied by the PSI element.
|
default TextRange |
getTextRangeInParent() |
SearchScope |
getUseScope()
Returns the scope in which references to this element are searched.
|
boolean |
isEquivalentTo(PsiElement another)
This method shouldn't be called by clients directly, because there are no guarantees of it being symmetric.
|
boolean |
isPhysical()
Checks if an actual source or class file corresponds to the element.
|
boolean |
isValid()
Checks if this PSI element is valid.
|
boolean |
isWritable()
Checks if the contents of the element can be modified (if it belongs to a
non-read-only source file.)
|
boolean |
processDeclarations(PsiScopeProcessor processor,
ResolveState state,
PsiElement lastParent,
PsiElement place)
Passes the declarations contained in this PSI element and its children
for processing to the specified scope processor.
|
<T> void |
putCopyableUserData(Key<T> key,
T value)
Attaches a copyable user data object to this element.
|
PsiElement |
replace(PsiElement newElement)
Replaces this PSI element (along with all its children) with another element
(along with the children).
|
boolean |
textContains(char c)
Checks if the text of this element contains the specified character.
|
boolean |
textMatches(java.lang.CharSequence text)
Checks if the text of this PSI element is equal to the specified character sequence.
|
boolean |
textMatches(PsiElement element)
Checks if the text of this PSI element is equal to the text of the specified PSI element.
|
char [] |
textToCharArray()
Returns the text of the PSI element as a character array.
|
java.lang.String |
toString()
toString() should never be presented to the user.
|
getUserData, putUserData
static final PsiElement[] EMPTY_ARRAY
static final ArrayFactory<PsiElement> ARRAY_FACTORY
Project getProject() throws PsiInvalidElementAccessException
PsiInvalidElementAccessException
- if this element is invalidLanguage getLanguage()
PsiManager getManager()
PsiElement [] getChildren()
PsiElement getParent()
PsiElement getFirstChild()
PsiElement getLastChild()
PsiElement getNextSibling()
PsiElement getPrevSibling()
PsiFile getContainingFile() throws PsiInvalidElementAccessException
PsiInvalidElementAccessException
- if this element is invalidTextRange getTextRange()
default TextRange getTextRangeInParent()
int getStartOffsetInParent()
int getTextLength()
PsiElement findElementAt(int offset)
offset
- the relative offset for which the PSI element is requested.PsiReference findReferenceAt(int offset)
offset
- the relative offset for which the reference is requested.int getTextOffset()
PsiNamedElement
, this should return the offset in the file of the
name identifier.)java.lang.String getText()
textMatches(java.lang.CharSequence)
,
textContains(char)
char [] textToCharArray()
PsiElement getNavigationElement()
this
or substitute a different element if this element
does not have an associated file and offset. (For example, if the source code
of a library is attached to a project, the navigation element for a compiled
library class is its source class.)PsiElement getOriginalElement()
this
or substitute a different element if this element does
not belong to the source path or class path. (For example, the original
element for a library source file is the corresponding compiled class file.)boolean textMatches(java.lang.CharSequence text)
text
- the character sequence to compare with.boolean textMatches(PsiElement element)
element
- the element to compare the text with.boolean textContains(char c)
c
- the character to search for.void accept(PsiElementVisitor visitor)
visitor
- the visitor to pass the element to.void acceptChildren(PsiElementVisitor visitor)
visitor
- the visitor to pass the children to.PsiElement copy()
PsiElement add(PsiElement element) throws IncorrectOperationException
element
- the child element to add.element
or its copy).IncorrectOperationException
- if the modification is not supported or not possible for some reason.PsiElement addBefore(PsiElement element, PsiElement anchor) throws IncorrectOperationException
element
- the child element to add.anchor
- the anchor before which the child element is inserted (must be a child of this PSI element)element
or its copy).IncorrectOperationException
- if the modification is not supported or not possible for some reason.PsiElement addAfter(PsiElement element, PsiElement anchor) throws IncorrectOperationException
element
- the child element to add.anchor
- the anchor after which the child element is inserted (must be a child of this PSI element)element
or its copy).IncorrectOperationException
- if the modification is not supported or not possible for some reason.@Deprecated void checkAdd(PsiElement element) throws IncorrectOperationException
element
- the child element to check the add possibility.IncorrectOperationException
- if the modification is not supported or not possible for some reason.PsiElement addRange(PsiElement first, PsiElement last) throws IncorrectOperationException
first
- the first child element to add.last
- the last child element to add (must have the same parent as first
)first
or its copy).IncorrectOperationException
- if the modification is not supported or not possible for some reason.PsiElement addRangeBefore(PsiElement first, PsiElement last, PsiElement anchor) throws IncorrectOperationException
first
- the first child element to add.last
- the last child element to add (must have the same parent as first
)anchor
- the anchor before which the child element is inserted (must be a child of this PSI element)first
or its copy).IncorrectOperationException
- if the modification is not supported or not possible for some reason.PsiElement addRangeAfter(PsiElement first, PsiElement last, PsiElement anchor) throws IncorrectOperationException
first
- the first child element to add.last
- the last child element to add (must have the same parent as first
)anchor
- the anchor after which the child element is inserted (must be a child of this PSI element)first
or its copy).IncorrectOperationException
- if the modification is not supported or not possible for some reason.void delete() throws IncorrectOperationException
IncorrectOperationException
- if the modification is not supported
or not possible for some reason (for example, the file containing the element is read-only).@Deprecated void checkDelete() throws IncorrectOperationException
IncorrectOperationException
- if the modification is not supported or not possible for some reason.void deleteChildRange(PsiElement first, PsiElement last) throws IncorrectOperationException
first
- the first child to delete (must be a child of this PSI element)last
- the last child to delete (must be a child of this PSI element)IncorrectOperationException
- if the modification is not supported or not possible for some reason.PsiElement replace(PsiElement newElement) throws IncorrectOperationException
newElement
- the element to replace this element with.newElement
or its copy)IncorrectOperationException
- if the modification is not supported or not possible for some reason.boolean isValid()
PsiDocumentManager.commitDocument(com.intellij.openapi.editor.Document)
).
(In this case an attempt to change PSI will result in an exception).
Any access to invalid elements results in PsiInvalidElementAccessException
.
Once invalid, elements can't become valid again.
Elements become invalid in following cases:
delete()
)PsiUtilCore.ensureValid(PsiElement)
boolean isWritable()
default java.lang.Iterable<? extends PsiSymbolReference> getOwnReferences()
On the other hand "bar"
literal in new File("bar")
is a string literal,
and from Java language perspective it has no references,
but the framework support "knows" that this literal contains the reference to a file.
These are external references.
PsiExternalReferenceHost
,
PsiSymbolReferenceService.getReferences(PsiElement)
PsiReference getReference()
getReferences()
for an example), returns the first associated reference.ReferencesSearch
PsiReference [] getReferences()
PsiPolyVariantReference
should be used instead
of returning multiple references.
Actually, it's preferable to call PsiReferenceService.getReferences(com.intellij.psi.PsiElement, com.intellij.psi.PsiReferenceService.Hints)
instead
as it allows adding references by plugins when the element implements ContributedReferenceHost
.PsiReferenceService.getReferences(com.intellij.psi.PsiElement, com.intellij.psi.PsiReferenceService.Hints)
,
ReferencesSearch
<T> T getCopyableUserData(Key<T> key)
key
- the key for accessing the user data object.putCopyableUserData(Key, Object)
<T> void putCopyableUserData(Key<T> key, T value)
key
- the key for accessing the user data object.value
- the user data object to attach.getCopyableUserData(Key)
boolean processDeclarations(PsiScopeProcessor processor, ResolveState state, PsiElement lastParent, PsiElement place)
processor
- the processor receiving the declarations.lastParent
- the child of this element has been processed during the previous
step of the tree up walk (declarations under this element do not need
to be processed again)place
- the original element from which the tree up walk was initiated.PsiElement getContext()
getParent()
,
but the context can be overridden for some elements like code fragments (see
JavaCodeFragmentFactory.createCodeBlockCodeFragment(String, PsiElement, boolean)
).boolean isPhysical()
PsiDocumentManager.getDocument(PsiFile)
returns null for non-physical elements.
Not to be confused with FileViewProvider.isPhysical()
.GlobalSearchScope getResolveScope()
SearchScope getUseScope()
PsiSearchHelper.getUseScope(PsiElement)
ASTNode getNode()
java.lang.String toString()
toString
in class java.lang.Object
boolean isEquivalentTo(PsiElement another)
PsiManager.areElementsEquivalent(PsiElement, PsiElement)
internally, which clients should invoke instead.
Implementations of this method should return true
if the parameter is resolve-equivalent to this
, i.e. it represents
the same entity from the language perspective. See also PsiManager.areElementsEquivalent(PsiElement, PsiElement)
documentation.