diff --git a/build.gradle b/build.gradle
index 192a3401..79358795 100644
--- a/build.gradle
+++ b/build.gradle
@@ -41,7 +41,7 @@ intellij {
untilBuild pluginUntilBuild
}
- plugins 'git4idea'
+ plugins 'git4idea', 'hg4idea'
publishPlugin {
username publishUsername
diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml
index 417cc872..3d4a3ef2 100644
--- a/resources/META-INF/plugin.xml
+++ b/resources/META-INF/plugin.xml
@@ -109,6 +109,7 @@
com.intellij.modules.lang
Git4Idea
+ hg4idea
@@ -332,13 +333,7 @@
-
-
-
-
-
@@ -400,13 +395,7 @@
-
-
-
-
-
diff --git a/src/mobi/hsz/idea/gitignore/actions/IgnoreFileGroupAction.java b/src/mobi/hsz/idea/gitignore/actions/IgnoreFileGroupAction.java
index 3e3124e4..e8635247 100644
--- a/src/mobi/hsz/idea/gitignore/actions/IgnoreFileGroupAction.java
+++ b/src/mobi/hsz/idea/gitignore/actions/IgnoreFileGroupAction.java
@@ -35,6 +35,8 @@
import mobi.hsz.idea.gitignore.IgnoreBundle;
import mobi.hsz.idea.gitignore.file.type.IgnoreFileType;
import mobi.hsz.idea.gitignore.lang.IgnoreLanguage;
+import mobi.hsz.idea.gitignore.lang.kind.GitLanguage;
+import mobi.hsz.idea.gitignore.lang.kind.MercurialLanguage;
import mobi.hsz.idea.gitignore.util.CommonDataKeys;
import mobi.hsz.idea.gitignore.util.ExternalFileException;
import mobi.hsz.idea.gitignore.util.Utils;
@@ -115,6 +117,9 @@ public void update(@NotNull AnActionEvent e) {
baseDir = Utils.getModuleRootForFile(file, project);
for (IgnoreLanguage language : IgnoreBundle.LANGUAGES) {
+ //skip already bundled languages for ignore action
+ if (!(this instanceof UnignoreFileGroupAction) && (language instanceof GitLanguage || language instanceof MercurialLanguage)) continue;
+
final IgnoreFileType fileType = language.getFileType();
List list = Utils.getSuitableIgnoreFiles(project, fileType, file);
Collections.reverse(list);
diff --git a/src/mobi/hsz/idea/gitignore/file/IgnoreFileTypeFactory.java b/src/mobi/hsz/idea/gitignore/file/IgnoreFileTypeFactory.java
index 921ec3ed..8f500ca5 100644
--- a/src/mobi/hsz/idea/gitignore/file/IgnoreFileTypeFactory.java
+++ b/src/mobi/hsz/idea/gitignore/file/IgnoreFileTypeFactory.java
@@ -30,6 +30,8 @@
import mobi.hsz.idea.gitignore.IgnoreBundle;
import mobi.hsz.idea.gitignore.file.type.IgnoreFileType;
import mobi.hsz.idea.gitignore.lang.IgnoreLanguage;
+import mobi.hsz.idea.gitignore.lang.kind.GitLanguage;
+import mobi.hsz.idea.gitignore.lang.kind.MercurialLanguage;
import org.jetbrains.annotations.NotNull;
/**
@@ -48,6 +50,9 @@ public class IgnoreFileTypeFactory extends FileTypeFactory {
public void createFileTypes(@NotNull FileTypeConsumer consumer) {
consume(consumer, IgnoreFileType.INSTANCE);
for (final IgnoreLanguage language : IgnoreBundle.LANGUAGES) {
+ //skip already bundled languages
+ if (language instanceof GitLanguage || language instanceof MercurialLanguage) continue;
+
consume(consumer, language.getFileType());
}
}
diff --git a/src/mobi/hsz/idea/gitignore/outer/OuterIgnoreLoaderComponent.java b/src/mobi/hsz/idea/gitignore/outer/OuterIgnoreLoaderComponent.java
index e0beb386..d8b54633 100644
--- a/src/mobi/hsz/idea/gitignore/outer/OuterIgnoreLoaderComponent.java
+++ b/src/mobi/hsz/idea/gitignore/outer/OuterIgnoreLoaderComponent.java
@@ -27,19 +27,24 @@
import com.intellij.openapi.components.ProjectComponent;
import com.intellij.openapi.fileEditor.*;
import com.intellij.openapi.fileTypes.FileType;
+import com.intellij.openapi.fileTypes.FileTypeRegistry;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.messages.MessageBusConnection;
+import git4idea.ignore.lang.GitIgnoreFileType;
import mobi.hsz.idea.gitignore.file.type.IgnoreFileType;
import mobi.hsz.idea.gitignore.lang.IgnoreLanguage;
import mobi.hsz.idea.gitignore.lang.kind.GitExcludeLanguage;
import mobi.hsz.idea.gitignore.lang.kind.GitLanguage;
+import mobi.hsz.idea.gitignore.lang.kind.MercurialLanguage;
import mobi.hsz.idea.gitignore.settings.IgnoreSettings;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.zmlx.hg4idea.ignore.lang.HgIgnoreFileType;
import javax.swing.*;
import java.util.Collection;
@@ -122,11 +127,12 @@ public IgnoreEditorManagerListener(@NotNull final Project project) {
@Override
public void fileOpened(@NotNull final FileEditorManager source, @NotNull final VirtualFile file) {
final FileType fileType = file.getFileType();
- if (!(fileType instanceof IgnoreFileType) || !IgnoreSettings.getInstance().isOuterIgnoreRules()) {
+ if (!IgnoreSettings.getInstance().isOuterIgnoreRules()) {
return;
}
- final IgnoreLanguage language = ((IgnoreFileType) fileType).getIgnoreLanguage();
+ IgnoreLanguage language = determineIgnoreLanguage(file, fileType);
+ if (language == null) return;
DumbService.getInstance(project).runWhenSmart(() -> {
final List outerFiles =
@@ -162,6 +168,20 @@ public void fileOpened(@NotNull final FileEditorManager source, @NotNull final V
});
}
+ @Nullable
+ private IgnoreLanguage determineIgnoreLanguage(@NotNull VirtualFile file, FileType fileType) {
+ //if language provided by platform (e.g. GitLanguage) then map to language provided by plugin with extended functionality
+ FileTypeRegistry typeRegistry = FileTypeRegistry.getInstance();
+ if (typeRegistry.isFileOfType(file, GitIgnoreFileType.INSTANCE)) {
+ return GitLanguage.INSTANCE;
+ } else if (typeRegistry.isFileOfType(file, HgIgnoreFileType.INSTANCE)) {
+ return MercurialLanguage.INSTANCE;
+ } else if (fileType instanceof IgnoreFileType) {
+ return ((IgnoreFileType) fileType).getIgnoreLanguage();
+ }
+ return null;
+ }
+
@Override
public void fileClosed(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
}