Adjusting AttributeValue content of an Reference in XML

Answered

I'm trying to implement XML DOM converter, however it is not clear to me how I can modify the String value of an attribute value before and after the resolution happens.

 

I have an XML file called MyItem.xml that contains a reference to the file itself via the name AttributeValue. However the name should be without the xml extension.

<item name="MyItem"/>

 

I've created DOM model

@NameValue
@Convert(value = MyFileReferenceConverter.class)
GenericAttributeValue<XmlFile> getName();

and a custom converter that adds the necessary extension.

public class MyFileReferenceConverter extends PathReferenceConverter {

@Override
@NotNull
public PsiReference[] createReferences(final GenericDomValue genericDomValue, final PsiElement element, final ConvertContext context) {
String text = ((XmlAttributeValue) element).getValue() + ".xml";
FileReferenceSet referenceSet = new FileReferenceSet(text, element, 1, null, true);
return new PsiReference[]{referenceSet.getLastReference()};
}

}

 

This seems to work nicely, however when I rename the file to e.g. OtherItem.xml, the contents becomes

<item name="OtherItem.xml"/>

Is there a way to remove the suffix when the file is renamed?

 

I was also confused by the fact that the fromString/toString methods in PathReferenceConverter were never called by anyone, but maybe that's only when used directly from my own plugin?

0
1 comment

Create plain com.intellij.util.xml.CustomReferenceConverter returning above FileReferenceSet but with custom FileReference created via com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReferenceSet#createFileReference overriding FileReference#handleElementRename to strip extension

0

Please sign in to leave a comment.