public abstract class LightPsiFileImpl extends PsiElementBase implements PsiFileEx
Iconable.IconFlags, Iconable.LastComputedIcon
FLAGS_LOCKED, ICON_PLACEHOLDER
BATCH_REFERENCE_PROCESSING
EMPTY_ARRAY
ARRAY_FACTORY
ICON_FLAG_IGNORE_MASK, ICON_FLAG_OPEN, ICON_FLAG_READ_STATUS, ICON_FLAG_VISIBILITY
EMPTY_NAVIGATABLE_ELEMENT_ARRAY
EMPTY_NAVIGATION_ITEM_ARRAY
Constructor and Description |
---|
LightPsiFileImpl(FileViewProvider provider,
Language language) |
Modifier and Type | Method and Description |
---|---|
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)
Checks if it is possible to add the specified element as a child to this element,
and throws an exception if the add is not possible.
|
void |
checkDelete()
Checks if it is possible to delete the specified element from the tree,
and throws an exception if the add is not possible.
|
void |
checkSetName(java.lang.String name)
Checks if it is possible to rename the element to the specified name,
and throws an exception if the rename is not possible.
|
abstract void |
clearCaches()
Invalidate any file-specific cache in this method.
|
protected LightPsiFileImpl |
clone() |
PsiElement |
copy()
Creates a copy of the file containing the PSI element and returns the corresponding
element in the created copy.
|
abstract LightPsiFileImpl |
copyLight(FileViewProvider viewProvider) |
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.
|
abstract PsiElement [] |
getChildren()
Returns the array of children for the PSI element.
|
PsiDirectory |
getContainingDirectory()
Returns the directory containing the file.
|
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.
|
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.
|
long |
getModificationStamp()
Gets the modification stamp value.
|
java.lang.String |
getName()
Returns the name of the element.
|
FileASTNode |
getNode()
Returns the AST node corresponding to the element.
|
PsiFile |
getOriginalFile()
If the file is a non-physical copy of a file, returns the original file which had
been copied.
|
PsiDirectory |
getParent()
Returns the parent of the PSI element.
|
PsiDirectory |
getParentDirectory() |
Project |
getProject()
Returns the project to which the PSI element belongs.
|
PsiFile [] |
getPsiRoots()
If the file contains multiple interspersed languages, returns the roots for
PSI trees for each of these languages.
|
PsiReference [] |
getReferences()
Returns all references from this PSI element to other PSI elements.
|
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.
|
FileViewProvider |
getViewProvider() |
VirtualFile |
getVirtualFile()
Returns the virtual file corresponding to the PSI file.
|
boolean |
isContentsLoaded() |
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.)
|
void |
markInvalidated() |
void |
navigate(boolean requestFocus)
Open editor and select/navigate to the object there if possible.
|
void |
onContentReload() |
boolean |
processChildren(PsiElementProcessor<PsiFileSystemItem> processor) |
PsiElement |
replace(PsiElement newElement)
Replaces this PSI element (along with all its children) with another element
(along with the children).
|
void |
setIsValidExplicitly(boolean b) |
PsiElement |
setName(java.lang.String name)
Renames the element.
|
void |
setOriginalFile(PsiFile originalFile) |
void |
subtreeChanged()
Called by the PSI framework when the contents of the file changes.
|
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.
|
accept, canNavigate, canNavigateToSource, findChildByClass, findChildrenByClass, findNotNullChildByClass, getNavigationElement, getNextSibling, getOriginalElement, getPresentation, getPrevSibling, getReference, getResolveScope, getUseScope, isEquivalentTo, notNullChild, processDeclarations
buildRowIcon, computeBaseIcon, createLayeredIcon, getAdjustedBaseIcon, getBaseIcon, getElementIcon, getIcon, iconWithVisibilityIfNeeded, isNativeFileType, isVisibilitySupported, overlayIcons, registerIconLayer, transformFlags
changeUserMap, clearUserData, copyCopyableDataTo, copyUserDataTo, getCopyableUserData, getUserData, getUserDataString, getUserMap, isUserDataEmpty, putCopyableUserData, putUserData, putUserDataIfAbsent, replace, setUserMap
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getFileElementType, getFileType
isDirectory
accept, getCopyableUserData, getNavigationElement, getNextSibling, getOriginalElement, getOwnReferences, getPrevSibling, getReference, getResolveScope, getTextRangeInParent, getUseScope, isEquivalentTo, processDeclarations, putCopyableUserData, toString
getUserData, putUserData
getPresentation
canNavigate, canNavigateToSource
public LightPsiFileImpl(FileViewProvider provider, Language language)
public VirtualFile getVirtualFile()
PsiFile
getVirtualFile
in interface PsiFile
getVirtualFile
in interface PsiFileSystemItem
null
if the file exists only in memory.public boolean processChildren(PsiElementProcessor<PsiFileSystemItem> processor)
processChildren
in interface PsiFileSystemItem
public boolean isValid()
PsiElement
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:
PsiElement.delete()
)isValid
in interface PsiElement
isValid
in class PsiElementBase
PsiUtilCore.ensureValid(PsiElement)
public void setIsValidExplicitly(boolean b)
public java.lang.String getText()
PsiElement
getText
in interface PsiElement
PsiElement.textMatches(java.lang.CharSequence)
,
PsiElement.textContains(char)
public long getModificationStamp()
PsiFile
getModificationStamp
in interface PsiFile
VirtualFile.getModificationStamp()
public void subtreeChanged()
PsiFile
PsiFile.clearCaches()
since file contents can be reloaded completely (without any specific subtree change) without this method being called.subtreeChanged
in interface PsiFile
public abstract void clearCaches()
PsiFile
clearCaches
in interface PsiFile
protected LightPsiFileImpl clone()
clone
in class UserDataHolderBase
public java.lang.String getName()
PsiNamedElement
getName
in interface NavigationItem
getName
in interface PsiFileSystemItem
getName
in interface PsiNamedElement
getName
in class PsiElementBase
public PsiElement setName(java.lang.String name) throws IncorrectOperationException
PsiNamedElement
setName
in interface PsiNamedElement
name
- the new element name.this
or a different element if the rename caused the element to be replaced).IncorrectOperationException
- if the modification is not supported or not possible for some reason.public void checkSetName(java.lang.String name) throws IncorrectOperationException
PsiCheckedRenameElement
checkSetName
in interface PsiCheckedRenameElement
name
- the new name to check the renaming possibility for.IncorrectOperationException
- if the rename is not supported or not possible for some reason.public PsiDirectory getParent()
PsiElement
getParent
in interface PsiElement
getParent
in interface PsiFile
getParent
in interface PsiFileSystemItem
public PsiDirectory getContainingDirectory()
PsiFile
getContainingDirectory
in interface PsiFile
null
if the file exists only in memory.public PsiDirectory getParentDirectory()
public PsiFile getContainingFile()
PsiElement
getContainingFile
in interface PsiElement
getContainingFile
in class PsiElementBase
public void delete() throws IncorrectOperationException
PsiElement
delete
in interface PsiElement
delete
in class PsiElementBase
IncorrectOperationException
- if the modification is not supported
or not possible for some reason (for example, the file containing the element is read-only).public void checkDelete() throws IncorrectOperationException
PsiElement
checkDelete
in interface PsiElement
checkDelete
in class PsiElementBase
IncorrectOperationException
- if the modification is not supported or not possible for some reason.public PsiFile getOriginalFile()
PsiFile
getOriginalFile
in interface PsiFile
public void setOriginalFile(PsiFile originalFile)
public PsiFile [] getPsiRoots()
PsiFile
getPsiRoots
in interface PsiFile
this
if the file has only a single language.public boolean isPhysical()
PsiElement
PsiDocumentManager.getDocument(PsiFile)
returns null for non-physical elements.
Not to be confused with FileViewProvider.isPhysical()
.isPhysical
in interface PsiElement
isPhysical
in class PsiElementBase
public Language getLanguage()
PsiElement
getLanguage
in interface PsiElement
public FileViewProvider getViewProvider()
getViewProvider
in interface PsiFile
public PsiManager getManager()
PsiElement
getManager
in interface PsiElement
getManager
in class PsiElementBase
public Project getProject()
PsiElement
getProject
in interface PsiElement
getProject
in class PsiElementBase
public void acceptChildren(PsiElementVisitor visitor)
PsiElement
acceptChildren
in interface PsiElement
acceptChildren
in class PsiElementBase
visitor
- the visitor to pass the children to.public final PsiElement copy()
PsiElement
copy
in interface PsiElement
copy
in class PsiElementBase
public final void checkAdd(PsiElement element) throws IncorrectOperationException
PsiElement
checkAdd
in interface PsiElement
checkAdd
in class PsiElementBase
element
- the child element to check the add possibility.IncorrectOperationException
- if the modification is not supported or not possible for some reason.public PsiReference [] getReferences()
PsiElement
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
.getReferences
in interface PsiElement
getReferences
in class PsiElementBase
PsiReferenceService.getReferences(com.intellij.psi.PsiElement, com.intellij.psi.PsiReferenceService.Hints)
,
ReferencesSearch
public void navigate(boolean requestFocus)
Navigatable
navigate
in interface Navigatable
navigate
in class PsiElementBase
requestFocus
- true
if focus requesting is necessarypublic PsiElement findElementAt(int offset)
PsiElement
findElementAt
in interface PsiElement
offset
- the relative offset for which the PSI element is requested.public PsiReference findReferenceAt(int offset)
PsiElement
findReferenceAt
in interface PsiElement
findReferenceAt
in class PsiElementBase
offset
- the relative offset for which the reference is requested.public char [] textToCharArray()
PsiElement
textToCharArray
in interface PsiElement
public boolean isContentsLoaded()
isContentsLoaded
in interface PsiFileEx
public void onContentReload()
onContentReload
in interface PsiFileEx
public boolean isWritable()
PsiElement
isWritable
in interface PsiElement
isWritable
in class PsiElementBase
public abstract PsiElement [] getChildren()
PsiElement
getChildren
in interface PsiElement
public PsiElement getFirstChild()
PsiElement
getFirstChild
in interface PsiElement
getFirstChild
in class PsiElementBase
public PsiElement getLastChild()
PsiElement
getLastChild
in interface PsiElement
getLastChild
in class PsiElementBase
public TextRange getTextRange()
PsiElement
getTextRange
in interface PsiElement
public int getStartOffsetInParent()
PsiElement
getStartOffsetInParent
in interface PsiElement
public int getTextLength()
PsiElement
getTextLength
in interface PsiElement
public int getTextOffset()
PsiElement
PsiNamedElement
, this should return the offset in the file of the
name identifier.)getTextOffset
in interface PsiElement
public boolean textMatches(PsiElement element)
PsiElement
textMatches
in interface PsiElement
textMatches
in class PsiElementBase
element
- the element to compare the text with.public boolean textMatches(java.lang.CharSequence text)
PsiElement
textMatches
in interface PsiElement
textMatches
in class PsiElementBase
text
- the character sequence to compare with.public boolean textContains(char c)
PsiElement
textContains
in interface PsiElement
textContains
in class PsiElementBase
c
- the character to search for.public PsiElement add(PsiElement element) throws IncorrectOperationException
PsiElement
add
in interface PsiElement
add
in class PsiElementBase
element
- the child element to add.element
or its copy).IncorrectOperationException
- if the modification is not supported or not possible for some reason.public PsiElement addBefore(PsiElement element, PsiElement anchor) throws IncorrectOperationException
PsiElement
addBefore
in interface PsiElement
addBefore
in class PsiElementBase
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.public PsiElement addAfter(PsiElement element, PsiElement anchor) throws IncorrectOperationException
PsiElement
addAfter
in interface PsiElement
addAfter
in class PsiElementBase
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.public PsiElement addRange(PsiElement first, PsiElement last) throws IncorrectOperationException
PsiElement
addRange
in interface PsiElement
addRange
in class PsiElementBase
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.public final PsiElement addRangeBefore(PsiElement first, PsiElement last, PsiElement anchor) throws IncorrectOperationException
PsiElement
addRangeBefore
in interface PsiElement
addRangeBefore
in class PsiElementBase
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.public final PsiElement addRangeAfter(PsiElement first, PsiElement last, PsiElement anchor) throws IncorrectOperationException
PsiElement
addRangeAfter
in interface PsiElement
addRangeAfter
in class PsiElementBase
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.public void deleteChildRange(PsiElement first, PsiElement last) throws IncorrectOperationException
PsiElement
deleteChildRange
in interface PsiElement
deleteChildRange
in class PsiElementBase
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.public PsiElement replace(PsiElement newElement) throws IncorrectOperationException
PsiElement
replace
in interface PsiElement
replace
in class PsiElementBase
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.public FileASTNode getNode()
PsiElement
getNode
in interface PsiElement
getNode
in interface PsiFile
public abstract LightPsiFileImpl copyLight(FileViewProvider viewProvider)
public PsiElement getContext()
PsiElement
getParent()
,
but the context can be overridden for some elements like code fragments (see
JavaCodeFragmentFactory.createCodeBlockCodeFragment(String, PsiElement, boolean)
).getContext
in interface PsiElement
getContext
in class PsiElementBase
public void markInvalidated()
markInvalidated
in interface PsiFileEx