IDEADEV-34768: dynamic contexts in GSP
[fedora-idea.git] / lang-impl / src / com / intellij / openapi / paths / GenericDynamicContextProvider.java
blobb611b5a5fafb81564a2da237753fda48aebe0ada
1 package com.intellij.openapi.paths;
3 import com.intellij.psi.PsiElement;
4 import com.intellij.psi.templateLanguages.OuterLanguageElement;
6 /**
7 * @author Dmitry Avdeev
8 */
9 public class GenericDynamicContextProvider implements DynamicContextProvider {
11 public int getOffset(PsiElement element, int offset, String elementText) {
12 final PsiElement[] children = element.getChildren();
13 for (PsiElement child : children) {
14 if (isDynamic(child)) {
15 final int i = child.getStartOffsetInParent();
16 if (i == offset) { // dynamic context?
17 final PsiElement next = child.getNextSibling();
18 if (next == null || !next.getText().startsWith("/")) {
19 return -1;
21 offset = next.getStartOffsetInParent();
22 } else {
23 final int pos = PathReferenceProviderBase.getLastPosOfURL(offset, elementText);
24 if (pos == -1 || pos > i) {
25 return -1;
27 return offset;
31 return offset;
34 protected boolean isDynamic(PsiElement child) {
35 return child instanceof OuterLanguageElement;