diff options
Diffstat (limited to 'platform/structuralsearch/source/com/intellij/structuralsearch/plugin/util/SmartPsiPointer.java')
-rw-r--r-- | platform/structuralsearch/source/com/intellij/structuralsearch/plugin/util/SmartPsiPointer.java | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/util/SmartPsiPointer.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/util/SmartPsiPointer.java new file mode 100644 index 000000000000..0fee846c77b0 --- /dev/null +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/util/SmartPsiPointer.java @@ -0,0 +1,56 @@ +package com.intellij.structuralsearch.plugin.util; + +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiElement; +import com.intellij.psi.SmartPointerManager; +import com.intellij.psi.SmartPsiElementPointer; + +/** + * Reference to element have been matched + */ +public class SmartPsiPointer { + private SmartPsiElementPointer pointer; + + public SmartPsiPointer(PsiElement element) { + pointer = element != null ? SmartPointerManager.getInstance(element.getProject()).createSmartPsiElementPointer(element):null; + } + + public VirtualFile getFile() { + return pointer != null ? pointer.getVirtualFile():null; + } + + public int getOffset() { + return pointer != null ? pointer.getElement().getTextRange().getStartOffset():-1; + } + + public int getLength() { + return pointer != null ? pointer.getElement().getTextRange().getEndOffset():0; + } + + public PsiElement getElement() { + return pointer != null ? pointer.getElement():null; + } + + public void clear() { + pointer = null; + } + + public Project getProject() { + return pointer != null ? pointer.getElement().getProject():null; + } + + public boolean equals(Object o) { + if (o instanceof SmartPsiPointer) { + final SmartPsiPointer ref = ((SmartPsiPointer)o); + return ref.getFile().equals(getFile()) && + ref.getOffset() == getOffset() && + ref.getLength() == getLength(); + } + return false; + } + + public int hashCode() { + return pointer != null ? getElement().hashCode():0; + } +} |