summaryrefslogtreecommitdiff
path: root/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/util/SmartPsiPointer.java
diff options
context:
space:
mode:
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.java56
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;
+ }
+}