lvcs-impl
[idea/community.git] / platform / lang-api / src / com / intellij / pom / references / PomReferenceUtil.java
1 /*
2  * Copyright (c) 2000-2005 by JetBrains s.r.o. All Rights Reserved.
3  * Use is subject to license terms.
4  */
5 package com.intellij.pom.references;
6
7 import com.intellij.openapi.util.TextRange;
8 import com.intellij.psi.ElementManipulator;
9 import com.intellij.psi.ElementManipulators;
10 import com.intellij.psi.PsiElement;
11 import com.intellij.psi.DelegatePsiTarget;
12 import com.intellij.psi.meta.PsiMetaOwner;
13 import com.intellij.psi.meta.PsiMetaData;
14 import com.intellij.psi.meta.PsiMetaDataTarget;
15 import com.intellij.pom.PomTarget;
16 import org.jetbrains.annotations.NotNull;
17
18 /**
19  * @author peter
20  */
21 public class PomReferenceUtil {
22
23   public static String getReferenceText(PomReference reference) {
24     return reference.getRangeInElement().substring(reference.getElement().getText());
25   }
26
27   public static TextRange getDefaultRangeInElement(PsiElement element) {
28     final ElementManipulator<PsiElement> manipulator = ElementManipulators.getManipulator(element);
29     assert manipulator != null: "Cannot find manipulator for " + element;
30     return manipulator.getRangeInElement(element);
31   }
32
33   public static void changeContent(PomReference reference, String newContent) {
34     final ElementManipulator<PsiElement> manipulator = ElementManipulators.getManipulator(reference.getElement());
35     assert manipulator != null: "Cannot find manipulator for " + reference.getElement();
36     manipulator.handleContentChange(reference.getElement(), reference.getRangeInElement(), newContent);
37   }
38
39
40   @NotNull
41   public static PomTarget convertPsi2Target(@NotNull PsiElement element) {
42     if (element instanceof PsiMetaOwner) {
43       final PsiMetaOwner metaOwner = (PsiMetaOwner)element;
44       final PsiMetaData psiMetaData = metaOwner.getMetaData();
45       if (psiMetaData != null) {
46         return new PsiMetaDataTarget(psiMetaData);
47       }
48     }
49     if (element instanceof PomTarget) {
50       return (PomTarget)element;
51     }
52     return new DelegatePsiTarget(element);
53   }
54 }