blob: 26f18d257c2b84589b095415e2f0e8df9922cdf8 [file] [log] [blame]
/*
* Copyright 2005 Sascha Weinreuter
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.intellij.lang.xpath.xslt.impl.references;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
import com.intellij.psi.xml.XmlAttribute;
import com.intellij.psi.xml.XmlAttributeValue;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.NotNull;
class SelfReference implements PsiReference {
private final XmlAttributeValue myValue;
private final PsiElement myTarget;
private final int myStartOffset;
public SelfReference(XmlAttribute element, PsiElement target, int startOffset) {
myTarget = target;
myValue = element.getValueElement();
myStartOffset = startOffset;
}
SelfReference(XmlAttribute element, PsiElement target) {
this(element, target, 0);
}
public PsiElement getElement() {
return myValue;
}
public TextRange getRangeInElement() {
return TextRange.from(1 + myStartOffset, myValue.getTextLength() - (2 + myStartOffset));
}
@Nullable
public PsiElement resolve() {
return myValue.isValid() ? myTarget : null;
}
@NotNull
public String getCanonicalText() {
return myValue.getText();
}
public PsiElement handleElementRename(String newElementName) throws IncorrectOperationException {
return myValue;
}
public PsiElement bindToElement(@NotNull PsiElement element) throws IncorrectOperationException {
return myValue;
}
public boolean isReferenceTo(PsiElement element) {
return false;
}
@NotNull
public Object[] getVariants() {
return ArrayUtil.EMPTY_OBJECT_ARRAY;
}
public boolean isSoft() {
return false;
}
public static SelfReference create(XmlAttribute element, PsiElement target) {
if (element.getValue().contains(":")) {
return new SelfReference(element, target, element.getValue().indexOf(':') + 1);
}
return new SelfReference(element, target);
}
}