public abstract class PsiFileImpl extends ElementBase implements PsiFileEx, PsiFileWithStubSupport, Queryable, java.lang.Cloneable
Queryable.Contributor, Queryable.PrintInfo, Queryable.Util| Modifier and Type | Field and Description |
|---|---|
static Key<java.lang.Boolean> |
BUILDING_STUB |
protected IElementType |
myContentElementType |
protected PsiManagerEx |
myManager |
protected PsiFile |
myOriginalFile |
FLAGS_LOCKED, ICON_PLACEHOLDERBATCH_REFERENCE_PROCESSINGEMPTY_ARRAYEMPTY_NAVIGATABLE_ELEMENT_ARRAYEMPTY_NAVIGATION_ITEM_ARRAY| Modifier | Constructor and Description |
|---|---|
protected |
PsiFileImpl(FileViewProvider provider) |
protected |
PsiFileImpl(IElementType elementType,
IElementType contentElementType,
FileViewProvider provider) |
| 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.
|
protected void |
assertReadAccessAllowed() |
void |
beforeAstChange() |
StubTree |
calcStubTree() |
FileElement |
calcTreeElement() |
boolean |
canNavigate()
Indicates whether this instance supports navigation of any kind.
|
boolean |
canNavigateToSource()
Indicates whether this instance supports navigation to source (that means some kind of editor).
|
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.
|
void |
clearCaches()
Invalidate any file-specific cache in this method.
|
protected PsiFileImpl |
clone() |
protected PsiFileImpl |
cloneImpl(FileElement treeElementClone) |
PsiElement |
copy()
Creates a copy of the file containing the PSI element and returns the corresponding
element in the created copy.
|
TreeElement |
createContentLeafElement(java.lang.CharSequence leafText) |
protected FileElement |
createFileElement(java.lang.CharSequence docText) |
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.
|
StubTree |
derefStub() |
<T> T |
findChildByClass(java.lang.Class<T> aClass) |
<T> T [] |
findChildrenByClass(java.lang.Class<T> aClass) |
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.
|
PsiDirectory |
getContainingDirectory()
Returns the directory containing the file.
|
PsiFile |
getContainingFile()
Returns the file containing the PSI element.
|
IElementType |
getContentElementType() |
PsiElement |
getContext()
Returns the element which should be used as the parent of this element in a tree up
walk during a resolve operation.
|
IStubFileElementType |
getElementTypeForStubBuilder() |
IFileElementType |
getFileElementType() |
PsiElement |
getFirstChild()
Returns the first child of the PSI element.
|
StubElement |
getGreenStub()
A green stub is a stub object that can co-exist with tree (AST).
|
StubTree |
getGreenStubTree() |
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.
|
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.
|
FileASTNode |
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.
|
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.
|
ItemPresentation |
getPresentation() |
PsiElement |
getPrevSibling()
Returns the previous sibling of the PSI element.
|
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 |
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.
|
StubElement |
getStub() |
StubbedSpine |
getStubbedSpine() |
StubTree |
getStubTree() |
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.
|
FileElement |
getTreeElement() |
SearchScope |
getUseScope()
Returns the scope in which references to this element are searched.
|
FileViewProvider |
getViewProvider() |
VirtualFile |
getVirtualFile()
Returns the virtual file corresponding to the PSI file.
|
protected void |
init(IElementType elementType,
IElementType contentElementType) |
boolean |
isContentsLoaded() |
boolean |
isDirectory() |
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 |
isTemplateDataFile() |
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) |
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.
|
void |
putInfo(java.util.Map<java.lang.String,java.lang.String> info) |
static void |
putInfo(PsiFile psiFile,
java.util.Map<java.lang.String,java.lang.String> info) |
PsiElement |
replace(PsiElement newElement)
Replaces this PSI element (along with all its children) with another element
(along with the children).
|
void |
setContentElementType(IElementType contentElementType) |
PsiElement |
setName(java.lang.String name)
Renames the element.
|
void |
setOriginalFile(PsiFile originalFile) |
void |
setTreeElementPointer(FileElement element) |
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.
|
java.lang.String |
toString()
toString() should never be presented to the user.
|
buildRowIcon, computeBaseIcon, createLayeredIcon, getAdjustedBaseIcon, getBaseIcon, getElementIcon, getIcon, iconWithVisibilityIfNeeded, isNativeFileType, isVisibilitySupported, overlayIcons, registerIconLayer, transformFlagschangeUserMap, clearUserData, copyCopyableDataTo, copyUserDataTo, getCopyableUserData, getUserData, getUserDataString, getUserMap, isUserDataEmpty, putCopyableUserData, putUserData, putUserDataIfAbsent, replace, setUserMapequals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitgetFileTypeprotected IElementType myContentElementType
protected PsiFile myOriginalFile
protected final PsiManagerEx myManager
public static final Key<java.lang.Boolean> BUILDING_STUB
protected PsiFileImpl(IElementType elementType, IElementType contentElementType, FileViewProvider provider)
protected PsiFileImpl(FileViewProvider provider)
public void setContentElementType(IElementType contentElementType)
public IElementType getContentElementType()
protected void init(IElementType elementType, IElementType contentElementType)
public TreeElement createContentLeafElement(java.lang.CharSequence leafText)
public boolean isDirectory()
isDirectory in interface PsiFileSystemItempublic FileElement getTreeElement()
public VirtualFile getVirtualFile()
PsiFilegetVirtualFile in interface PsiFilegetVirtualFile in interface PsiFileSystemItemnull if the file exists only in memory.public boolean processChildren(PsiElementProcessor<PsiFileSystemItem> processor)
processChildren in interface PsiFileSystemItempublic boolean isValid()
PsiElementPsiDocumentManager.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 PsiElementPsiUtilCore.ensureValid(PsiElement)public final void markInvalidated()
markInvalidated in interface PsiFileExpublic boolean isContentsLoaded()
isContentsLoaded in interface PsiFileExprotected void assertReadAccessAllowed()
public StubbedSpine getStubbedSpine()
getStubbedSpine in interface PsiFileWithStubSupportpublic IStubFileElementType getElementTypeForStubBuilder()
protected FileElement createFileElement(java.lang.CharSequence docText)
public void clearCaches()
PsiFileclearCaches in interface PsiFilepublic java.lang.String getText()
PsiElementgetText in interface PsiElementPsiElement.textMatches(java.lang.CharSequence),
PsiElement.textContains(char)public int getTextLength()
PsiElementgetTextLength in interface PsiElementpublic TextRange getTextRange()
PsiElementgetTextRange in interface PsiElementpublic PsiElement getNextSibling()
PsiElementgetNextSibling in interface PsiElementpublic PsiElement getPrevSibling()
PsiElementgetPrevSibling in interface PsiElementpublic long getModificationStamp()
PsiFilegetModificationStamp in interface PsiFileVirtualFile.getModificationStamp()public void subtreeChanged()
PsiFilePsiFile.clearCaches()
since file contents can be reloaded completely (without any specific subtree change) without this method being called.subtreeChanged in interface PsiFileprotected PsiFileImpl clone()
clone in class UserDataHolderBasepublic java.lang.String getName()
PsiNamedElementgetName in interface NavigationItemgetName in interface PsiFileSystemItemgetName in interface PsiNamedElementpublic PsiElement setName(java.lang.String name) throws IncorrectOperationException
PsiNamedElementsetName in interface PsiNamedElementname - 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)
PsiCheckedRenameElementcheckSetName in interface PsiCheckedRenameElementname - the new name to check the renaming possibility for.public boolean isWritable()
PsiElementisWritable in interface PsiElementpublic PsiDirectory getParent()
PsiElementgetParent in interface PsiElementgetParent in interface PsiFilegetParent in interface PsiFileSystemItempublic PsiDirectory getContainingDirectory()
PsiFilegetContainingDirectory in interface PsiFilenull if the file exists only in memory.public PsiFile getContainingFile()
PsiElementgetContainingFile in interface PsiElementpublic void delete()
throws IncorrectOperationException
PsiElementdelete in interface PsiElementIncorrectOperationException - 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
PsiElementcheckDelete in interface PsiElementIncorrectOperationException - if the modification is not supported or not possible for some reason.public PsiFile getOriginalFile()
PsiFilegetOriginalFile in interface PsiFilepublic void setOriginalFile(PsiFile originalFile)
public PsiFile [] getPsiRoots()
PsiFilegetPsiRoots in interface PsiFilethis
if the file has only a single language.public boolean isPhysical()
PsiElementPsiDocumentManager.getDocument(PsiFile) returns null for non-physical elements.
Not to be confused with FileViewProvider.isPhysical().isPhysical in interface PsiElementpublic Language getLanguage()
PsiElementgetLanguage in interface PsiElementpublic IFileElementType getFileElementType()
getFileElementType in interface PsiFilepublic FileViewProvider getViewProvider()
getViewProvider in interface PsiFilepublic void setTreeElementPointer(FileElement element)
public PsiElement findElementAt(int offset)
PsiElementfindElementAt in interface PsiElementoffset - the relative offset for which the PSI element is requested.public PsiReference findReferenceAt(int offset)
PsiElementfindReferenceAt in interface PsiElementoffset - the relative offset for which the reference is requested.public char [] textToCharArray()
PsiElementtextToCharArray in interface PsiElementpublic <T> T [] findChildrenByClass(java.lang.Class<T> aClass)
public <T> T findChildByClass(java.lang.Class<T> aClass)
public boolean isTemplateDataFile()
public PsiElement getContext()
PsiElementgetParent(),
but the context can be overridden for some elements like code fragments (see
JavaCodeFragmentFactory.createCodeBlockCodeFragment(String, PsiElement, boolean)).getContext in interface PsiElementpublic void onContentReload()
onContentReload in interface PsiFileExpublic StubElement getStub()
getStubTree(), or null if the file is not stub-based or AST has been loaded.public final StubElement getGreenStub()
getStub(), can be non-null
even if the AST has been loaded in this file. It can be used in cases when retrieving information from a stub is cheaper
than from AST.getStub(),
getStubTree()public StubTree getStubTree()
getStubTree in interface PsiFileWithStubSupportpublic StubTree derefStub()
protected PsiFileImpl cloneImpl(FileElement treeElementClone)
public final PsiManager getManager()
PsiElementgetManager in interface PsiElementpublic PsiElement getNavigationElement()
PsiElementthis 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.)getNavigationElement in interface PsiElementpublic PsiElement getOriginalElement()
PsiElementthis 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.)getOriginalElement in interface PsiElementpublic final FileElement calcTreeElement()
public PsiElement [] getChildren()
PsiElementgetChildren in interface PsiElementpublic PsiElement getFirstChild()
PsiElementgetFirstChild in interface PsiElementpublic PsiElement getLastChild()
PsiElementgetLastChild in interface PsiElementpublic void acceptChildren(PsiElementVisitor visitor)
PsiElementacceptChildren in interface PsiElementvisitor - the visitor to pass the children to.public int getStartOffsetInParent()
PsiElementgetStartOffsetInParent in interface PsiElementpublic int getTextOffset()
PsiElementPsiNamedElement, this should return the offset in the file of the
name identifier.)getTextOffset in interface PsiElementpublic boolean textMatches(java.lang.CharSequence text)
PsiElementtextMatches in interface PsiElementtext - the character sequence to compare with.public boolean textMatches(PsiElement element)
PsiElementtextMatches in interface PsiElementelement - the element to compare the text with.public boolean textContains(char c)
PsiElementtextContains in interface PsiElementc - the character to search for.public final PsiElement copy()
PsiElementcopy in interface PsiElementpublic PsiElement add(PsiElement element) throws IncorrectOperationException
PsiElementadd in interface PsiElementelement - 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
PsiElementaddBefore in interface PsiElementelement - 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
PsiElementaddAfter in interface PsiElementelement - 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 final void checkAdd(PsiElement element)
PsiElementcheckAdd in interface PsiElementelement - the child element to check the add possibility.public PsiElement addRange(PsiElement first, PsiElement last) throws IncorrectOperationException
PsiElementaddRange in interface PsiElementfirst - 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 PsiElement addRangeBefore(PsiElement first, PsiElement last, PsiElement anchor) throws IncorrectOperationException
PsiElementaddRangeBefore in interface PsiElementfirst - 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 PsiElement addRangeAfter(PsiElement first, PsiElement last, PsiElement anchor) throws IncorrectOperationException
PsiElementaddRangeAfter in interface PsiElementfirst - 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
PsiElementdeleteChildRange in interface PsiElementfirst - 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
PsiElementreplace in interface PsiElementnewElement - 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 PsiReference getReference()
PsiElementPsiElement.getReferences()
for an example), returns the first associated reference.getReference in interface PsiElementReferencesSearchpublic PsiReference [] getReferences()
PsiElementPsiPolyVariantReference 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 PsiElementPsiReferenceService.getReferences(com.intellij.psi.PsiElement, com.intellij.psi.PsiReferenceService.Hints),
ReferencesSearchpublic boolean processDeclarations(PsiScopeProcessor processor, ResolveState state, PsiElement lastParent, PsiElement place)
PsiElementprocessDeclarations in interface PsiElementprocessor - 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.public GlobalSearchScope getResolveScope()
PsiElementgetResolveScope in interface PsiElementpublic SearchScope getUseScope()
PsiElementgetUseScope in interface PsiElementPsiSearchHelper.getUseScope(PsiElement)public ItemPresentation getPresentation()
getPresentation in interface NavigationItempublic void navigate(boolean requestFocus)
Navigatablenavigate in interface NavigatablerequestFocus - true if focus requesting is necessarypublic boolean canNavigate()
NavigatableNavigatable.canNavigateToSource() returns true.
We assume that this method should return true in such case,
so implement this method respectively.canNavigate in interface Navigatablefalse if navigation is not possible for any reason.public boolean canNavigateToSource()
Navigatablefalse.
In such cases it is not recommended to do batch navigation for all navigatables
available via CommonDataKeys.NAVIGATABLE_ARRAY,
because it may lead to opening several modal dialogs.
Use OpenSourceUtil.navigate(com.intellij.pom.Navigatable...) to process such arrays correctly.canNavigateToSource in interface Navigatablefalse if navigation to source is not possible for any reason.public final Project getProject()
PsiElementgetProject in interface PsiElementpublic FileASTNode getNode()
PsiElementgetNode in interface PsiElementgetNode in interface PsiFilepublic boolean isEquivalentTo(PsiElement another)
PsiElementPsiManager.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.isEquivalentTo in interface PsiElementpublic final StubTree getGreenStubTree()
getGreenStub() as a root, or null if there's no green stub availablepublic StubTree calcStubTree()
public void putInfo(java.util.Map<java.lang.String,java.lang.String> info)
public static void putInfo(PsiFile psiFile, java.util.Map<java.lang.String,java.lang.String> info)
public java.lang.String toString()
PsiElementtoString in interface PsiElementtoString in class java.lang.Objectpublic final void beforeAstChange()