diff --git a/.idea/misc.xml b/.idea/misc.xml
index bced92a..1f4201d 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/GravSupport.iml b/GravSupport.iml
index 13f939a..ff12d46 100644
--- a/GravSupport.iml
+++ b/GravSupport.iml
@@ -9,10 +9,9 @@
-
+
-
@@ -23,6 +22,7 @@
+
diff --git a/README.md b/README.md
index cee04b1..2b6c05a 100644
--- a/README.md
+++ b/README.md
@@ -6,16 +6,17 @@ within for IntelliJ Community / Ultimate Edition and PhpStorm
[Grav](https://getgrav.org/) is a flat-file CMS and it's open source.
Tested with:
-* PhpStorm 2018.3.*, 2019.1.1
-* IntelliJ IDEA Ultimate 2018.2.4, 2019.1.1
+* PhpStorm 2018.3.*, 2019.1.1, 2019.3.3
+* IntelliJ IDEA Ultimate 2018.2.4, 2019.1.1, 2019.3.3
* IntelliJ IDEA Community 2017.2.*
The plugin is also available in the [JetBrains Plugins Repository](https://plugins.jetbrains.com/plugin/9971-grav-support).
## Version
-This plugin supports the following Grav versions: 1.4.*, 1.5.*, 1.6.*, ...
+The latest plugin supports the following Grav versions: 1.6.*, ...
+Furthermore, I only provide support for PHP 7.*. If you have a lower version than the plugin may not work correctly.
## Install
diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml
index 37a5a6e..5fd415e 100644
--- a/resources/META-INF/plugin.xml
+++ b/resources/META-INF/plugin.xml
@@ -1,7 +1,7 @@
net.offbeatpioneer.intellij.plugins.gravsupport
Grav Support
- 0.4.2
+ 0.5.0
Dominik Grzelak
+ 0.5.0
+
+ - Internal Changes
+
+ - Plugin availability for IDEA 2019.3.*
+ - Revised codebase because of upcoming breaking changes in IDEA 2019.3.* and above
+
+
+
0.4.2
@@ -164,7 +174,7 @@
-
+
@@ -176,7 +186,7 @@
org.jetbrains.plugins.yaml
com.jetbrains.php
- com.jetbrains.twig
+ com.jetbrains.twig
org.intellij.plugins.markdown
@@ -184,19 +194,26 @@
-
-
+
+
+
+
+
+
+
+
+
-
-
- net.offbeatpioneer.intellij.plugins.grav.project.GravProjectComponent
-
-
-
+
+
+
+
+
@@ -239,9 +256,16 @@
+
+
+
-
+
+
@@ -265,10 +289,10 @@
-
-
-
-
+
+
+
+
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateNewThemeAction.java b/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateNewThemeAction.java
index c3f59d1..a706cff 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateNewThemeAction.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateNewThemeAction.java
@@ -97,7 +97,9 @@ private void createTheme(@NotNull Project project, Module module) {
"--name", themeData.getName(),
"--description", themeData.getDescription(),
"--developer", themeData.getDeveloper(),
- "--email", themeData.getEmail()};
+ "--email", themeData.getEmail(),
+ "--githubid", themeData.getGitHubId()
+ };
String srcPath = module.getProject().getBasePath();
if (Objects.isNull(srcPath)) {
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateThemeDialog.form b/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateThemeDialog.form
index 9ae7895..cdde000 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateThemeDialog.form
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateThemeDialog.form
@@ -8,7 +8,7 @@
-
+
@@ -80,6 +80,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateThemeDialog.java b/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateThemeDialog.java
index 38fa863..3b53fa0 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateThemeDialog.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/action/CreateThemeDialog.java
@@ -11,6 +11,7 @@ public class CreateThemeDialog extends JDialog implements CaretListener {
public JTextField textField2;
public JTextField textField3;
public JTextField textField4;
+ private JTextField textField5;
private NewThemeData themeData = new NewThemeData();
@@ -22,6 +23,7 @@ public CreateThemeDialog() {
textField2.addCaretListener(this);
textField3.addCaretListener(this);
textField4.addCaretListener(this);
+ textField5.addCaretListener(this);
}
public static void main(String[] args) {
@@ -45,6 +47,9 @@ public void caretUpdate(CaretEvent e) {
if (e.getSource() == textField4) {
themeData.setEmail(textField4.getText());
}
+ if (e.getSource() == textField4) {
+ themeData.setGitHubId(textField5.getText());
+ }
}
public NewThemeData getThemeData() {
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/action/CustomCreateFileFromTemplateDialog.java b/src/net/offbeatpioneer/intellij/plugins/grav/action/CustomCreateFileFromTemplateDialog.java
index 0b65ac6..b0c0d46 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/action/CustomCreateFileFromTemplateDialog.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/action/CustomCreateFileFromTemplateDialog.java
@@ -28,7 +28,7 @@
import com.intellij.psi.PsiElement;
import com.intellij.util.PlatformIcons;
import com.intellij.util.ui.JBUI;
-import net.offbeatpioneer.intellij.plugins.grav.files.GravConfigurationFileType;
+import net.offbeatpioneer.intellij.plugins.grav.files.AbstractGravFileType;
import net.offbeatpioneer.intellij.plugins.grav.files.GravFileTypes;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -105,7 +105,7 @@ protected CustomCreateFileFromTemplateDialog(@NotNull Project project) {
myKindCombo.getComboBox().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- for (GravConfigurationFileType each : GravFileTypes.CONFIGURATION_FILE_TYPES) {
+ for (AbstractGravFileType each : GravFileTypes.CONFIGURATION_FILE_TYPES) {
if (getKindCombo().getSelectedName().equalsIgnoreCase(each.getCorrespondingTemplateFile())) {
disableEnableFields(each.needsFilename());
if (!each.needsFilename()) {
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/action/CustomCreateFromTemplateAction.java b/src/net/offbeatpioneer/intellij/plugins/grav/action/CustomCreateFromTemplateAction.java
index 485d8ad..dd55213 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/action/CustomCreateFromTemplateAction.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/action/CustomCreateFromTemplateAction.java
@@ -10,7 +10,6 @@
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileEditor.FileEditorManager;
-import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.vfs.VirtualFile;
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/action/NewThemeData.java b/src/net/offbeatpioneer/intellij/plugins/grav/action/NewThemeData.java
index 8d86647..5b51822 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/action/NewThemeData.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/action/NewThemeData.java
@@ -8,16 +8,18 @@ public class NewThemeData {
private String developer;
private String description;
private String email;
+ private String githubId;
public NewThemeData() {
- this(null, "", "", "");
+ this(null, "", "", "", "");
}
- public NewThemeData(String name, String developer, String description, String email) {
+ public NewThemeData(String name, String developer, String description, String email, String githubId) {
this.name = name;
this.developer = developer;
this.description = description;
this.email = email;
+ this.githubId = githubId;
}
public String getName() {
@@ -51,4 +53,12 @@ public String getEmail() {
public void setEmail(String email) {
this.email = email;
}
+
+ public String getGitHubId() {
+ return githubId;
+ }
+
+ public void setGitHubId(String text) {
+ this.githubId = text;
+ }
}
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/assets/GravIcons.java b/src/net/offbeatpioneer/intellij/plugins/grav/assets/GravIcons.java
index 93b2b8d..fa5744b 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/assets/GravIcons.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/assets/GravIcons.java
@@ -5,6 +5,8 @@
import javax.swing.*;
/**
+ * Icons for various files in Grav or other purposes.
+ *
* @author Dominik Grzelak
*/
public class GravIcons {
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/editor/GravLanguageEditorProvider.java b/src/net/offbeatpioneer/intellij/plugins/grav/editor/GravLanguageEditorProvider.java
index 797cab8..326aae3 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/editor/GravLanguageEditorProvider.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/editor/GravLanguageEditorProvider.java
@@ -1,7 +1,6 @@
package net.offbeatpioneer.intellij.plugins.grav.editor;
import com.intellij.openapi.fileEditor.FileEditor;
-import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.FileEditorPolicy;
import com.intellij.openapi.fileEditor.FileEditorProvider;
import com.intellij.openapi.project.DumbAware;
@@ -12,11 +11,6 @@
import net.offbeatpioneer.intellij.plugins.grav.project.GravProjectComponent;
import org.jetbrains.annotations.NotNull;
-import java.util.Map;
-import java.util.Objects;
-import java.util.concurrent.ConcurrentHashMap;
-
-import static net.offbeatpioneer.intellij.plugins.grav.helper.GravYamlFiles.LangFileEditorType.LANGUAGE_FOLDER;
import static net.offbeatpioneer.intellij.plugins.grav.helper.GravYamlFiles.LangFileEditorType.NONE;
//TODO listen for file deletion and updates
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/files/GravConfigurationFileType.java b/src/net/offbeatpioneer/intellij/plugins/grav/files/AbstractGravFileType.java
similarity index 61%
rename from src/net/offbeatpioneer/intellij/plugins/grav/files/GravConfigurationFileType.java
rename to src/net/offbeatpioneer/intellij/plugins/grav/files/AbstractGravFileType.java
index fb11365..e0365cd 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/files/GravConfigurationFileType.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/files/AbstractGravFileType.java
@@ -1,26 +1,28 @@
package net.offbeatpioneer.intellij.plugins.grav.files;
-import com.intellij.lang.Language;
import com.intellij.openapi.fileTypes.LanguageFileType;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.yaml.YAMLLanguage;
/**
- * Base class for Gravs configuration files
- * Configuration files are in the yaml format.
+ * Base abstarct class for all Grav-specific files (i.e., mainly configuration files).
+ * Configuration files come mostly in the YAML format:
*
* - Blueprints for theme (yaml)
* - THEME.yaml
*
- * Created by Dome on 16.07.2017.
+ *
+ * @author Dominik Grzelak
+ * @since 16.07.2017.
*/
-public abstract class GravConfigurationFileType extends LanguageFileType {
-
- protected GravConfigurationFileType(@NotNull Language language) {
- super(language);
- }
+public abstract class AbstractGravFileType extends LanguageFileType {
public static final String DEFAULT_EXTENSION = "yaml";
+ protected AbstractGravFileType() {
+ super(YAMLLanguage.INSTANCE);
+ }
+
@NotNull
@Override
public String getDefaultExtension() {
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/files/GravConfigurationFileTypeFactory.java b/src/net/offbeatpioneer/intellij/plugins/grav/files/GravConfigurationFileTypeFactory.java
deleted file mode 100644
index 9ada63c..0000000
--- a/src/net/offbeatpioneer/intellij/plugins/grav/files/GravConfigurationFileTypeFactory.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package net.offbeatpioneer.intellij.plugins.grav.files;
-
-import com.intellij.openapi.fileTypes.FileTypeConsumer;
-import com.intellij.openapi.fileTypes.FileTypeFactory;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * Created by Dome on 16.07.2017.
- */
-public class GravConfigurationFileTypeFactory extends FileTypeFactory {
- @Override
- public void createFileTypes(@NotNull FileTypeConsumer consumer) {
- consumer.consume(ThemeBlueprintsFileType.INSTANCE);
- }
-}
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/files/GravFileTypes.java b/src/net/offbeatpioneer/intellij/plugins/grav/files/GravFileTypes.java
index 8276c0a..6dbe445 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/files/GravFileTypes.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/files/GravFileTypes.java
@@ -1,16 +1,19 @@
package net.offbeatpioneer.intellij.plugins.grav.files;
/**
- * Created by Dome on 16.07.2017.
+ * Enum-like class that provides all available file types if necessary.
+ *
+ * @author Dominik Grzelak
+ * @since 16.07.2017.
*/
public class GravFileTypes {
- public static GravConfigurationFileType[] CONFIGURATION_FILE_TYPES = new GravConfigurationFileType[]{
+ public static AbstractGravFileType[] CONFIGURATION_FILE_TYPES = new AbstractGravFileType[]{
new ThemeBlueprintsFileType(),
new ThemeConfigurationFileType()
};
public static void setModuleName(String moduleName) {
- ((ThemeConfigurationFileType)CONFIGURATION_FILE_TYPES[1]).setDefaultFileName(moduleName);
+ ((ThemeConfigurationFileType) CONFIGURATION_FILE_TYPES[1]).setDefaultFileName(moduleName);
}
}
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/files/ThemeBlueprintsFileType.java b/src/net/offbeatpioneer/intellij/plugins/grav/files/ThemeBlueprintsFileType.java
index 5019565..b72c223 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/files/ThemeBlueprintsFileType.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/files/ThemeBlueprintsFileType.java
@@ -4,24 +4,26 @@
import net.offbeatpioneer.intellij.plugins.grav.assets.GravIcons;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import org.jetbrains.yaml.YAMLLanguage;
import javax.swing.*;
/**
- * Created by Dome on 16.07.2017.
+ * Concrete implementation of Grav's theme blueprint configuration file.
+ *
+ * @author Dominik Grzelak
+ * @since 16.07.2017.
*/
-public class ThemeBlueprintsFileType extends GravConfigurationFileType {
+public class ThemeBlueprintsFileType extends AbstractGravFileType {
public static final LanguageFileType INSTANCE = new ThemeBlueprintsFileType();
public ThemeBlueprintsFileType() {
- super(YAMLLanguage.INSTANCE);
+ super();
}
@NotNull
@Override
public String getName() {
- return "blueprints";
+ return "Theme blueprints";
}
@NotNull
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/files/ThemeConfigurationFileType.java b/src/net/offbeatpioneer/intellij/plugins/grav/files/ThemeConfigurationFileType.java
index 4efd408..327668b 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/files/ThemeConfigurationFileType.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/files/ThemeConfigurationFileType.java
@@ -4,19 +4,21 @@
import net.offbeatpioneer.intellij.plugins.grav.assets.GravIcons;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import org.jetbrains.yaml.YAMLLanguage;
import javax.swing.*;
/**
- * Created by Dome on 16.07.2017.
+ * Concrete implementation of Grav's theme configuration file.
+ *
+ * @author Dominik Grzelak
+ * @since 16.07.2017.
*/
-public class ThemeConfigurationFileType extends GravConfigurationFileType {
+public class ThemeConfigurationFileType extends AbstractGravFileType {
public static final LanguageFileType INSTANCE = new ThemeConfigurationFileType();
private String defaultFileName;
public ThemeConfigurationFileType() {
- super(YAMLLanguage.INSTANCE);
+ super();
}
@NotNull
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/helper/GravFileTemplateUtil.java b/src/net/offbeatpioneer/intellij/plugins/grav/helper/GravFileTemplateUtil.java
index 1efbf31..980de6c 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/helper/GravFileTemplateUtil.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/helper/GravFileTemplateUtil.java
@@ -12,7 +12,7 @@
import com.intellij.util.SmartList;
import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.twig.TwigFile;
-import net.offbeatpioneer.intellij.plugins.grav.files.GravConfigurationFileType;
+import net.offbeatpioneer.intellij.plugins.grav.files.AbstractGravFileType;
import org.jetbrains.yaml.psi.YAMLFile;
import org.jetbrains.yaml.psi.YAMLKeyValue;
@@ -29,7 +29,7 @@ public static List getAvailableThemeConfigurationTemplates() {
return getApplicableTemplates(new Condition() {
@Override
public boolean value(FileTemplate fileTemplate) {
- return GravConfigurationFileType.DEFAULT_EXTENSION.equals(fileTemplate.getExtension());
+ return AbstractGravFileType.DEFAULT_EXTENSION.equals(fileTemplate.getExtension());
}
});
}
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/helper/IdeHelper.java b/src/net/offbeatpioneer/intellij/plugins/grav/helper/IdeHelper.java
index 75e0ab4..49c4d0b 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/helper/IdeHelper.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/helper/IdeHelper.java
@@ -8,6 +8,8 @@
import net.offbeatpioneer.intellij.plugins.grav.project.settings.GravProjectSettings;
import org.jetbrains.annotations.NotNull;
+import java.util.Objects;
+
/**
* @author Daniel Espendiller
* @author Dominik Grzelak
@@ -35,7 +37,7 @@ public static void notifyEnableMessage(@NotNull final Project project) {
}
private static void enablePluginAndConfigure(@NotNull Project project) {
- GravProjectSettings.getInstance(project).pluginEnabled = true;
+ Objects.requireNonNull(GravProjectSettings.getInstance(project)).pluginEnabled = true;
GravProjectConfigurable.enableGravToolWindow(project, true);
}
}
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/helper/ProcessUtils.java b/src/net/offbeatpioneer/intellij/plugins/grav/helper/ProcessUtils.java
index dbb9ba3..7003fa6 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/helper/ProcessUtils.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/helper/ProcessUtils.java
@@ -96,6 +96,9 @@ public Object[] execute() {
linesb.append(line).append("\n");
}
this.errorOutput = linesb.toString();
+ if (this.errorOutput.isEmpty()) {
+ this.errorOutput = "No error message was generated from Grav. Maybe the PHP installation is not correct";
+ }
}
} catch (Exception e) {
e.printStackTrace();
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/helper/StreamGobbler.java b/src/net/offbeatpioneer/intellij/plugins/grav/helper/StreamGobbler.java
index bf55bbb..3eedc30 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/helper/StreamGobbler.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/helper/StreamGobbler.java
@@ -1,32 +1,42 @@
package net.offbeatpioneer.intellij.plugins.grav.helper;
-import java.io.BufferedInputStream;
-import java.io.InputStream;
-import java.io.PrintStream;
+import java.io.*;
import java.util.Scanner;
//https://stackoverflow.com/questions/25878415/java-processbuilder-process-waiting-for-input
class StreamGobbler implements Runnable {
private PrintStream out;
- private Scanner inScanner;
+ // private Scanner inScanner;
+ BufferedReader reader;
private String name;
private StringBuilder builder = new StringBuilder("");
public StreamGobbler(String name, PrintStream out, InputStream inStream) {
this.name = name;
this.out = out;
- inScanner = new Scanner(new BufferedInputStream(inStream));
+// inScanner = new Scanner(new BufferedInputStream(inStream));
+ reader = new BufferedReader(new InputStreamReader(inStream));
}
@Override
public void run() {
- boolean entertemplate = false;
- while (inScanner.hasNextLine()) {
- String line = inScanner.nextLine();
- builder.append(line).append("\n");
-
- System.out.printf("%s: %s%n", name, line);
+ builder = new StringBuilder();
+ String line;
+ try {
+ while ((line = reader.readLine()) != null) {
+ builder.append(line);
+ builder.append(System.getProperty("line.separator"));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
}
+// boolean entertemplate = false;
+// while (inScanner.hasNextLine()) {
+// String line = inScanner.nextLine();
+// builder.append(line).append("\n");
+//
+// System.out.printf("%s: %s%n", name, line);
+// }
}
public String getOutput() {
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/module/php/GravInstallerGeneratorPeer.java b/src/net/offbeatpioneer/intellij/plugins/grav/module/php/GravInstallerGeneratorPeer.java
index a2c7720..7e71ed6 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/module/php/GravInstallerGeneratorPeer.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/module/php/GravInstallerGeneratorPeer.java
@@ -19,7 +19,7 @@
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
-import java.io.File;
+import java.io.*;
import static net.offbeatpioneer.intellij.plugins.grav.module.wizard.CreateGravProjectWizardStep.LAST_USED_GRAV_HOME;
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/module/wizard/CreateGravProjectWizardGUI.java b/src/net/offbeatpioneer/intellij/plugins/grav/module/wizard/CreateGravProjectWizardGUI.java
index 6748bf6..385afee 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/module/wizard/CreateGravProjectWizardGUI.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/module/wizard/CreateGravProjectWizardGUI.java
@@ -8,12 +8,14 @@
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.fileChooser.*;
import com.intellij.openapi.progress.EmptyProgressIndicator;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.ComboBox;
+import com.intellij.openapi.util.ThrowableComputable;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.platform.templates.github.DownloadUtil;
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/project/GravProjectComponent.java b/src/net/offbeatpioneer/intellij/plugins/grav/project/GravProjectComponent.java
index cdff885..774af9e 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/project/GravProjectComponent.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/project/GravProjectComponent.java
@@ -1,64 +1,17 @@
package net.offbeatpioneer.intellij.plugins.grav.project;
-import com.intellij.openapi.components.ProjectComponent;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
-import com.intellij.openapi.vfs.VfsUtil;
-import com.intellij.openapi.vfs.VirtualFile;
-import net.offbeatpioneer.intellij.plugins.grav.helper.IdeHelper;
-import net.offbeatpioneer.intellij.plugins.grav.module.GravSdkType;
import net.offbeatpioneer.intellij.plugins.grav.project.settings.GravProjectSettings;
-import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import org.jetbrains.annotations.SystemIndependent;
-
-import java.nio.file.Paths;
/**
- * Project component gets instantiated for every GRAV project created
+ * Project component
*
* @author Dominik Grzelak
*/
-public class GravProjectComponent implements ProjectComponent {
- final private static Logger LOG = Logger.getInstance("Grav-Plugin");
- private GravProjectSettings settings;
- private Project project;
-
- public GravProjectComponent(Project project) {
- this.project = project;
- }
-
-
- @Override
- public void projectOpened() {
- notifyPluginEnableDialog();
- }
-
- @Override
- public void projectClosed() {
- }
-
- @Override
- public void initComponent() {
- settings = GravProjectSettings.getInstance(project);
- if (settings != null) {
- @SystemIndependent String basePath = project.getBasePath();
- settings.withSrcDirectory = false;
- if (basePath != null) {
- VirtualFile file = VfsUtil.findFile(Paths.get(project.getBasePath(), "src"), true);
- if (file != null) {
- settings.withSrcDirectory = true;
- }
- }
- }
- }
-
- @Override
- public void disposeComponent() {
-
- }
-
+public class GravProjectComponent {
public static boolean isEnabled(Project project) {
if (project == null) return false;
GravProjectSettings settings = GravProjectSettings.getInstance(project);
@@ -82,25 +35,4 @@ public static Project getEnabledProject() {
return null;
}
- @NotNull
- @Override
- public String getComponentName() {
- return "GravProjectComponent";
- }
-
- private void notifyPluginEnableDialog() {
- // Enable Project dialog
- VirtualFile vf = project.getBaseDir();
- if (!settings.pluginEnabled && !settings.dismissEnableNotification) {
- //is a src directory present?
- if (settings.withSrcDirectory && vf.findChild("src") != null) {
- vf = vf.findChild("src");
- if (vf != null && !GravSdkType.isValidGravSDK(vf)) vf = project.getBaseDir();
- }
-// vf = settings.withSrcDirectory && vf.findChild("src") == null ? vf : vf.findChild("src");
- if (vf != null && GravSdkType.isValidGravSDK(vf)) { //grav module found
- IdeHelper.notifyEnableMessage(project);
- }
- }
- }
}
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/project/GravProjectListener.java b/src/net/offbeatpioneer/intellij/plugins/grav/project/GravProjectListener.java
new file mode 100644
index 0000000..c2cb8e5
--- /dev/null
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/project/GravProjectListener.java
@@ -0,0 +1,70 @@
+package net.offbeatpioneer.intellij.plugins.grav.project;
+
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.project.impl.ProjectLifecycleListener;
+import com.intellij.openapi.vfs.VfsUtil;
+import com.intellij.openapi.vfs.VirtualFile;
+import net.offbeatpioneer.intellij.plugins.grav.helper.IdeHelper;
+import net.offbeatpioneer.intellij.plugins.grav.module.GravSdkType;
+import net.offbeatpioneer.intellij.plugins.grav.project.settings.GravProjectSettings;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.SystemIndependent;
+
+import java.nio.file.Paths;
+
+public class GravProjectListener implements ProjectLifecycleListener {
+
+ public GravProjectListener() {
+ }
+
+ @Override
+ public void beforeProjectLoaded(@NotNull Project project) {
+ System.out.println(project);
+ }
+
+ @Override
+ public void afterProjectClosed(@NotNull Project project) {
+ System.out.println(project);
+ }
+
+ @Override
+ public void postStartupActivitiesPassed(@NotNull Project project) {
+ initComponent(project);
+ notifyPluginEnableDialog(project);
+ }
+
+ @Override
+ public void projectComponentsInitialized(@NotNull Project project) {
+ }
+
+ public void initComponent(Project project) {
+ GravProjectSettings settings = GravProjectSettings.getInstance(project);
+ if (settings != null) {
+ @SystemIndependent String basePath = project.getBasePath();
+ settings.withSrcDirectory = false;
+ if (basePath != null) {
+ VirtualFile file = VfsUtil.findFile(Paths.get(project.getBasePath(), "src"), true);
+ if (file != null) {
+ settings.withSrcDirectory = true;
+ }
+ }
+ }
+ }
+
+ private void notifyPluginEnableDialog(Project project) {
+ GravProjectSettings settings = GravProjectSettings.getInstance(project);
+ // Enable Project dialog
+ VirtualFile vf = project.getBaseDir();
+ if (!settings.pluginEnabled && !settings.dismissEnableNotification) {
+ //is a src directory present?
+ if (settings.withSrcDirectory && vf.findChild("src") != null) {
+ vf = vf.findChild("src");
+ if (vf != null && !GravSdkType.isValidGravSDK(vf)) vf = project.getBaseDir();
+ }
+// vf = settings.withSrcDirectory && vf.findChild("src") == null ? vf : vf.findChild("src");
+ if (vf != null && GravSdkType.isValidGravSDK(vf)) { //grav module found
+ IdeHelper.notifyEnableMessage(project);
+ }
+ }
+ }
+}
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/project/settings/GravProjectSettings.java b/src/net/offbeatpioneer/intellij/plugins/grav/project/settings/GravProjectSettings.java
index a1e5355..cb07fd5 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/project/settings/GravProjectSettings.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/project/settings/GravProjectSettings.java
@@ -1,9 +1,11 @@
package net.offbeatpioneer.intellij.plugins.grav.project.settings;
-import com.intellij.openapi.components.*;
+import com.intellij.openapi.components.PersistentStateComponent;
+import com.intellij.openapi.components.ServiceManager;
+import com.intellij.openapi.components.State;
+import com.intellij.openapi.components.Storage;
import com.intellij.openapi.project.Project;
import com.intellij.util.xmlb.XmlSerializerUtil;
-import net.offbeatpioneer.intellij.plugins.grav.storage.GravPersistentStateComponent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/net/offbeatpioneer/intellij/plugins/grav/toolwindow/SystemSettingsToolWindowFactory.java b/src/net/offbeatpioneer/intellij/plugins/grav/toolwindow/SystemSettingsToolWindowFactory.java
index 65d82ac..68e0aac 100644
--- a/src/net/offbeatpioneer/intellij/plugins/grav/toolwindow/SystemSettingsToolWindowFactory.java
+++ b/src/net/offbeatpioneer/intellij/plugins/grav/toolwindow/SystemSettingsToolWindowFactory.java
@@ -12,10 +12,7 @@
import com.intellij.ui.content.Content;
import com.intellij.ui.content.ContentFactory;
import com.intellij.util.ThrowableRunnable;
-import net.offbeatpioneer.intellij.plugins.grav.helper.GravYAMLUtils;
-import net.offbeatpioneer.intellij.plugins.grav.helper.NotificationHelper;
-import net.offbeatpioneer.intellij.plugins.grav.helper.ProjectChecker;
-import net.offbeatpioneer.intellij.plugins.grav.helper.Triple;
+import net.offbeatpioneer.intellij.plugins.grav.helper.*;
import net.offbeatpioneer.intellij.plugins.grav.project.GravProjectComponent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.yaml.YAMLElementGenerator;