--- /dev/null
+package com.intellij.psi.impl.source.resolve.reference.impl;
+
+import com.intellij.openapi.util.TextRange;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiReference;
+import com.intellij.util.IncorrectOperationException;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * @author Sergey Evdokimov
+ */
+public class PsiDelegateReference implements PsiReference {
+
+ private final PsiReference myDelegate;
+
+ public PsiDelegateReference(@NotNull PsiReference delegate) {
+ myDelegate = delegate;
+ }
+
+ @Override
+ public PsiElement getElement() {
+ return myDelegate.getElement();
+ }
+
+ @Override
+ public TextRange getRangeInElement() {
+ return myDelegate.getRangeInElement();
+ }
+
+ @Nullable
+ @Override
+ public PsiElement resolve() {
+ return myDelegate.resolve();
+ }
+
+ @NotNull
+ @Override
+ public String getCanonicalText() {
+ return myDelegate.getCanonicalText();
+ }
+
+ @Override
+ public PsiElement handleElementRename(String newElementName) throws IncorrectOperationException {
+ return myDelegate.handleElementRename(newElementName);
+ }
+
+ @Override
+ public PsiElement bindToElement(@NotNull PsiElement element) throws IncorrectOperationException {
+ return myDelegate.bindToElement(element);
+ }
+
+ @Override
+ public boolean isReferenceTo(PsiElement element) {
+ return myDelegate.isReferenceTo(element);
+ }
+
+ @NotNull
+ @Override
+ public Object[] getVariants() {
+ return myDelegate.getVariants();
+ }
+
+ @Override
+ public boolean isSoft() {
+ return myDelegate.isSoft();
+ }
+}
--- /dev/null
+package com.intellij.psi.impl.source.resolve.reference.impl;
+
+import com.intellij.psi.PsiReference;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * @author Sergey Evdokimov
+ */
+public class PsiSoftReferenceDecorator extends PsiDelegateReference {
+
+ private final boolean mySoft;
+
+ public PsiSoftReferenceDecorator(@NotNull PsiReference delegate, boolean soft) {
+ super(delegate);
+ mySoft = soft;
+ }
+
+ @Override
+ public boolean isSoft() {
+ return mySoft;
+ }
+
+ public static PsiReference[] create(PsiReference[] refs, boolean soft) {
+ PsiReference[] res = new PsiReference[refs.length];
+
+ for (int i = 0; i < refs.length; i++) {
+ res[i] = new PsiSoftReferenceDecorator(refs[i], soft);
+ }
+
+ return res;
+ }
+}
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
-
-import java.io.IOException;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiFile;
public class MavenModelValidationTest extends MavenDomWithIndicesTestCase {
@Override
assertCompletionVariants(modulePom, "src", "module1", "pom.xml");
}
+ public void testRelativePathDefaultValue() throws Exception {
+ createProjectPom("<groupId>test</groupId>" +
+ "<artifactId>project</artifactId>" +
+ "<version>1</version>");
+
+ VirtualFile modulePom = createModulePom("module1",
+ "<groupId>test</groupId>" +
+ "<artifactId>module1</artifactId>" +
+ "<version>1</version>" +
+ "<parent>" +
+ "<relativePath>../pom.<caret>xml</relativePath>" +
+ "</parent>");
+
+ configTest(modulePom);
+ PsiElement elementAtCaret = myFixture.getElementAtCaret();
+
+ assertInstanceOf(elementAtCaret, PsiFile.class);
+ assertEquals(((PsiFile)elementAtCaret).getVirtualFile(), myProjectPom);
+ }
+
public void testUnderstandingProjectSchemaWithoutNamespace() throws Exception {
VfsUtil.saveText(myProjectPom,
"<project>" +
import com.intellij.codeInsight.daemon.impl.analysis.XmlHighlightVisitor;
import com.intellij.openapi.util.Key;
import com.intellij.psi.*;
+import com.intellij.psi.impl.source.resolve.reference.impl.PsiSoftReferenceDecorator;
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
-import com.intellij.psi.xml.*;
+import com.intellij.psi.xml.XmlAttribute;
+import com.intellij.psi.xml.XmlElement;
+import com.intellij.psi.xml.XmlTag;
+import com.intellij.psi.xml.XmlText;
import com.intellij.util.ArrayUtil;
import com.intellij.util.ProcessingContext;
import com.intellij.xml.impl.XmlEnumerationDescriptor;
enumerationDescriptor.isEnumerated((XmlElement)element) ||
unquotedValue.equals(enumerationDescriptor.getDefaultValue())) { // todo case insensitive
//noinspection unchecked
- return enumerationDescriptor.getValueReferences((XmlElement)element, unquotedValue);
+ //return enumerationDescriptor.getValueReferences((XmlElement)element, unquotedValue);
+ return PsiSoftReferenceDecorator.create(enumerationDescriptor.getValueReferences((XmlElement)element, unquotedValue), true);
}
}
return PsiReference.EMPTY_ARRAY;