Skip to content

Commit 278dfbe

Browse files
committed
Merge branch 'develop'
2 parents 2c7bdca + 6f75495 commit 278dfbe

27 files changed

+1023
-110
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ build
66
.gradle
77
.idea
88
*.iml
9+
gradle/
10+
gradlew
11+
gradlew.bat
912

1013
# IntelliJ
1114
out/

build.gradle

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,23 @@ buildscript {
88
}
99
mavenCentral()
1010
}
11-
dependencies {
12-
classpath "gradle.plugin.org.jetbrains:gradle-intellij-plugin:0.1.10"
13-
}
11+
}
12+
13+
plugins {
14+
id "org.jetbrains.intellij" version "0.3.11"
1415
}
1516

1617
apply plugin: 'org.jetbrains.intellij'
1718

18-
version = "IU-162.2228.15"
1919
intellij {
20-
version 'IU-162.2228.15'
20+
version 'IU-173.4674.33'
2121
pluginName 'vue-gwt-plugin'
2222
downloadSources false
2323
updateSinceUntilBuild false
2424
}
2525

2626
group 'com.axellience'
27-
version '0.0.2'
27+
version '0.1.0'
2828

2929
repositories {
3030
mavenCentral()
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.axellience.vuegwtplugin;
2+
3+
import java.lang.ref.Reference;
4+
import java.lang.ref.SoftReference;
5+
import java.util.ResourceBundle;
6+
7+
import org.jetbrains.annotations.NonNls;
8+
import org.jetbrains.annotations.NotNull;
9+
import org.jetbrains.annotations.PropertyKey;
10+
11+
import com.intellij.CommonBundle;
12+
13+
public class VueGWTBundle
14+
{
15+
@NonNls
16+
public static final String BUNDLE = "com.axellience.vuegwtplugin.VueGWTBundle";
17+
18+
private static Reference<ResourceBundle> vueGWTBundle;
19+
20+
private VueGWTBundle()
21+
{
22+
}
23+
24+
public static String message(@NotNull @PropertyKey(resourceBundle = BUNDLE) String key,
25+
@NotNull Object... params)
26+
{
27+
return CommonBundle.message(getBundle(), key, params);
28+
}
29+
30+
private static ResourceBundle getBundle()
31+
{
32+
ResourceBundle bundle = com.intellij.reference.SoftReference.dereference(vueGWTBundle);
33+
34+
if (bundle == null) {
35+
bundle = ResourceBundle.getBundle(BUNDLE);
36+
vueGWTBundle = new SoftReference<>(bundle);
37+
}
38+
39+
return bundle;
40+
}
41+
}

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

Lines changed: 64 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -13,64 +13,82 @@
1313
import com.intellij.psi.PsiDocumentManager;
1414
import com.intellij.psi.PsiFile;
1515
import org.jetbrains.annotations.NotNull;
16+
import org.jetbrains.annotations.Nullable;
1617

17-
public class VueGWTFileWatcher extends FileDocumentManagerAdapter
18-
{
19-
private static final Logger LOGGER = Logger.getInstance(VueGWTFileWatcher.class);
20-
private final Project project;
18+
public class VueGWTFileWatcher extends FileDocumentManagerAdapter {
2119

22-
VueGWTFileWatcher(Project project)
23-
{
24-
this.project = project;
20+
private static final Logger LOGGER = Logger.getInstance(VueGWTFileWatcher.class);
21+
private final Project project;
22+
23+
VueGWTFileWatcher(Project project) {
24+
this.project = project;
25+
}
26+
27+
@Override
28+
public void beforeDocumentSaving(@NotNull Document document) {
29+
PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(document);
30+
if (psiFile == null) {
31+
return;
2532
}
2633

27-
@Override
28-
public void beforeDocumentSaving(@NotNull Document document)
29-
{
30-
PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(document);
31-
if (psiFile == null)
32-
return;
34+
processFile(psiFile.getVirtualFile());
35+
}
36+
37+
private void processFile(VirtualFile changedFile) {
38+
if ("html".equals(changedFile.getExtension())) {
39+
processHtmlFile(changedFile);
40+
} else if ("java".equals(changedFile.getExtension())) {
41+
processJavaFile(changedFile);
42+
}
43+
}
3344

34-
processFile(psiFile.getVirtualFile());
45+
private void processHtmlFile(VirtualFile htmlFile) {
46+
VirtualFile javaFile = getSibling(htmlFile, htmlFile.getNameWithoutExtension() + ".java");
47+
if (javaFile == null) {
48+
return;
3549
}
3650

37-
private void processFile(VirtualFile changedFile)
38-
{
39-
if (!"html".equals(changedFile.getExtension()))
40-
return;
51+
ApplicationManager.getApplication().invokeLater(() -> compileComponent(javaFile, htmlFile));
52+
}
53+
54+
private void processJavaFile(VirtualFile javaFile) {
55+
VirtualFile htmlFile = getSibling(javaFile, javaFile.getNameWithoutExtension() + ".html");
56+
if (htmlFile == null)
57+
return;
4158

42-
String javaClassFileName = changedFile.getNameWithoutExtension() + ".java";
43-
VirtualFile parent = changedFile.getParent();
44-
if (parent == null)
45-
return;
59+
ApplicationManager.getApplication().invokeLater(() -> compileComponent(javaFile, htmlFile));
60+
}
4661

47-
VirtualFile javaFile = parent.findChild(javaClassFileName);
48-
if (javaFile == null)
49-
return;
62+
private void compileComponent(VirtualFile javaComponent, VirtualFile htmlTemplate) {
63+
try {
64+
ProjectFileIndex projectFileIndex =
65+
ProjectRootManager.getInstance(project).getFileIndex();
66+
final Module module = projectFileIndex.getModuleForFile(javaComponent);
67+
if (module == null) {
68+
return;
69+
}
5070

51-
ApplicationManager.getApplication().invokeLater(() -> compileComponent(javaFile, changedFile));
71+
CompilerManager compilerManager = CompilerManager.getInstance(project);
72+
if (!compilerManager.isCompilationActive()
73+
&& !compilerManager.isExcludedFromCompilation(javaComponent)) {
74+
compilerManager.compile(new VirtualFile[]{javaComponent, htmlTemplate}, null);
75+
}
76+
} catch (Exception e) {
77+
LOGGER.error(e.getMessage(), e);
5278
}
79+
}
5380

54-
private void compileComponent(VirtualFile javaComponent, VirtualFile htmlTemplate)
55-
{
56-
try
57-
{
58-
ProjectFileIndex projectFileIndex =
59-
ProjectRootManager.getInstance(project).getFileIndex();
60-
final Module module = projectFileIndex.getModuleForFile(javaComponent);
61-
if (module == null)
62-
return;
81+
@Nullable
82+
private VirtualFile getSibling(VirtualFile file, String siblingName) {
83+
VirtualFile parent = file.getParent();
84+
if (parent == null) {
85+
return null;
86+
}
6387

64-
CompilerManager compilerManager = CompilerManager.getInstance(project);
65-
if (!compilerManager.isCompilationActive()
66-
&& !compilerManager.isExcludedFromCompilation(javaComponent))
67-
{
68-
compilerManager.compile(new VirtualFile[] { javaComponent, htmlTemplate }, null);
69-
}
70-
}
71-
catch (Exception e)
72-
{
73-
LOGGER.error(e.getMessage(), e);
74-
}
88+
VirtualFile siblingFile = parent.findChild(siblingName);
89+
if (siblingFile == null) {
90+
return null;
7591
}
92+
return siblingFile;
93+
}
7694
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.axellience.vuegwtplugin;
2+
3+
import javax.swing.Icon;
4+
5+
import com.intellij.openapi.util.IconLoader;
6+
7+
public class VueGWTIcons
8+
{
9+
public static final Icon VUE = load("/icons/vue-gwt.png");
10+
11+
private static Icon load(String path)
12+
{
13+
return IconLoader.getIcon(path, VueGWTIcons.class);
14+
}
15+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.axellience.vuegwtplugin;
2+
3+
import com.intellij.lang.ASTNode;
4+
import com.intellij.psi.PsiElement;
5+
import com.intellij.psi.impl.source.xml.TagNameReference;
6+
7+
public class VueGWTTagNameReference extends TagNameReference
8+
{
9+
private final PsiElement componentTemplate;
10+
11+
public VueGWTTagNameReference(ASTNode nameElement, PsiElement componentTemplate,
12+
boolean startTagFlag)
13+
{
14+
super(nameElement, startTagFlag);
15+
this.componentTemplate = componentTemplate;
16+
}
17+
18+
@Override
19+
public PsiElement resolve()
20+
{
21+
return componentTemplate;
22+
}
23+
}

0 commit comments

Comments
 (0)