Skip to content

Commit 65b92f9

Browse files
committed
chore: refactor Descriptor code
1 parent 71f66d9 commit 65b92f9

File tree

8 files changed

+46
-71
lines changed

8 files changed

+46
-71
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ intellij {
2525
}
2626

2727
group 'com.axellience'
28-
version '0.1.0'
28+
version '0.2.0'
2929

3030
repositories {
3131
mavenCentral()

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

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
package com.axellience.vuegwtplugin;
22

3+
import com.axellience.vuegwtplugin.codeinsight.tags.VueGWTElementDescriptor;
34
import com.axellience.vuegwtplugin.language.htmltemplate.HtmlTemplateLanguage;
4-
import com.axellience.vuegwtplugin.util.VueGWTComponentAnnotationUtil;
55
import com.axellience.vuegwtplugin.util.VueGWTPluginUtil;
66
import com.intellij.lang.ASTNode;
77
import com.intellij.openapi.util.TextRange;
8+
import com.intellij.psi.PsiElement;
89
import com.intellij.psi.PsiFile;
910
import com.intellij.psi.impl.source.xml.SchemaPrefix;
1011
import com.intellij.psi.impl.source.xml.TagNameReference;
1112
import com.intellij.psi.xml.XmlAttribute;
1213
import com.intellij.psi.xml.XmlDocument;
1314
import com.intellij.psi.xml.XmlTag;
1415
import com.intellij.xml.HtmlXmlExtension;
16+
import com.intellij.xml.XmlElementDescriptor;
1517
import org.jetbrains.annotations.NotNull;
1618
import org.jetbrains.annotations.Nullable;
1719

@@ -68,22 +70,23 @@ public String[][] getNamespacesFromDocument(XmlDocument parent, boolean declarat
6870
@Nullable
6971
@Override
7072
public TagNameReference createTagNameReference(ASTNode astNode, boolean b) {
71-
String tagName = astNode.getText(); // Tag name of the current element
73+
PsiElement psiElement = astNode.getTreeParent().getPsi();
74+
if (!(psiElement instanceof XmlTag)) {
75+
return super.createTagNameReference(astNode, b);
76+
}
77+
78+
XmlElementDescriptor descriptor = ((XmlTag) psiElement).getDescriptor();
79+
if (!(descriptor instanceof VueGWTElementDescriptor)) {
80+
return super.createTagNameReference(astNode, b);
81+
}
7282

73-
PsiFile templateFile = astNode.getTreeParent().getPsi().getContainingFile();
74-
return
75-
VueGWTPluginUtil
76-
.findJavaFromTemplate(templateFile)
77-
.flatMap(VueGWTComponentAnnotationUtil::getComponentAnnotationFromJavaFile)
78-
.flatMap(
79-
annotation -> VueGWTComponentAnnotationUtil
80-
.getImportedComponentTemplateFromAnnotationComponent(annotation, tagName)
81-
)
82-
.map(
83-
componentTemplate ->
84-
(TagNameReference) new VueGWTTagNameReference(astNode, componentTemplate, b)
85-
)
86-
.orElse(super.createTagNameReference(astNode, b));
83+
return ((VueGWTElementDescriptor) descriptor)
84+
.getHtmlTemplate()
85+
.map(
86+
componentTemplate ->
87+
(TagNameReference) new VueGWTTagNameReference(astNode, componentTemplate, b)
88+
)
89+
.orElse(super.createTagNameReference(astNode, b));
8790
}
8891

8992
@Override

src/main/java/com/axellience/vuegwtplugin/codeinsight/attributes/VueGWTAttributeProvider.java

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/main/java/com/axellience/vuegwtplugin/codeinsight/tags/VueGWTElementDescriptor.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.axellience.vuegwtplugin.util.VueGWTPluginUtil;
55
import com.intellij.psi.PsiClass;
66
import com.intellij.psi.PsiElement;
7+
import com.intellij.psi.PsiFile;
78
import com.intellij.psi.impl.source.html.dtd.HtmlNSDescriptorImpl;
89
import com.intellij.psi.impl.source.xml.XmlDescriptorUtil;
910
import com.intellij.psi.xml.XmlAttribute;
@@ -15,6 +16,7 @@
1516
import java.util.Arrays;
1617
import java.util.LinkedList;
1718
import java.util.List;
19+
import java.util.Optional;
1820
import java.util.stream.Collectors;
1921
import org.jetbrains.annotations.Nullable;
2022

@@ -56,12 +58,16 @@ public XmlAttributeDescriptor getAttributeDescriptor(XmlAttribute attribute) {
5658
return getAttributeDescriptor(attribute.getName(), attribute.getParent());
5759
}
5860

59-
public List<XmlAttributeDescriptor> getProps() {
61+
public List<VueGWTAttributeDescriptor> getProps() {
6062
return Arrays.stream(componentClass.getAllFields())
6163
.map(VueGWTAttributeDescriptor::new)
6264
.collect(Collectors.toList());
6365
}
6466

67+
public Optional<PsiFile> getHtmlTemplate() {
68+
return VueGWTPluginUtil.findHtmlTemplate(componentClass.getContainingFile());
69+
}
70+
6571
@Override
6672
public int getContentType() {
6773
return XmlElementDescriptor.CONTENT_TYPE_ANY;
@@ -93,7 +99,7 @@ public String getName(PsiElement context) {
9399
if (context instanceof XmlTag) {
94100
return ((XmlTag) context).getName();
95101
}
96-
;
102+
97103
return this.getName();
98104
}
99105

src/main/java/com/axellience/vuegwtplugin/codeinsight/tags/VueGWTTagProvider.java renamed to src/main/java/com/axellience/vuegwtplugin/codeinsight/tags/VueGWTElementDescriptorProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
import org.jetbrains.annotations.NotNull;
2222
import org.jetbrains.annotations.Nullable;
2323

24-
public class VueGWTTagProvider implements XmlElementDescriptorProvider, XmlTagNameProvider {
24+
public class VueGWTElementDescriptorProvider implements XmlElementDescriptorProvider,
25+
XmlTagNameProvider {
2526

2627
@Nullable
2728
@Override

src/main/java/com/axellience/vuegwtplugin/util/VueGWTComponentAnnotationUtil.java

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -43,21 +43,6 @@ public static Optional<PsiAnnotation> getComponentAnnotationFromPsiClass(
4343
return Optional.empty();
4444
}
4545

46-
public static Optional<PsiFile> getImportedComponentTemplateFromAnnotationComponent(
47-
PsiAnnotation componentAnnotation,
48-
String tagName) {
49-
50-
Set<PsiClassType> importedComponentsClassType = getImportedComponentsClassTypeFromComponentAnnotation(
51-
componentAnnotation);
52-
53-
return importedComponentsClassType.stream()
54-
.filter(psiClassType -> VueGWTPluginUtil.componentToTagName(psiClassType).equals(tagName))
55-
.findFirst()
56-
.map(PsiClassType::resolve)
57-
.map(PsiClass::getContainingFile)
58-
.flatMap(VueGWTPluginUtil::findHtmlTemplate);
59-
}
60-
6146
public static Optional<PsiClassType> getImportedComponentClassTypeFromComponentAnnotation(
6247
PsiAnnotation componentAnnotation,
6348
String tagName) {

src/main/java/com/axellience/vuegwtplugin/util/VueGWTPluginUtil.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -63,19 +63,6 @@ public static Optional<PsiJavaFile> findJavaFromTemplate(PsiFile templateFile) {
6363
return Optional.of((PsiJavaFile) file);
6464
}
6565

66-
public static Optional<PsiClass> getComponentClassFromFile(PsiJavaFile psiJavaFile) {
67-
for (PsiClass psiClass : psiJavaFile.getClasses()) {
68-
PsiAnnotation[] annotations = psiClass.getAnnotations();
69-
for (PsiAnnotation annotation : annotations) {
70-
if (COMPONENT_QUALIFIED_NAME.equals(annotation.getQualifiedName())) {
71-
return Optional.of(psiClass);
72-
}
73-
}
74-
}
75-
76-
return Optional.empty();
77-
}
78-
7966
public static String getTemplateNameFrom(PsiFile javaFile) {
8067
return javaFile.getName().replaceAll("(.*)\\.java", "$1.html");
8168
}

src/main/resources/META-INF/plugin.xml

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<idea-plugin>
22
<id>com.axellience.vuegwt</id>
33
<name>Vue GWT</name>
4-
<version>0.1.0</version>
4+
<version>0.2.0</version>
55
<vendor email="support@axellience.com" url="http://www.genmymodel.com">Axellience</vendor>
66

77
<description><![CDATA[
@@ -13,6 +13,7 @@
1313
<ul>
1414
<li>Run the Annotation Processor when a template or a component class is changed</li>
1515
<li>Allow navigation between components in the template</li>
16+
<li>Add @Prop names completion in templates and allow navigation to Java definition</li>
1617
<li>Allow 2-way navigation between the template and the Java class</li>
1718
<li>Allow one intention to create the template for a Vue Component class</li>
1819
<li>Add support for scoped SCSS in templates</li>
@@ -21,6 +22,16 @@
2122
]]></description>
2223

2324
<change-notes><![CDATA[
25+
<strong>v0.2.0</strong>
26+
<ul>
27+
<li>Change template recompiling handling to run the Java compiler instead of just touching the Java file</li>
28+
<li>Add support for @Prop completion in templates</li>
29+
<li>Add support for @Prop navigation in templates</li>
30+
<li>Suppress unknown property for @Prop in templates</li>
31+
<li>Add support for component name completion in templates based on imports</li>
32+
<li>Suppress self closing tag warning in templates</li>
33+
</ul>
34+
<br/>
2435
<strong>v0.1.0</strong>
2536
<p>To upgrade to this version it is recommended to disable IntelliJ auto compilation feature as it is not needed anymore</p>
2637
<ul>
@@ -74,8 +85,10 @@
7485

7586

7687
<xml.xmlExtension implementation="com.axellience.vuegwtplugin.VueGWTXmlExtension"/>
77-
<xml.tagNameProvider implementation="com.axellience.vuegwtplugin.codeinsight.tags.VueGWTTagProvider"/>
78-
<xml.elementDescriptorProvider implementation="com.axellience.vuegwtplugin.codeinsight.tags.VueGWTTagProvider"/>
88+
<xml.tagNameProvider
89+
implementation="com.axellience.vuegwtplugin.codeinsight.tags.VueGWTElementDescriptorProvider"/>
90+
<xml.elementDescriptorProvider
91+
implementation="com.axellience.vuegwtplugin.codeinsight.tags.VueGWTElementDescriptorProvider"/>
7992

8093
<fileTypeFactory
8194
implementation="com.axellience.vuegwtplugin.language.VueGWTFileTypeFactory"/>

0 commit comments

Comments
 (0)