blob: 0fee846c77b034fece80ff435e499df6c94a4cf4 [file] [log] [blame]
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;
}
}