| 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; |
| } |
| } |