Skip to content

Commit acedb1f

Browse files
committed
feature: make self closing tags supported in Vue GWT templates
1 parent 278dfbe commit acedb1f

File tree

1 file changed

+35
-13
lines changed

1 file changed

+35
-13
lines changed

src/main/java/com/axellience/vuegwtplugin/VueGWTXmlExtension.java

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,24 @@
2222
import com.intellij.psi.impl.source.xml.TagNameReference;
2323
import com.intellij.psi.xml.XmlAttribute;
2424
import com.intellij.psi.xml.XmlDocument;
25+
import com.intellij.psi.xml.XmlFile;
2526
import com.intellij.psi.xml.XmlTag;
2627
import com.intellij.xml.HtmlXmlExtension;
28+
import java.util.List;
2729
import java.util.Optional;
30+
import org.jetbrains.annotations.NotNull;
2831
import org.jetbrains.annotations.Nullable;
2932

3033
public class VueGWTXmlExtension extends HtmlXmlExtension {
3134

3235
@Override
3336
public boolean isAvailable(PsiFile psiFile) {
34-
return psiFile.getLanguage() == HtmlTemplateLanguage.INSTANCE;
37+
if (psiFile.getLanguage() != HtmlTemplateLanguage.INSTANCE) {
38+
return false;
39+
}
40+
41+
Optional<PsiJavaFile> optionalPsiJavaFile = getJavaFileForTemplate(psiFile);
42+
return optionalPsiJavaFile.isPresent();
3543
}
3644

3745
@Override
@@ -78,21 +86,12 @@ public String[][] getNamespacesFromDocument(XmlDocument parent, boolean declarat
7886
public TagNameReference createTagNameReference(ASTNode astNode, boolean b) {
7987
PsiFile templateFile = astNode.getTreeParent().getPsi().getContainingFile();
8088

81-
// Get the Java file for the template
82-
Optional<PsiFile> optionalJavaFile = VueGWTPluginUtil.findJavaFromTemplate(templateFile);
83-
if (!optionalJavaFile.isPresent()) {
89+
Optional<PsiJavaFile> optionalPsiJavaFile = getJavaFileForTemplate(templateFile);
90+
if (!optionalPsiJavaFile.isPresent()) {
8491
return super.createTagNameReference(astNode, b);
8592
}
8693

87-
// Find the project for the current file
88-
Project project = astNode.getPsi().getProject();
89-
PsiFile file = PsiManager.getInstance(project)
90-
.findFile(optionalJavaFile.get().getVirtualFile());
91-
if (!(file instanceof PsiJavaFile)) {
92-
return super.createTagNameReference(astNode, b);
93-
}
94-
95-
PsiJavaFile psiJavaFile = (PsiJavaFile) file;
94+
PsiJavaFile psiJavaFile = optionalPsiJavaFile.get();
9695
String tagName = astNode.getText(); // Tag name of the current element
9796

9897
return getComponentAnnotationFromJavaFile(psiJavaFile)
@@ -168,4 +167,27 @@ private Optional<PsiFile> getComponentTemplateForClassObjectAccess(
168167

169168
return findHtmlTemplate(componentClass.getContainingFile());
170169
}
170+
171+
@Override
172+
public boolean isSelfClosingTagAllowed(@NotNull XmlTag tag) {
173+
return true;
174+
}
175+
176+
private Optional<PsiJavaFile> getJavaFileForTemplate(PsiFile templateFile) {
177+
// Get the Java file for the template
178+
Optional<PsiFile> optionalJavaFile = VueGWTPluginUtil.findJavaFromTemplate(templateFile);
179+
if (!optionalJavaFile.isPresent()) {
180+
return Optional.empty();
181+
}
182+
183+
// Find the project for the current file
184+
Project project = templateFile.getProject();
185+
PsiFile file = PsiManager.getInstance(project)
186+
.findFile(optionalJavaFile.get().getVirtualFile());
187+
if (!(file instanceof PsiJavaFile)) {
188+
return Optional.empty();
189+
}
190+
191+
return Optional.of((PsiJavaFile) file);
192+
}
171193
}

0 commit comments

Comments
 (0)