Merge remote-tracking branch 'origin/master' clion/140.2434
authorRoman Shevchenko <roman.shevchenko@jetbrains.com>
Thu, 12 Feb 2015 15:01:51 +0000 (16:01 +0100)
committerRoman Shevchenko <roman.shevchenko@jetbrains.com>
Thu, 12 Feb 2015 15:01:51 +0000 (16:01 +0100)
56 files changed:
java/debugger/impl/src/com/intellij/debugger/ui/tree/render/TimestampRenderer.java [new file with mode: 0644]
java/java-tests/testSrc/com/intellij/codeInsight/MultipleModuleHighlightingTest.groovy [new file with mode: 0644]
java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java
jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java
platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/ProgressableTextEditorHighlightingPass.java
platform/built-in-server/src/org/jetbrains/ide/DiffHttpService.java
platform/core-impl/src/com/intellij/ide/plugins/IdeaPluginDescriptorImpl.java
platform/core-impl/src/com/intellij/ide/plugins/PluginManagerCore.java
platform/core-impl/src/com/intellij/openapi/components/impl/ComponentManagerImpl.java
platform/core-impl/src/com/intellij/openapi/progress/impl/CoreProgressManager.java
platform/diff-api/src/com/intellij/diff/requests/ContentDiffRequest.java
platform/diff-api/src/com/intellij/diff/requests/SimpleDiffRequest.java
platform/diff-impl/src/com/intellij/diff/actions/BaseShowDiffAction.java
platform/diff-impl/src/com/intellij/diff/actions/CompareFileWithEditorAction.java
platform/diff-impl/src/com/intellij/diff/actions/impl/ShowOldDiffAction.java
platform/diff-impl/src/com/intellij/diff/impl/DiffRequestProcessor.java
platform/diff-impl/src/com/intellij/diff/tools/binary/BinaryDiffViewer.java
platform/diff-impl/src/com/intellij/diff/tools/dir/DifDiffViewer.java
platform/diff-impl/src/com/intellij/diff/tools/external/ExternalDiffTool.java
platform/diff-impl/src/com/intellij/diff/tools/external/ExternalDiffToolUtil.java
platform/diff-impl/src/com/intellij/diff/tools/fragmented/OnesideDiffViewer.java
platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleDiffChange.java
platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleDiffViewer.java
platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffViewer.java
platform/diff-impl/src/com/intellij/diff/tools/util/FoldingModelSupport.java
platform/diff-impl/src/com/intellij/diff/tools/util/base/TextDiffViewerBase.java
platform/diff-impl/src/com/intellij/diff/tools/util/threeside/ThreesideTextDiffViewer.java
platform/diff-impl/src/com/intellij/diff/tools/util/twoside/TwosideTextDiffViewer.java
platform/diff-impl/src/com/intellij/diff/util/DiffUtil.java
platform/dvcs-impl/src/META-INF/dvcs.xml
platform/extensions/src/com/intellij/openapi/extensions/PluginId.java
platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ExternalToolPass.java
platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/WolfHighlightingPass.java
platform/lang-impl/src/com/intellij/codeInsight/problems/WolfTheProblemSolverImpl.java
platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java
platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java
platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldingModelImpl.java
platform/platform-resources/src/META-INF/LangExtensions.xml
platform/platform-resources/src/META-INF/PlatformExtensions.xml
platform/platform-resources/src/idea/VcsActions.xml
platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateCurrentRevisionAction.java
platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotatePreviousRevisionAction.java
platform/vcs-impl/src/com/intellij/openapi/vcs/actions/AnnotateRevisionAction.java
platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/diff/ChangeDiffRequestProducer.java
platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/migrate/MigrateToNewDiffUtil.java
platform/vcs-impl/src/com/intellij/openapi/vcs/ex/RollbackLineStatusAction.java
platform/vcs-log/impl/src/META-INF/vcs-log.xml
plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/META-INF/InspectionGadgets.xml
plugins/maven/maven32-server-impl/src/org/jetbrains/idea/maven/server/Maven32ServerEmbedderImpl.java
plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java
plugins/svn4idea/src/org/jetbrains/idea/svn/difftool/SvnDiffViewer.java
plugins/svn4idea/src/org/jetbrains/idea/svn/difftool/properties/SvnPropertiesDiffRequest.java
plugins/svn4idea/src/org/jetbrains/idea/svn/difftool/properties/SvnPropertiesDiffViewer.java
resources/src/META-INF/IdeaPlugin.xml
xml/dom-impl/src/com/intellij/util/xml/ui/DomUIFactoryImpl.java
xml/impl/src/com/intellij/codeInsight/editorActions/XmlTagNameSynchronizer.java

diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/TimestampRenderer.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/TimestampRenderer.java
new file mode 100644 (file)
index 0000000..729ac01
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2000-2015 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.debugger.ui.tree.render;
+
+import com.intellij.debugger.DebuggerContext;
+import com.intellij.debugger.engine.evaluation.EvaluateException;
+import com.intellij.debugger.engine.evaluation.EvaluationContext;
+import com.intellij.debugger.ui.tree.DebuggerTreeNode;
+import com.intellij.debugger.ui.tree.NodeDescriptor;
+import com.intellij.debugger.ui.tree.ValueDescriptor;
+import com.intellij.psi.PsiExpression;
+import com.sun.jdi.*;
+
+import java.sql.Timestamp;
+
+/**
+ * @author egor
+ */
+public class TimestampRenderer extends NodeRendererImpl {
+  @Override
+  public String calcLabel(ValueDescriptor descriptor, EvaluationContext evaluationContext, DescriptorLabelListener listener)
+    throws EvaluateException {
+    Value value = descriptor.getValue();
+    if (value == null) {
+      return "null";
+    }
+    else if (value instanceof LongValue) {
+      return new Timestamp(((LongValue)value).longValue()).toString();
+    }
+    return null;
+  }
+
+  @Override
+  public void buildChildren(Value value, ChildrenBuilder builder, EvaluationContext evaluationContext) {}
+
+  @Override
+  public PsiExpression getChildValueExpression(DebuggerTreeNode node, DebuggerContext context) throws EvaluateException {
+    return null;
+  }
+
+  @Override
+  public boolean isExpandable(Value value, EvaluationContext evaluationContext, NodeDescriptor parentDescriptor) {
+    return false;
+  }
+
+  @Override
+  public String getName() {
+    return "Timestamp";
+  }
+
+  @Override
+  public String getUniqueId() {
+    return "TimestampRenderer";
+  }
+
+  @Override
+  public boolean isApplicable(Type t) {
+    return t instanceof LongType;
+  }
+}
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/MultipleModuleHighlightingTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/MultipleModuleHighlightingTest.groovy
new file mode 100644 (file)
index 0000000..05a14ef
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2000-2015 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.codeInsight
+
+import com.intellij.idea.Bombed
+import com.intellij.openapi.module.JavaModuleType
+import com.intellij.openapi.roots.ModuleRootModificationUtil
+import com.intellij.testFramework.PsiTestUtil
+import com.intellij.testFramework.fixtures.JavaCodeInsightFixtureTestCase
+/**
+ * @author peter
+ */
+class MultipleModuleHighlightingTest extends JavaCodeInsightFixtureTestCase {
+
+  @Bombed(day = 1, month = Calendar.MARCH)
+  public void "test use original place classpath for reference type resolving"() {
+    addTwoModules()
+
+    myFixture.addFileToProject "mod1/Class2.java", '''
+public class Class2 {
+  public void m1() {}
+  public void m2() {}
+}
+'''
+
+    myFixture.addFileToProject "mod2/Class2.java", '''
+public class Class2 {
+  public void m1() {}
+}
+'''
+    myFixture.addFileToProject "mod2/Class1.java", '''
+public class Class1 {
+  public Class2 getClass2() {}
+  public Class2 class2Field;
+}
+'''
+
+    myFixture.configureFromExistingVirtualFile(myFixture.addClass("""
+class Class3 {
+  {
+    new Class1().getClass2().m2();
+    new Class1().class2Field.m2();
+  }
+}
+
+""").containingFile.virtualFile)
+    myFixture.checkHighlighting()
+  }
+
+  @Bombed(day = 1, month = Calendar.MARCH)
+  public void "test use original place classpath for new expression type resolving"() {
+    addTwoModules()
+
+    myFixture.addFileToProject "mod1/A.java", '''
+public class A {
+  public void m1();
+}
+'''
+
+    myFixture.addFileToProject "mod2/A.java", '''
+public class A {
+  public void m2() {}
+}
+'''
+    myFixture.addFileToProject "mod2/B.java", '''
+public class B extends A {
+}
+'''
+
+    myFixture.configureFromExistingVirtualFile(myFixture.addClass("""
+class Class3 {
+  {
+    new B().m1();
+    new B().<error descr="Cannot resolve method 'm2()'">m2</error>();
+  }
+}
+
+""").containingFile.virtualFile)
+    myFixture.checkHighlighting()
+  }
+
+  private void addTwoModules() {
+    def mod1 = PsiTestUtil.addModule(project, JavaModuleType.moduleType, "mod1", myFixture.tempDirFixture.findOrCreateDir("mod1"))
+    def mod2 = PsiTestUtil.addModule(project, JavaModuleType.moduleType, "mod2", myFixture.tempDirFixture.findOrCreateDir("mod2"))
+    ModuleRootModificationUtil.addDependency(myModule, mod1)
+    ModuleRootModificationUtil.addDependency(myModule, mod2)
+  }
+}
index 87677f08bf2a58ed91cdc0420d22a9be9e242d38..ac8bb477b0278e26771fcc15bf47da333cb0863d 100644 (file)
@@ -22,6 +22,7 @@ import com.intellij.codeInspection.unusedImport.UnusedImportLocalInspection;
 import com.intellij.openapi.projectRoots.JavaSdkVersion;
 import com.intellij.openapi.projectRoots.Sdk;
 import com.intellij.openapi.roots.LanguageLevelProjectExtension;
+import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.pom.java.LanguageLevel;
 import com.intellij.psi.PsiClass;
 import com.intellij.psi.search.GlobalSearchScope;
@@ -459,7 +460,7 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase {
     assertNotNull(collectionsClass);
     collectionsClass = (PsiClass)collectionsClass.getNavigationElement();
     final String text = collectionsClass.getContainingFile().getText();
-    configureFromFileText("Collections.java", text.replaceAll("\r", "\n"));
+    configureFromFileText("Collections.java", StringUtil.convertLineSeparators(StringUtil.replace(text, "package java.util;", "package java.utilx; import java.util.*;")));
     doTestConfiguredFile(false, false, null);
   }
 }
index 06aed829f3da2ddbabaa266bbeac1ad5addc7692..c519d2f443528cb0e81b92b8f04778fe7a565566 100644 (file)
@@ -586,6 +586,9 @@ public class IncProjectBuilder {
     }
 
     context.processMessage(new ProgressMessage("Cleaning output directories..."));
+
+    final long cleanStart = System.currentTimeMillis();
+
     if (SYNC_DELETE) {
       for (File file : filesToDelete) {
         FileUtil.delete(file);
@@ -594,6 +597,8 @@ public class IncProjectBuilder {
     else {
       myAsyncTasks.add(FileUtil.asyncDelete(filesToDelete));
     }
+
+    LOG.info("Cleaned output directories in " + (System.currentTimeMillis() - cleanStart));
   }
 
   private static void clearOutputFilesUninterruptibly(CompileContext context, BuildTarget<?> target) {
index 20298a6186260e4c5c780641e9eaf07347dc60d4..2268a15959b91c2997e6898b415fbac43f3e3b41 100644 (file)
@@ -117,6 +117,7 @@ public abstract class ProgressableTextEditorHighlightingPass extends TextEditorH
     applyInformationWithProgress();
     DaemonCodeAnalyzerEx daemonCodeAnalyzer = DaemonCodeAnalyzerEx.getInstanceEx(myProject);
     daemonCodeAnalyzer.getFileStatusMap().markFileUpToDate(myDocument, getId());
+    myHighlightInfoProcessor.progressIsAdvanced(myHighlightingSession, 1);  //causes traffic light repaint
   }
 
   protected abstract void applyInformationWithProgress();
index b91a5575c2de64e34f1d0d7c597a1e59681c687b..29cbdea71a749dca0780e5e27dfa998edfc9967a 100644 (file)
@@ -120,8 +120,7 @@ final class DiffHttpService extends RestService {
       @Override
       public void run() {
         DiffManager.getInstance().showDiff(finalProject, new SimpleDiffRequest(StringUtil.notNullize(finalWindowTitle, "Diff Service"),
-                                                                               contents.toArray(new DiffContent[contents.size()]),
-                                                                               ArrayUtil.toStringArray(titles)));
+                                                                               contents, titles));
         if (finalFocused) {
           ProjectUtil.focusProjectWindow(finalProject, true);
         }
index 9c4d5b780d463ad396ccc21bb296e2053416fcfb..685025ba3fc2d56ba862e4b8bbd9d60ab42e5328 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2014 JetBrains s.r.o.
+ * Copyright 2000-2015 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -591,7 +591,7 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
     return CommonBundle.messageOrDefault(bundle, createDescriptionKey(myId), myDescriptionChildText == null ? "" : myDescriptionChildText);
   }
 
-  public void insertDependency(final IdeaPluginDescriptor d) {
+  public void insertDependency(@NotNull IdeaPluginDescriptor d) {
     PluginId[] deps = new PluginId[getDependentPluginIds().length + 1];
     deps[0] = d.getPluginId();
     System.arraycopy(myDependencies, 0, deps, 1, deps.length - 1);
index e2711874aff74037cf9748c6a0c65d6f63ef65c3..ca84eb383b6948d03048652426f1ae4f02fffa08 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2014 JetBrains s.r.o.
+ * Copyright 2000-2015 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -41,6 +41,7 @@ import com.intellij.util.xmlb.XmlSerializationException;
 import gnu.trove.THashMap;
 import gnu.trove.THashSet;
 import gnu.trove.TIntProcedure;
+import gnu.trove.TObjectIntHashMap;
 import org.jdom.Document;
 import org.jetbrains.annotations.NonNls;
 import org.jetbrains.annotations.NotNull;
@@ -58,21 +59,21 @@ import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
 public class PluginManagerCore {
-  @NonNls public static final String DISABLED_PLUGINS_FILENAME = "disabled_plugins.txt";
+  @NonNls private static final String DISABLED_PLUGINS_FILENAME = "disabled_plugins.txt";
   @NonNls public static final String CORE_PLUGIN_ID = "com.intellij";
-  @NonNls public static final String META_INF = "META-INF";
+  @NonNls private static final String META_INF = "META-INF";
   @NonNls public static final String PLUGIN_XML = "plugin.xml";
-  public static final float PLUGINS_PROGRESS_MAX_VALUE = 0.3f;
-  private static final Map<PluginId,Integer> ourId2Index = new THashMap<PluginId, Integer>();
+  private static final float PLUGINS_PROGRESS_MAX_VALUE = 0.3f;
+  private static final TObjectIntHashMap<PluginId> ourId2Index = new TObjectIntHashMap<PluginId>();
   @NonNls static final String MODULE_DEPENDENCY_PREFIX = "com.intellij.module";
   private static final Map<String, IdeaPluginDescriptorImpl> ourModulesToContainingPlugins = new THashMap<String, IdeaPluginDescriptorImpl>();
   private static final PluginClassCache ourPluginClasses = new PluginClassCache();
-  @NonNls static final String SPECIAL_IDEA_PLUGIN = "IDEA CORE";
+  @NonNls private static final String SPECIAL_IDEA_PLUGIN = "IDEA CORE";
   static final String DISABLE = "disable";
   static final String ENABLE = "enable";
   static final String EDIT = "edit";
   @NonNls private static final String PROPERTY_PLUGIN_PATH = "plugin.path";
-  static List<String> ourDisabledPlugins;
+  private static List<String> ourDisabledPlugins;
   private static MultiMap<String, String> ourBrokenPluginVersions;
   private static IdeaPluginDescriptor[] ourPlugins;
   static String myPluginError;
@@ -84,6 +85,7 @@ public class PluginManagerCore {
   /**
    * do not call this method during bootstrap, should be called in a copy of PluginManager, loaded by IdeaClassLoader
    */
+  @NotNull
   public static synchronized IdeaPluginDescriptor[] getPlugins() {
     if (ourPlugins == null) {
       initPlugins(null);
@@ -91,7 +93,7 @@ public class PluginManagerCore {
     return ourPlugins;
   }
 
-  public static void loadDisabledPlugins(final String configPath, final Collection<String> disabledPlugins) {
+  public static void loadDisabledPlugins(@NotNull String configPath, @NotNull Collection<String> disabledPlugins) {
     final File file = new File(configPath, DISABLED_PLUGINS_FILENAME);
     if (file.isFile()) {
       try {
@@ -121,11 +123,12 @@ public class PluginManagerCore {
     return ourDisabledPlugins;
   }
 
-  public static boolean isBrokenPlugin(IdeaPluginDescriptor descriptor) {
+  public static boolean isBrokenPlugin(@NotNull IdeaPluginDescriptor descriptor) {
     return getBrokenPluginVersions().get(descriptor.getPluginId().getIdString()).contains(descriptor.getVersion());
   }
 
-  public static MultiMap<String, String> getBrokenPluginVersions() {
+  @NotNull
+  private static MultiMap<String, String> getBrokenPluginVersions() {
     if (ourBrokenPluginVersions == null) {
       ourBrokenPluginVersions = MultiMap.createSet();
 
@@ -161,7 +164,7 @@ public class PluginManagerCore {
     return ourBrokenPluginVersions;
   }
 
-  static boolean isUnitTestMode() {
+  private static boolean isUnitTestMode() {
     final Application app = ApplicationManager.getApplication();
     return app != null && app.isUnitTestMode();
   }
@@ -182,7 +185,7 @@ public class PluginManagerCore {
     }
   }
 
-  public static boolean disablePlugin(String id) {
+  public static boolean disablePlugin(@NotNull String id) {
     List<String> disabledPlugins = getDisabledPlugins();
     if (disabledPlugins.contains(id)) {
       return false;
@@ -197,7 +200,7 @@ public class PluginManagerCore {
     return true;
   }
 
-  public static boolean enablePlugin(String id) {
+  public static boolean enablePlugin(@NotNull String id) {
     if (!getDisabledPlugins().contains(id)) return false;
     getDisabledPlugins().remove(id);
     try {
@@ -209,7 +212,7 @@ public class PluginManagerCore {
     return true;
   }
 
-  public static void saveDisabledPlugins(Collection<String> ids, boolean append) throws IOException {
+  public static void saveDisabledPlugins(@NotNull Collection<String> ids, boolean append) throws IOException {
     File plugins = new File(PathManager.getConfigPath(), DISABLED_PLUGINS_FILENAME);
     savePluginsList(ids, append, plugins);
     ourDisabledPlugins = null;
@@ -223,20 +226,20 @@ public class PluginManagerCore {
     return ourId2Index.get(id);
   }
 
-  public static boolean isModuleDependency(final PluginId dependentPluginId) {
+  public static boolean isModuleDependency(@NotNull PluginId dependentPluginId) {
     return dependentPluginId.getIdString().startsWith(MODULE_DEPENDENCY_PREFIX);
   }
 
-  public static void checkDependants(final IdeaPluginDescriptor pluginDescriptor,
-                                     final Function<PluginId, IdeaPluginDescriptor> pluginId2Descriptor,
-                                     final Condition<PluginId> check) {
+  public static void checkDependants(@NotNull IdeaPluginDescriptor pluginDescriptor,
+                                     @NotNull Function<PluginId, IdeaPluginDescriptor> pluginId2Descriptor,
+                                     @NotNull Condition<PluginId> check) {
     checkDependants(pluginDescriptor, pluginId2Descriptor, check, new THashSet<PluginId>());
   }
 
-  private static boolean checkDependants(final IdeaPluginDescriptor pluginDescriptor,
-                                         final Function<PluginId, IdeaPluginDescriptor> pluginId2Descriptor,
-                                         final Condition<PluginId> check,
-                                         final Set<PluginId> processed) {
+  private static boolean checkDependants(@NotNull IdeaPluginDescriptor pluginDescriptor,
+                                         @NotNull Function<PluginId, IdeaPluginDescriptor> pluginId2Descriptor,
+                                         @NotNull Condition<PluginId> check,
+                                         @NotNull Set<PluginId> processed) {
     processed.add(pluginDescriptor.getPluginId());
     final PluginId[] dependentPluginIds = pluginDescriptor.getDependentPluginIds();
     final Set<PluginId> optionalDependencies = new THashSet<PluginId>(Arrays.asList(pluginDescriptor.getOptionalDependentPluginIds()));
@@ -275,10 +278,10 @@ public class PluginManagerCore {
     ourPluginClasses.dumpPluginClassStatistics();
   }
 
-  static boolean isDependent(final IdeaPluginDescriptor descriptor,
-                             final PluginId on,
-                             Map<PluginId, IdeaPluginDescriptor> map,
-                             final boolean checkModuleDependencies) {
+  private static boolean isDependent(@NotNull IdeaPluginDescriptor descriptor,
+                                     @NotNull PluginId on,
+                                     @NotNull Map<PluginId, IdeaPluginDescriptor> map,
+                                     final boolean checkModuleDependencies) {
     for (PluginId id: descriptor.getDependentPluginIds()) {
       if (ArrayUtil.contains(id, (Object[])descriptor.getOptionalDependentPluginIds())) {
         continue;
@@ -297,7 +300,7 @@ public class PluginManagerCore {
     return false;
   }
 
-  static boolean hasModuleDependencies(final IdeaPluginDescriptor descriptor) {
+  private static boolean hasModuleDependencies(@NotNull IdeaPluginDescriptor descriptor) {
     final PluginId[] dependentPluginIds = descriptor.getDependentPluginIds();
     for (PluginId dependentPluginId : dependentPluginIds) {
       if (isModuleDependency(dependentPluginId)) {
@@ -307,7 +310,7 @@ public class PluginManagerCore {
     return false;
   }
 
-  static boolean shouldLoadPlugins() {
+  private static boolean shouldLoadPlugins() {
     try {
       // no plugins during bootstrap
       Class.forName("com.intellij.openapi.extensions.Extensions");
@@ -320,20 +323,20 @@ public class PluginManagerCore {
     return loadPlugins == null || Boolean.TRUE.toString().equals(loadPlugins);
   }
 
-  static void configureExtensions() {
+  private static void configureExtensions() {
     Extensions.setLogProvider(new IdeaLogProvider());
     Extensions.registerAreaClass(ExtensionAreas.IDEA_PROJECT, null);
     Extensions.registerAreaClass(ExtensionAreas.IDEA_MODULE, ExtensionAreas.IDEA_PROJECT);
   }
 
-  private static Method getAddUrlMethod(final ClassLoader loader) {
+  private static Method getAddUrlMethod(@NotNull ClassLoader loader) {
     return ReflectionUtil.getDeclaredMethod(loader instanceof URLClassLoader ? URLClassLoader.class : loader.getClass(), "addURL", URL.class);
   }
 
   @Nullable
-  static ClassLoader createPluginClassLoader(@NotNull File[] classPath,
-                                             @NotNull ClassLoader[] parentLoaders,
-                                             @NotNull IdeaPluginDescriptor pluginDescriptor) {
+  private static ClassLoader createPluginClassLoader(@NotNull File[] classPath,
+                                                     @NotNull ClassLoader[] parentLoaders,
+                                                     @NotNull IdeaPluginDescriptor pluginDescriptor) {
 
     if (pluginDescriptor.getUseIdeaClassLoader()) {
       try {
@@ -386,11 +389,11 @@ public class PluginManagerCore {
     ourDisabledPlugins = null;
   }
 
-  public static boolean isPluginClass(String className) {
+  public static boolean isPluginClass(@NotNull String className) {
     return ourPlugins != null && getPluginByClassName(className) != null;
   }
 
-  static void logPlugins() {
+  private static void logPlugins() {
     List<String> loadedBundled = new ArrayList<String>();
     List<String> disabled = new ArrayList<String>();
     List<String> loadedCustom = new ArrayList<String>();
@@ -420,7 +423,8 @@ public class PluginManagerCore {
     }
   }
 
-  static ClassLoader[] getParentLoaders(Map<PluginId, ? extends IdeaPluginDescriptor> idToDescriptorMap, PluginId[] pluginIds) {
+  @NotNull
+  private static ClassLoader[] getParentLoaders(@NotNull Map<PluginId, ? extends IdeaPluginDescriptor> idToDescriptorMap, @NotNull PluginId[] pluginIds) {
     if (isUnitTestMode()) return new ClassLoader[0];
     final List<ClassLoader> classLoaders = new ArrayList<ClassLoader>();
     for (final PluginId id : pluginIds) {
@@ -438,7 +442,7 @@ public class PluginManagerCore {
     return classLoaders.toArray(new ClassLoader[classLoaders.size()]);
   }
 
-  static int countPlugins(String pluginsPath) {
+  private static int countPlugins(@NotNull String pluginsPath) {
     File configuredPluginsDir = new File(pluginsPath);
     if (configuredPluginsDir.exists()) {
       String[] list = configuredPluginsDir.list();
@@ -449,7 +453,8 @@ public class PluginManagerCore {
     return 0;
   }
 
-  static Collection<URL> getClassLoaderUrls() {
+  @NotNull
+  private static Collection<URL> getClassLoaderUrls() {
     final ClassLoader classLoader = PluginManagerCore.class.getClassLoader();
     final Class<? extends ClassLoader> aClass = classLoader.getClass();
     try {
@@ -467,7 +472,7 @@ public class PluginManagerCore {
     return Collections.emptyList();
   }
 
-  static void prepareLoadingPluginsErrorMessage(final String errorMessage) {
+  private static void prepareLoadingPluginsErrorMessage(@NotNull String errorMessage) {
     if (!StringUtil.isEmptyOrSpaces(errorMessage)) {
       if (ApplicationManager.getApplication() != null
           && !ApplicationManager.getApplication().isHeadlessEnvironment()
@@ -478,24 +483,26 @@ public class PluginManagerCore {
         else {
           myPluginError += "\n" + errorMessage;
         }
-      } else {
+      }
+      else {
         getLogger().error(errorMessage);
       }
     }
   }
 
-  private static void addModulesAsDependents(Map<PluginId, ? super IdeaPluginDescriptorImpl> map) {
+  private static void addModulesAsDependents(@NotNull Map<PluginId, ? super IdeaPluginDescriptorImpl> map) {
     for (Map.Entry<String, IdeaPluginDescriptorImpl> entry : ourModulesToContainingPlugins.entrySet()) {
       map.put(PluginId.getId(entry.getKey()), entry.getValue());
     }
   }
 
-  static Comparator<IdeaPluginDescriptor> getPluginDescriptorComparator(final Map<PluginId, ? extends IdeaPluginDescriptor> idToDescriptorMap) {
+  @NotNull
+  private static Comparator<IdeaPluginDescriptor> getPluginDescriptorComparator(@NotNull final Map<PluginId, ? extends IdeaPluginDescriptor> idToDescriptorMap) {
     final Graph<PluginId> graph = createPluginIdGraph(idToDescriptorMap);
     final DFSTBuilder<PluginId> builder = new DFSTBuilder<PluginId>(graph);
     if (!builder.isAcyclic()) {
       builder.getSCCs().forEach(new TIntProcedure() {
-        int myTNumber = 0;
+        private int myTNumber = 0;
         @Override
         public boolean execute(int size) {
           if (size > 1) {
@@ -522,7 +529,8 @@ public class PluginManagerCore {
     };
   }
 
-  private static Graph<PluginId> createPluginIdGraph(final Map<PluginId, ? extends IdeaPluginDescriptor> idToDescriptorMap) {
+  @NotNull
+  private static Graph<PluginId> createPluginIdGraph(@NotNull final Map<PluginId, ? extends IdeaPluginDescriptor> idToDescriptorMap) {
     final List<PluginId> ids = new ArrayList<PluginId>(idToDescriptorMap.keySet());
     // this magic ensures that the dependent plugins always follow their dependencies in lexicographic order
     // needed to make sure that extensions are always in the same order
@@ -576,7 +584,7 @@ public class PluginManagerCore {
   }
 
   @Nullable
-  static IdeaPluginDescriptorImpl loadDescriptorFromJar(@NotNull File file, @NotNull String fileName) {
+  private static IdeaPluginDescriptorImpl loadDescriptorFromJar(@NotNull File file, @NotNull String fileName) {
     try {
       String fileURL = StringUtil.replace(file.toURI().toASCIIString(), "!", "%21");
       URL jarURL = new URL("jar:" + fileURL + "!/META-INF/" + fileName);
@@ -695,15 +703,15 @@ public class PluginManagerCore {
     return descriptor;
   }
 
-  public static void loadDescriptors(String pluginsPath,
-                                     List<IdeaPluginDescriptorImpl> result,
-                                     @Nullable StartupProgress progress,
-                                     int pluginsCount) {
+  private static void loadDescriptors(@NotNull String pluginsPath,
+                                      @NotNull List<IdeaPluginDescriptorImpl> result,
+                                      @Nullable StartupProgress progress,
+                                      int pluginsCount) {
     loadDescriptors(new File(pluginsPath), result, progress, pluginsCount);
   }
 
   public static void loadDescriptors(@NotNull File pluginsHome,
-                                     List<IdeaPluginDescriptorImpl> result,
+                                     @NotNull List<IdeaPluginDescriptorImpl> result,
                                      @Nullable StartupProgress progress,
                                      int pluginsCount) {
     final File[] files = pluginsHome.listFiles();
@@ -729,8 +737,8 @@ public class PluginManagerCore {
     }
   }
 
-  @Nullable
-  static String filterBadPlugins(List<? extends IdeaPluginDescriptor> result, final Map<String, String> disabledPluginNames) {
+  @NotNull
+  private static String filterBadPlugins(@NotNull List<? extends IdeaPluginDescriptor> result, @NotNull final Map<String, String> disabledPluginNames) {
     final Map<PluginId, IdeaPluginDescriptor> idToDescriptorMap = new THashMap<PluginId, IdeaPluginDescriptor>();
     final StringBuilder message = new StringBuilder();
     boolean pluginsWithoutIdFound = false;
@@ -829,7 +837,7 @@ public class PluginManagerCore {
     return "";
   }
 
-  static void loadDescriptorsFromClassPath(@NotNull List<IdeaPluginDescriptorImpl> result, @Nullable StartupProgress progress) {
+  private static void loadDescriptorsFromClassPath(@NotNull List<IdeaPluginDescriptorImpl> result, @Nullable StartupProgress progress) {
     Collection<URL> urls = getClassLoaderUrls();
     String platformPrefix = System.getProperty(PlatformUtils.PLATFORM_PREFIX_KEY);
     int i = 0;
@@ -866,12 +874,13 @@ public class PluginManagerCore {
   }
 
   @SuppressWarnings("deprecation")
-  private static String decodeUrl(String file) {
+  @NotNull
+  private static String decodeUrl(@NotNull String file) {
     String quotePluses = StringUtil.replace(file, "+", "%2B");
     return URLDecoder.decode(quotePluses);
   }
 
-  static void loadDescriptorsFromProperty(final List<IdeaPluginDescriptorImpl> result) {
+  private static void loadDescriptorsFromProperty(@NotNull List<IdeaPluginDescriptorImpl> result) {
     final String pathProperty = System.getProperty(PROPERTY_PLUGIN_PATH);
     if (pathProperty == null) return;
 
@@ -884,6 +893,7 @@ public class PluginManagerCore {
     }
   }
 
+  @NotNull
   public static IdeaPluginDescriptorImpl[] loadDescriptors(@Nullable StartupProgress progress) {
     if (ClassUtilCore.isLoadingOfExternalPluginsDisabled()) {
       return IdeaPluginDescriptorImpl.EMPTY_ARRAY;
@@ -915,7 +925,7 @@ public class PluginManagerCore {
     return pluginDescriptors;
   }
 
-  static void mergeOptionalConfigs(Map<PluginId, IdeaPluginDescriptorImpl> descriptors) {
+  private static void mergeOptionalConfigs(@NotNull Map<PluginId, IdeaPluginDescriptorImpl> descriptors) {
     final Map<PluginId, IdeaPluginDescriptorImpl> descriptorsWithModules = new THashMap<PluginId, IdeaPluginDescriptorImpl>(descriptors);
     addModulesAsDependents(descriptorsWithModules);
     for (IdeaPluginDescriptorImpl descriptor : descriptors.values()) {
@@ -950,24 +960,24 @@ public class PluginManagerCore {
     return ourBuildNumber;
   }
 
-  static boolean shouldSkipPlugin(final IdeaPluginDescriptor descriptor, IdeaPluginDescriptor[] loaded) {
+  private static boolean shouldLoadPlugin(@NotNull IdeaPluginDescriptor descriptor, @NotNull IdeaPluginDescriptor[] loaded) {
     final String idString = descriptor.getPluginId().getIdString();
     if (CORE_PLUGIN_ID.equals(idString)) {
-      return false;
+      return true;
     }
 
     //noinspection HardCodedStringLiteral
     final String pluginId = System.getProperty("idea.load.plugins.id");
     if (pluginId == null) {
-      if (descriptor instanceof IdeaPluginDescriptorImpl && !descriptor.isEnabled()) return true;
+      if (descriptor instanceof IdeaPluginDescriptorImpl && !descriptor.isEnabled()) return false;
 
-      if (!shouldLoadPlugins()) return true;
+      if (!shouldLoadPlugins()) return false;
     }
     final List<String> pluginIds = pluginId == null ? null : StringUtil.split(pluginId, ",");
 
     final boolean checkModuleDependencies = !ourModulesToContainingPlugins.isEmpty() && !ourModulesToContainingPlugins.containsKey("com.intellij.modules.all");
     if (checkModuleDependencies && !hasModuleDependencies(descriptor)) {
-      return true;
+      return false;
     }
 
     boolean shouldLoad;
@@ -993,23 +1003,23 @@ public class PluginManagerCore {
             }
           }
         }
-      } else {
+      }
+      else {
         shouldLoad = !getDisabledPlugins().contains(idString);
       }
       if (shouldLoad && descriptor instanceof IdeaPluginDescriptorImpl) {
-        if (isIncompatible(descriptor)) return true;
+        if (isIncompatible(descriptor)) return false;
       }
     }
 
-    return !shouldLoad;
+    return shouldLoad;
   }
 
-  public static boolean isIncompatible(final IdeaPluginDescriptor descriptor) {
+  public static boolean isIncompatible(@NotNull IdeaPluginDescriptor descriptor) {
     return isIncompatible(descriptor, getBuildNumber());
   }
 
-  public static boolean isIncompatible(final IdeaPluginDescriptor descriptor, @Nullable BuildNumber buildNumber) {
-
+  public static boolean isIncompatible(@NotNull IdeaPluginDescriptor descriptor, @Nullable BuildNumber buildNumber) {
     if (buildNumber == null) {
       buildNumber = getBuildNumber();
     }
@@ -1034,21 +1044,21 @@ public class PluginManagerCore {
     return false;
   }
 
-  public static boolean shouldSkipPlugin(final IdeaPluginDescriptor descriptor) {
+  public static boolean shouldSkipPlugin(@NotNull IdeaPluginDescriptor descriptor) {
     if (descriptor instanceof IdeaPluginDescriptorImpl) {
       IdeaPluginDescriptorImpl descriptorImpl = (IdeaPluginDescriptorImpl)descriptor;
       Boolean skipped = descriptorImpl.getSkipped();
       if (skipped != null) {
         return skipped.booleanValue();
       }
-      boolean result = shouldSkipPlugin(descriptor, ourPlugins) || isBrokenPlugin(descriptor);
+      boolean result = !shouldLoadPlugin(descriptor, ourPlugins) || isBrokenPlugin(descriptor);
       descriptorImpl.setSkipped(result);
       return result;
     }
-    return shouldSkipPlugin(descriptor, ourPlugins) || isBrokenPlugin(descriptor);
+    return !shouldLoadPlugin(descriptor, ourPlugins) || isBrokenPlugin(descriptor);
   }
 
-  static void initializePlugins(@Nullable StartupProgress progress) {
+  private static void initializePlugins(@Nullable StartupProgress progress) {
     configureExtensions();
 
     final IdeaPluginDescriptorImpl[] pluginDescriptors = loadDescriptors(progress);
@@ -1061,15 +1071,15 @@ public class PluginManagerCore {
     final Map<String, String> disabledPluginNames = new THashMap<String, String>();
     List<String> brokenPluginsList = new SmartList<String>();
     for (IdeaPluginDescriptorImpl descriptor : pluginDescriptors) {
-      boolean skipped = shouldSkipPlugin(descriptor, pluginDescriptors);
-      if (!skipped) {
+      boolean shouldLoad = shouldLoadPlugin(descriptor, pluginDescriptors);
+      if (shouldLoad) {
         if (isBrokenPlugin(descriptor)) {
           brokenPluginsList.add(descriptor.getName());
-          skipped = true;
+          shouldLoad = false;
         }
       }
 
-      if (!skipped) {
+      if (shouldLoad) {
         final List<String> modules = descriptor.getModules();
         if (modules != null) {
           for (String module : modules) {
@@ -1124,7 +1134,7 @@ public class PluginManagerCore {
       if (ApplicationManager.getApplication().isInternal()) {
         final List<String> cycles = new ArrayList<String>();
         builder.getSCCs().forEach(new TIntProcedure() {
-          int myTNumber = 0;
+          private int myTNumber = 0;
           @Override
           public boolean execute(int size) {
             if (size > 1) {
@@ -1139,7 +1149,8 @@ public class PluginManagerCore {
           }
         });
         cyclePresentation = ": " + StringUtil.join(cycles, ";");
-      } else {
+      }
+      else {
         final Couple<PluginId> circularDependency = builder.getCircularDependency();
         final PluginId id = circularDependency.getFirst();
         final PluginId parentId = circularDependency.getSecond();
@@ -1173,9 +1184,9 @@ public class PluginManagerCore {
         final PluginId[] dependentPluginIds = pluginDescriptor.getDependentPluginIds();
         final ClassLoader[] parentLoaders = getParentLoaders(idToDescriptorMap, dependentPluginIds);
 
-        final ClassLoader pluginClassLoader = createPluginClassLoader(classPath.toArray(new File[classPath.size()]),
-                                                                      parentLoaders.length > 0 ? parentLoaders : new ClassLoader[] {parentLoader},
-                                                                      pluginDescriptor);
+        ClassLoader pluginClassLoader = createPluginClassLoader(classPath.toArray(new File[classPath.size()]),
+                                                                parentLoaders.length > 0 ? parentLoaders : new ClassLoader[] {parentLoader},
+                                                                pluginDescriptor);
         pluginDescriptor.setLoader(pluginClassLoader);
       }
 
@@ -1196,11 +1207,10 @@ public class PluginManagerCore {
       }
     });
 
-
     ourPlugins = pluginDescriptors;
   }
 
-  private static void registerExtensionPointsAndExtensions(ExtensionsArea area, List<IdeaPluginDescriptorImpl> loadedPlugins) {
+  private static void registerExtensionPointsAndExtensions(@NotNull ExtensionsArea area, @NotNull List<IdeaPluginDescriptorImpl> loadedPlugins) {
     for (IdeaPluginDescriptorImpl descriptor : loadedPlugins) {
       descriptor.registerExtensionPoints(area);
     }
index 87f7d7b47f7d99ae59a3b5cf88e6b8b33d1a6f25..efceadac2423082fd76265824e3d73ff64c501aa 100644 (file)
@@ -357,7 +357,7 @@ public abstract class ComponentManagerImpl extends UserDataHolderBase implements
   private static class HeadlessHolder {
     private static final boolean myHeadless = ApplicationManager.getApplication().isHeadlessEnvironment();
   }
-  private boolean isHeadless() {
+  private static boolean isHeadless() {
     return HeadlessHolder.myHeadless;
   }
 
index 662c7b65512025f7b1fcc47bc39fa36575065279..10cf93a9a905732502c5dd624f07fb29b4eb3c60 100644 (file)
@@ -36,6 +36,7 @@ import gnu.trove.THashMap;
 import org.jetbrains.annotations.Nls;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.TestOnly;
 
 import javax.swing.*;
 import java.util.Collection;
@@ -497,6 +498,11 @@ public class CoreProgressManager extends ProgressManager implements Disposable {
     }
   }
 
+  @TestOnly
+  public static boolean isCanceledThread(@NotNull Thread thread) {
+    return threadsUnderCanceledIndicator.contains(thread);
+  }
+
   @NotNull
   @Override
   public final NonCancelableSection startNonCancelableSection() {
index d83308b8d0e4f8a1227963ab2c75295431d94773..bfb6a598425b475b17e1cb7d5f76e521cb6d9adf 100644 (file)
@@ -18,18 +18,20 @@ package com.intellij.diff.requests;
 import com.intellij.diff.contents.DiffContent;
 import org.jetbrains.annotations.NotNull;
 
+import java.util.List;
+
 /**
  * 2 contents: left - right (before - after)
  * 3 contents: left - middle - right (local - base - server)
  */
 public abstract class ContentDiffRequest extends DiffRequest {
   @NotNull
-  public abstract DiffContent[] getContents();
+  public abstract List<DiffContent> getContents();
 
   /**
    * @return contents names. Should have same length as {@link #getContents()}
    * Titles could be null.
    */
   @NotNull
-  public abstract String[] getContentTitles();
+  public abstract List<String> getContentTitles();
 }
index a2568349988217c0574573ac63e3e20582bfa4a0..f08daaa24d8d3fcfd6e0cbf6aaa71082fe3d734c 100644 (file)
 package com.intellij.diff.requests;
 
 import com.intellij.diff.contents.DiffContent;
+import com.intellij.util.containers.ContainerUtil;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
+import java.util.List;
+
 public class SimpleDiffRequest extends ContentDiffRequest {
   @Nullable private final String myTitle;
-  @NotNull private final DiffContent[] myContents;
-  @NotNull private final String[] myContentTitles;
+  @NotNull private final List<DiffContent> myContents;
+  @NotNull private final List<String> myContentTitles;
+
+  public SimpleDiffRequest(@Nullable String title,
+                           @NotNull DiffContent content1,
+                           @NotNull DiffContent content2,
+                           @Nullable String title1,
+                           @Nullable String title2) {
+    this(title, ContainerUtil.list(content1, content2), ContainerUtil.list(title1, title2));
+  }
 
   public SimpleDiffRequest(@Nullable String title,
                            @NotNull DiffContent content1,
                            @NotNull DiffContent content2,
-                           @NotNull String title1,
-                           @NotNull String title2) {
-    this(title, new DiffContent[]{content1, content2}, new String[]{title1, title2});
+                           @NotNull DiffContent content3,
+                           @Nullable String title1,
+                           @Nullable String title2,
+                           @Nullable String title3) {
+    this(title, ContainerUtil.list(content1, content2, content3), ContainerUtil.list(title1, title2, title3));
   }
 
   public SimpleDiffRequest(@Nullable String title,
-                           @NotNull DiffContent[] contents,
-                           @NotNull String[] titles) {
-    assert contents.length == titles.length;
+                           @NotNull List<DiffContent> contents,
+                           @NotNull List<String> titles) {
+    assert contents.size() == titles.size();
 
     myTitle = title;
     myContents = contents;
@@ -44,13 +57,13 @@ public class SimpleDiffRequest extends ContentDiffRequest {
 
   @NotNull
   @Override
-  public DiffContent[] getContents() {
+  public List<DiffContent> getContents() {
     return myContents;
   }
 
   @NotNull
   @Override
-  public String[] getContentTitles() {
+  public List<String> getContentTitles() {
     return myContentTitles;
   }
 
index b0654d3570a4f9b8bef1de52658002b88eb7c10e..3865fab18d5d67748b0b0c13d8b105cf95c44e47 100644 (file)
@@ -15,7 +15,6 @@
  */
 package com.intellij.diff.actions;
 
-import com.intellij.diff.DiffDialogHints;
 import com.intellij.diff.DiffManager;
 import com.intellij.diff.requests.DiffRequest;
 import com.intellij.openapi.actionSystem.ActionPlaces;
index 287e48466f61a12879a08e6dbb4c983605c507be..975f9b254bedfa5e513842d65492ba593e89b85c 100644 (file)
@@ -90,7 +90,7 @@ public class CompareFileWithEditorAction extends BaseShowDiffAction {
 
     ContentDiffRequest request = DiffRequestFactory.getInstance().createFromFiles(project, selectedFile, currentFile);
 
-    DiffContent editorContent = request.getContents()[1];
+    DiffContent editorContent = request.getContents().get(1);
     if (editorContent instanceof DocumentContent) {
       Editor[] editors = EditorFactory.getInstance().getEditors(((DocumentContent)editorContent).getDocument());
       if (editors.length != 0) {
index 352b65d05403049606d7b993cd656280fa03840a..22d57bb16a922523cc448ebd3fb526872c2df751 100644 (file)
@@ -33,6 +33,8 @@ import org.jetbrains.annotations.NonNls;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
+import java.util.List;
+
 public class ShowOldDiffAction extends DumbAwareAction {
   @NonNls public static final Object DO_NOT_TRY_MIGRATE = "doNotTryMigrate";
 
@@ -54,8 +56,8 @@ public class ShowOldDiffAction extends DumbAwareAction {
       return;
     }
 
-    DiffContent[] contents = ((ContentDiffRequest)request).getContents();
-    if (contents.length != 2) {
+    List<DiffContent> contents = ((ContentDiffRequest)request).getContents();
+    if (contents.size() != 2) {
       e.getPresentation().setEnabled(false);
       return;
     }
@@ -78,12 +80,12 @@ public class ShowOldDiffAction extends DumbAwareAction {
   @Override
   public void actionPerformed(AnActionEvent e) {
     ContentDiffRequest request = (ContentDiffRequest)e.getRequiredData(DiffDataKeys.DIFF_REQUEST);
-    DiffContent[] contents = request.getContents();
-    String[] titles = request.getContentTitles();
+    List<DiffContent> contents = request.getContents();
+    List<String> titles = request.getContentTitles();
 
     SimpleDiffRequest newRequest = new SimpleDiffRequest(e.getProject(), request.getTitle());
-    newRequest.setContentTitles(titles[0], titles[1]);
-    newRequest.setContents(convert(e.getProject(), contents[0]), convert(e.getProject(), contents[1]));
+    newRequest.setContentTitles(titles.get(0), titles.get(1));
+    newRequest.setContents(convert(e.getProject(), contents.get(0)), convert(e.getProject(), contents.get(1)));
     newRequest.addHint(DO_NOT_TRY_MIGRATE);
 
     DiffManager.getInstance().getDiffTool().show(newRequest);
index 8f3f8dbc99351a71f8d5e7c3ab50b034f55915ac..9575e7fea32054c85507fbf2b8121d88a6126482 100644 (file)
@@ -33,7 +33,6 @@ import com.intellij.diff.util.DiffUserDataKeys;
 import com.intellij.diff.util.DiffUserDataKeysEx;
 import com.intellij.diff.util.DiffUserDataKeysEx.ScrollToPolicy;
 import com.intellij.diff.util.DiffUtil;
-import com.intellij.icons.AllIcons;
 import com.intellij.openapi.Disposable;
 import com.intellij.openapi.actionSystem.*;
 import com.intellij.openapi.actionSystem.ex.ComboBoxAction;
@@ -655,7 +654,7 @@ public abstract class DiffRequestProcessor implements Disposable {
         return;
       }
 
-      if (!isNavigationEnabled() || !hasNextChange()) return;
+      if (!isNavigationEnabled() || !hasPrevChange()) return;
 
       if (myIterationState != IterationState.PREV) {
         if (iterable != null) iterable.notify("Press again to go to the previous file");
index 2c41f656e79c426162998b834fb7fe30c4f34352..d728ab7e4f3fded6c5d524036c0908a3d1c81d58 100644 (file)
@@ -152,14 +152,14 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase {
 
   @NotNull
   protected Couple<Pair<FileEditor, FileEditorProvider>> createEditors() {
-    DiffContent[] contents = myRequest.getContents();
+    List<DiffContent> contents = myRequest.getContents();
 
     Pair<FileEditor, FileEditorProvider> pair1;
     Pair<FileEditor, FileEditorProvider> pair2;
 
     try {
-      pair1 = createEditor(contents[0]);
-      pair2 = createEditor(contents[1]);
+      pair1 = createEditor(contents.get(0));
+      pair2 = createEditor(contents.get(1));
       return Couple.of(pair1, pair2);
     }
     catch (IOException e) {
@@ -247,9 +247,9 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase {
     try {
       indicator.checkCanceled();
 
-      DiffContent[] contents = myRequest.getContents();
+      List<DiffContent> contents = myRequest.getContents();
 
-      if (contents[0] instanceof EmptyContent) {
+      if (contents.get(0) instanceof EmptyContent) {
         return new Runnable() {
           @Override
           public void run() {
@@ -259,7 +259,7 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase {
         };
       }
 
-      if (contents[1] instanceof EmptyContent) {
+      if (contents.get(1) instanceof EmptyContent) {
         return new Runnable() {
           @Override
           public void run() {
@@ -270,7 +270,7 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase {
       }
 
       // TODO: compare text with image by-byte?
-      if (!(contents[0] instanceof BinaryFileContent) || !(contents[1] instanceof BinaryFileContent)) {
+      if (!(contents.get(0) instanceof BinaryFileContent) || !(contents.get(1) instanceof BinaryFileContent)) {
         return new Runnable() {
           @Override
           public void run() {
@@ -279,8 +279,8 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase {
         };
       }
 
-      final BinaryFileContent content1 = (BinaryFileContent)contents[0];
-      final BinaryFileContent content2 = (BinaryFileContent)contents[1];
+      final BinaryFileContent content1 = (BinaryFileContent)contents.get(0);
+      final BinaryFileContent content2 = (BinaryFileContent)contents.get(1);
       byte[] bytes1 = content1.getBytes();
       byte[] bytes2 = content2.getBytes();
 
@@ -396,13 +396,13 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase {
   public static boolean canShowRequest(@NotNull DiffContext context, @NotNull DiffRequest request) {
     if (!(request instanceof ContentDiffRequest)) return false;
 
-    DiffContent[] contents = ((ContentDiffRequest)request).getContents();
-    if (contents.length != 2) return false;
+    List<DiffContent> contents = ((ContentDiffRequest)request).getContents();
+    if (contents.size() != 2) return false;
 
-    if (!canShowContent(contents[0], context)) return false;
-    if (!canShowContent(contents[1], context)) return false;
+    if (!canShowContent(contents.get(0), context)) return false;
+    if (!canShowContent(contents.get(1), context)) return false;
 
-    return wantShowContent(contents[0], context) || wantShowContent(contents[1], context);
+    return wantShowContent(contents.get(0), context) || wantShowContent(contents.get(1), context);
   }
 
   public static boolean canShowContent(@NotNull DiffContent content, @NotNull DiffContext context) {
index bde3dc0aad36d591425dab02b7c6e6b70538605c..f9123b173ffe1f7eaacdf07fea301946f8734dad 100644 (file)
@@ -38,6 +38,7 @@ import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
 import java.awt.*;
+import java.util.List;
 
 class DifDiffViewer implements FrameDiffTool.DiffViewer {
   @NotNull private final DiffContext myContext;
@@ -49,9 +50,9 @@ class DifDiffViewer implements FrameDiffTool.DiffViewer {
     myContext = context;
     myRequest = request;
 
-    DiffContent[] contents = request.getContents();
-    DiffElement element1 = createDiffElement(contents[0]);
-    DiffElement element2 = createDiffElement(contents[1]);
+    List<DiffContent> contents = request.getContents();
+    DiffElement element1 = createDiffElement(contents.get(0));
+    DiffElement element2 = createDiffElement(contents.get(1));
     DirDiffTableModel model = new DirDiffTableModel(context.getProject(), element1, element2, new DirDiffSettings());
 
     myPanel = new DirDiffPanel(model, new DirDiffWindow((DirDiffFrame)null) {
@@ -102,11 +103,11 @@ class DifDiffViewer implements FrameDiffTool.DiffViewer {
 
   public static boolean canShowRequest(@NotNull DiffContext context, @NotNull DiffRequest request) {
     if (!(request instanceof ContentDiffRequest)) return false;
-    DiffContent[] contents = ((ContentDiffRequest)request).getContents();
-    if (contents.length != 2) return false;
+    List<DiffContent> contents = ((ContentDiffRequest)request).getContents();
+    if (contents.size() != 2) return false;
 
-    if (!canShowContent(contents[0])) return false;
-    if (!canShowContent(contents[1])) return false;
+    if (!canShowContent(contents.get(0))) return false;
+    if (!canShowContent(contents.get(1))) return false;
 
     return true;
   }
index 6d5c925a15ec88e323158617e71676fc0a9f1bef..82c76b381d4f2ecb08dd8c8e0e8594fc42c1e7a5 100644 (file)
@@ -135,8 +135,8 @@ public class ExternalDiffTool {
 
     ExternalDiffSettings settings = ExternalDiffSettings.getInstance();
 
-    DiffContent[] contents = ((ContentDiffRequest)request).getContents();
-    String[] titles = ((ContentDiffRequest)request).getContentTitles();
+    List<DiffContent> contents = ((ContentDiffRequest)request).getContents();
+    List<String> titles = ((ContentDiffRequest)request).getContentTitles();
 
     ExternalDiffToolUtil.execute(settings, contents, titles, request.getTitle());
 
@@ -145,8 +145,8 @@ public class ExternalDiffTool {
 
   public static boolean canShow(@NotNull DiffRequest request) {
     if (!(request instanceof ContentDiffRequest)) return false;
-    DiffContent[] contents = ((ContentDiffRequest)request).getContents();
-    if (contents.length != 2 && contents.length != 3) return false;
+    List<DiffContent> contents = ((ContentDiffRequest)request).getContents();
+    if (contents.size() != 2 && contents.size() != 3) return false;
     for (DiffContent content : contents) {
       if (!ExternalDiffToolUtil.canCreateFile(content)) return false;
     }
index 1ffaa233eaf04af7ea24e63573770a6ae6b09ec5..837d4f2d2c23b82387b6b799f89ea5f40ed7fdcc 100644 (file)
@@ -111,16 +111,16 @@ public class ExternalDiffToolUtil {
   }
 
   public static void execute(@NotNull ExternalDiffSettings settings,
-                             @NotNull DiffContent[] contents,
-                             @NotNull String[] titles,
+                             @NotNull List<DiffContent> contents,
+                             @NotNull List<String> titles,
                              @Nullable String windowTitle)
     throws IOException, ExecutionException {
-    assert contents.length == 2 || contents.length == 3;
-    assert titles.length == contents.length;
+    assert contents.size() == 2 || contents.size() == 3;
+    assert titles.size() == contents.size();
 
     List<String> files = new ArrayList<String>();
-    for (int i = 0; i < contents.length; i++) {
-      files.add(createFile(contents[i], titles[i], windowTitle));
+    for (int i = 0; i < contents.size(); i++) {
+      files.add(createFile(contents.get(i), titles.get(i), windowTitle));
     }
 
     CommandLineTokenizer parameterTokenizer = new CommandLineTokenizer(settings.getDiffParameters(), true);
index f28c0624a14a18a6f03125056e07db027cbfaed2..8f9c509a77bb7f80b9ead82769b572f49bff07b3 100644 (file)
@@ -30,7 +30,7 @@ import com.intellij.diff.fragments.LineFragment;
 import com.intellij.diff.requests.ContentDiffRequest;
 import com.intellij.diff.requests.DiffRequest;
 import com.intellij.diff.tools.util.DiffDataKeys;
-import com.intellij.diff.tools.util.FoldingModelSupport.OnesideFoldingModel;
+import com.intellij.diff.tools.util.FoldingModelSupport;
 import com.intellij.diff.tools.util.PrevNextDifferenceIterable;
 import com.intellij.diff.tools.util.StatusPanel;
 import com.intellij.diff.tools.util.base.HighlightPolicy;
@@ -43,6 +43,7 @@ import com.intellij.diff.util.DiffUserDataKeysEx.ScrollToPolicy;
 import com.intellij.diff.util.DiffUtil;
 import com.intellij.diff.util.DiffUtil.DocumentData;
 import com.intellij.diff.util.Side;
+import com.intellij.openapi.Disposable;
 import com.intellij.openapi.actionSystem.AnAction;
 import com.intellij.openapi.actionSystem.Separator;
 import com.intellij.openapi.application.ApplicationManager;
@@ -60,7 +61,9 @@ import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.Computable;
 import com.intellij.openapi.util.Key;
 import com.intellij.openapi.util.Pair;
+import com.intellij.openapi.util.UserDataHolder;
 import com.intellij.ui.LightweightHint;
+import com.intellij.util.Function;
 import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.text.MergingCharSequence;
 import gnu.trove.TIntFunction;
@@ -88,7 +91,7 @@ public class OnesideDiffViewer extends TextDiffViewerBase {
   @NotNull private final MyStatusPanel myStatusPanel;
 
   @NotNull private final MyScrollToLineHelper myScrollToLineHelper = new MyScrollToLineHelper();
-  @NotNull private final OnesideFoldingModel myFoldingModel;
+  @NotNull private final MyFoldingModel myFoldingModel;
 
   @NotNull protected Side myMasterSide = Side.LEFT;
 
@@ -101,9 +104,9 @@ public class OnesideDiffViewer extends TextDiffViewerBase {
     myStatusPanel = new MyStatusPanel();
 
 
-    DiffContent[] contents = myRequest.getContents();
-    myActualContent1 = contents[0] instanceof DocumentContent ? ((DocumentContent)contents[0]) : null;
-    myActualContent2 = contents[1] instanceof DocumentContent ? ((DocumentContent)contents[1]) : null;
+    List<DiffContent> contents = myRequest.getContents();
+    myActualContent1 = contents.get(0) instanceof DocumentContent ? ((DocumentContent)contents.get(0)) : null;
+    myActualContent2 = contents.get(1) instanceof DocumentContent ? ((DocumentContent)contents.get(1)) : null;
     assert myActualContent1 != null || myActualContent2 != null;
 
 
@@ -116,7 +119,7 @@ public class OnesideDiffViewer extends TextDiffViewerBase {
 
     myPanel = new OnesideDiffPanel(myProject, contentPanel, myEditor, this, myContext);
 
-    myFoldingModel = new OnesideFoldingModel(myEditor, this);
+    myFoldingModel = new MyFoldingModel(myEditor, this);
 
     myEditorSettingsAction = new MySetEditorSettingsAction();
     myEditorSettingsAction.applyDefaults();
@@ -1102,4 +1105,27 @@ public class OnesideDiffViewer extends TextDiffViewerBase {
       return true;
     }
   }
+
+  private static class MyFoldingModel extends FoldingModelSupport {
+    public MyFoldingModel(@NotNull EditorEx editor, @NotNull Disposable disposable) {
+      super(new EditorEx[]{editor}, disposable);
+    }
+
+    public void install(@Nullable List<IntPair> changedLines, @NotNull UserDataHolder context, boolean defaultExpanded, int range) {
+      Iterator<int[]> it = map(changedLines, new Function<IntPair, int[]>() {
+        @Override
+        public int[] fun(IntPair line) {
+          return new int[]{
+            line.val1,
+            line.val2};
+        }
+      });
+      install(it, context, defaultExpanded, range);
+    }
+
+    @NotNull
+    public TIntFunction getLineNumberConvertor() {
+      return getLineConvertor(0);
+    }
+  }
 }
index b70286d2e074bc57ff53b9fde3d1683ee7612273..b347c0af93aefa1f3f0a9ce70483e9da817df930 100644 (file)
@@ -17,7 +17,10 @@ package com.intellij.diff.tools.simple;
 
 import com.intellij.diff.fragments.DiffFragment;
 import com.intellij.diff.fragments.LineFragment;
-import com.intellij.diff.util.*;
+import com.intellij.diff.util.DiffDrawUtil;
+import com.intellij.diff.util.DiffUtil;
+import com.intellij.diff.util.Side;
+import com.intellij.diff.util.TextDiffType;
 import com.intellij.icons.AllIcons;
 import com.intellij.openapi.actionSystem.AnAction;
 import com.intellij.openapi.actionSystem.AnActionEvent;
@@ -289,13 +292,17 @@ public class SimpleDiffChange {
     }
 
     public void update() {
-      if (myCtrlPressed == myViewer.getModifierProvider().isCtrlPressed() &&
-          myShiftPressed == myViewer.getModifierProvider().isShiftPressed()) {
+      if (!areModifiersChanged()) {
         return;
       }
       myHighlighter.setGutterIconRenderer(createRenderer());
     }
 
+    private boolean areModifiersChanged() {
+      return myCtrlPressed != myViewer.getModifierProvider().isCtrlPressed() ||
+             myShiftPressed != myViewer.getModifierProvider().isShiftPressed();
+    }
+
     @Nullable
     public GutterIconRenderer createRenderer() {
       assert myEditor1 != null && myEditor2 != null;
@@ -358,7 +365,9 @@ public class SimpleDiffChange {
         return icon;
       }
 
-      public boolean isNavigateAction() { return true; }
+      public boolean isNavigateAction() {
+        return true;
+      }
 
       @Nullable
       @Override
index f8e35d04d2509d0a3864952815188ae96a3f2572..3a3f79c54edbcebaad32ad4bc07994e1361a2d1a 100644 (file)
@@ -28,7 +28,6 @@ import com.intellij.diff.fragments.LineFragmentImpl;
 import com.intellij.diff.requests.ContentDiffRequest;
 import com.intellij.diff.requests.DiffRequest;
 import com.intellij.diff.tools.util.*;
-import com.intellij.diff.tools.util.FoldingModelSupport.SimpleFoldingModel;
 import com.intellij.diff.tools.util.base.HighlightPolicy;
 import com.intellij.diff.tools.util.twoside.TwosideTextDiffViewer;
 import com.intellij.diff.util.DiffDividerDrawUtil;
@@ -38,6 +37,7 @@ import com.intellij.diff.util.DiffUtil.DocumentData;
 import com.intellij.diff.util.Side;
 import com.intellij.icons.AllIcons;
 import com.intellij.ide.IdeEventQueue;
+import com.intellij.openapi.Disposable;
 import com.intellij.openapi.actionSystem.AnAction;
 import com.intellij.openapi.actionSystem.AnActionEvent;
 import com.intellij.openapi.actionSystem.CommonDataKeys;
@@ -55,8 +55,10 @@ import com.intellij.openapi.progress.ProgressIndicator;
 import com.intellij.openapi.project.DumbAware;
 import com.intellij.openapi.util.Computable;
 import com.intellij.openapi.util.Pair;
+import com.intellij.openapi.util.UserDataHolder;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.ui.LightweightHint;
+import com.intellij.util.Function;
 import org.jetbrains.annotations.*;
 
 import javax.swing.*;
@@ -75,7 +77,7 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer {
   @NotNull private final List<SimpleDiffChange> myDiffChanges = new ArrayList<SimpleDiffChange>();
   @NotNull private final List<SimpleDiffChange> myInvalidDiffChanges = new ArrayList<SimpleDiffChange>();
 
-  @Nullable private final SimpleFoldingModel myFoldingModel;
+  @Nullable private final MyFoldingModel myFoldingModel;
   @NotNull private final ModifierProvider myModifierProvider;
 
   public SimpleDiffViewer(@NotNull DiffContext context, @NotNull DiffRequest request) {
@@ -147,10 +149,10 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer {
   }
 
   @Nullable
-  private SimpleFoldingModel createFoldingModel(@Nullable EditorEx editor1, @Nullable EditorEx editor2) {
+  private MyFoldingModel createFoldingModel(@Nullable EditorEx editor1, @Nullable EditorEx editor2) {
     if (editor1 == null || editor2 == null) return null;
 
-    return new SimpleFoldingModel(editor1, editor2, this);
+    return new MyFoldingModel(editor1, editor2, this);
   }
 
   @Override
@@ -961,4 +963,33 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer {
       }
     }
   }
+
+  private static class MyFoldingModel extends FoldingModelSupport {
+    private final MyPaintable myPaintable = new MyPaintable(0, 1);
+
+    public MyFoldingModel(@NotNull EditorEx editor1, @NotNull EditorEx editor2, @NotNull Disposable disposable) {
+      super(new EditorEx[]{editor1, editor2}, disposable);
+    }
+
+    public void install(@Nullable final List<LineFragment> fragments,
+                        @NotNull UserDataHolder context,
+                        boolean defaultExpanded,
+                        final int range) {
+      Iterator<int[]> it = map(fragments, new Function<LineFragment, int[]>() {
+        @Override
+        public int[] fun(LineFragment fragment) {
+          return new int[]{
+            fragment.getStartLine1(),
+            fragment.getEndLine1(),
+            fragment.getStartLine2(),
+            fragment.getEndLine2()};
+        }
+      });
+      install(it, context, defaultExpanded, range);
+    }
+
+    public void paintOnDivider(@NotNull Graphics2D gg, @NotNull Component divider) {
+      myPaintable.paintOnDivider(gg, divider);
+    }
+  }
 }
index 2cc638633ee6bdf419b62a7b9bc54d347fd091f5..f650529603b5df80dc15733058bfc83ea2073a79 100644 (file)
@@ -30,7 +30,6 @@ import com.intellij.diff.fragments.MergeLineFragment;
 import com.intellij.diff.requests.ContentDiffRequest;
 import com.intellij.diff.requests.DiffRequest;
 import com.intellij.diff.tools.util.*;
-import com.intellij.diff.tools.util.FoldingModelSupport.SimpleThreesideFoldingModel;
 import com.intellij.diff.tools.util.base.IgnorePolicy;
 import com.intellij.diff.tools.util.threeside.ThreesideTextDiffViewer;
 import com.intellij.diff.util.DiffDividerDrawUtil;
@@ -38,6 +37,7 @@ import com.intellij.diff.util.DiffUserDataKeysEx.ScrollToPolicy;
 import com.intellij.diff.util.DiffUtil;
 import com.intellij.diff.util.Side;
 import com.intellij.diff.util.ThreeSide;
+import com.intellij.openapi.Disposable;
 import com.intellij.openapi.actionSystem.AnAction;
 import com.intellij.openapi.actionSystem.Separator;
 import com.intellij.openapi.application.ApplicationManager;
@@ -49,8 +49,10 @@ import com.intellij.openapi.editor.ex.EditorEx;
 import com.intellij.openapi.progress.ProcessCanceledException;
 import com.intellij.openapi.progress.ProgressIndicator;
 import com.intellij.openapi.util.Computable;
+import com.intellij.openapi.util.UserDataHolder;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.ui.LightweightHint;
+import com.intellij.util.Function;
 import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.ui.ButtonlessScrollBarUI;
 import org.jetbrains.annotations.CalledInAwt;
@@ -61,6 +63,7 @@ import org.jetbrains.annotations.Nullable;
 import javax.swing.*;
 import java.awt.*;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 // TODO: extract common methods with Twoside
@@ -76,7 +79,7 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer {
   @NotNull private final List<SimpleThreesideDiffChange> myDiffChanges = new ArrayList<SimpleThreesideDiffChange>();
   @NotNull private final List<SimpleThreesideDiffChange> myInvalidDiffChanges = new ArrayList<SimpleThreesideDiffChange>();
 
-  @NotNull private final SimpleThreesideFoldingModel myFoldingModel;
+  @NotNull private final MyFoldingModel myFoldingModel;
 
   public SimpleThreesideDiffViewer(@NotNull DiffContext context, @NotNull DiffRequest request) {
     super(context, (ContentDiffRequest)request);
@@ -85,7 +88,7 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer {
     mySyncScrollable2 = new MySyncScrollable(Side.RIGHT);
     myPrevNextDifferenceIterable = new MyPrevNextDifferenceIterable();
     myStatusPanel = new MyStatusPanel();
-    myFoldingModel = new SimpleThreesideFoldingModel(myEditors.toArray(new EditorEx[3]), this);
+    myFoldingModel = new MyFoldingModel(myEditors.toArray(new EditorEx[3]), this);
   }
 
   @Override
@@ -159,15 +162,11 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer {
     try {
       indicator.checkCanceled();
 
-      DiffContent[] rawContents = myRequest.getContents();
-      final DocumentContent[] contents = new DocumentContent[3];
+      List<DiffContent> contents = myRequest.getContents();
       final Document[] documents = new Document[3];
-      contents[0] = (DocumentContent)rawContents[0];
-      contents[1] = (DocumentContent)rawContents[1];
-      contents[2] = (DocumentContent)rawContents[2];
-      documents[0] = contents[0].getDocument();
-      documents[1] = contents[1].getDocument();
-      documents[2] = contents[2].getDocument();
+      documents[0] = ((DocumentContent)contents.get(0)).getDocument();
+      documents[1] = ((DocumentContent)contents.get(1)).getDocument();
+      documents[2] = ((DocumentContent)contents.get(2)).getDocument();
 
       DocumentData data = ApplicationManager.getApplication().runReadAction(new Computable<DocumentData>() {
         @Override
@@ -556,7 +555,8 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer {
         if (!helper.process(diffChange.getStartLine(left), diffChange.getStartLine(right))) return;
         if (!helper.process(diffChange.getEndLine(left), diffChange.getEndLine(right))) return;
       }
-      helper.process(left.selectNotNull(myEditors).getDocument().getLineCount(), right.selectNotNull(myEditors).getDocument().getLineCount());
+      helper
+        .process(left.selectNotNull(myEditors).getDocument().getLineCount(), right.selectNotNull(myEditors).getDocument().getLineCount());
     }
   }
 
@@ -652,4 +652,39 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer {
       return mySequences;
     }
   }
+
+  private static class MyFoldingModel extends FoldingModelSupport {
+    private final MyPaintable myPaintable1 = new MyPaintable(0, 1);
+    private final MyPaintable myPaintable2 = new MyPaintable(1, 2);
+
+    public MyFoldingModel(@NotNull EditorEx[] editors, @NotNull Disposable disposable) {
+      super(editors, disposable);
+      assert editors.length == 3;
+    }
+
+    public void install(@Nullable List<MergeLineFragment> fragments, @NotNull UserDataHolder context, boolean defaultExpanded, int range) {
+      Iterator<int[]> it = map(fragments, new Function<MergeLineFragment, int[]>() {
+        @Override
+        public int[] fun(MergeLineFragment fragment) {
+          return new int[]{
+            fragment.getStartLine(ThreeSide.LEFT),
+            fragment.getEndLine(ThreeSide.LEFT),
+            fragment.getStartLine(ThreeSide.BASE),
+            fragment.getEndLine(ThreeSide.BASE),
+            fragment.getStartLine(ThreeSide.RIGHT),
+            fragment.getEndLine(ThreeSide.RIGHT)};
+        }
+      });
+      install(it, context, defaultExpanded, range);
+    }
+
+    public void paintOnDivider(@NotNull Graphics2D gg, @NotNull Component divider, @NotNull Side side) {
+      MyPaintable paintable = side.selectNotNull(myPaintable1, myPaintable2);
+      paintable.paintOnDivider(gg, divider);
+    }
+
+    public void paintOnScrollbar(@NotNull Graphics2D gg, int width) {
+      myPaintable2.paintOnScrollbar(gg, width);
+    }
+  }
 }
index f6ee8536f745c0552b5133725c28e9f95deeba87..e179cbf4fd92aa8324c64e5531f15636c755acfa 100644 (file)
  */
 package com.intellij.diff.tools.util;
 
-import com.intellij.diff.comparison.iterables.DiffIterableUtil.IntPair;
-import com.intellij.diff.fragments.LineFragment;
-import com.intellij.diff.fragments.MergeLineFragment;
 import com.intellij.diff.util.DiffDividerDrawUtil;
 import com.intellij.diff.util.DiffDrawUtil;
-import com.intellij.diff.util.Side;
-import com.intellij.diff.util.ThreeSide;
 import com.intellij.openapi.Disposable;
 import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.editor.Editor;
@@ -37,621 +32,478 @@ import com.intellij.openapi.util.Computable;
 import com.intellij.openapi.util.Key;
 import com.intellij.openapi.util.UserDataHolder;
 import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.util.Function;
+import com.intellij.util.containers.HashSet;
 import gnu.trove.TIntFunction;
+import org.jetbrains.annotations.Contract;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import java.awt.*;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 
 public class FoldingModelSupport {
   public static final String PLACEHOLDER = "     ";
 
-  public static class OnesideFoldingModel extends FoldingModelBase {
-    public OnesideFoldingModel(@NotNull EditorEx editor, @NotNull Disposable disposable) {
-      super(new EditorEx[]{editor}, disposable);
-    }
-
-    public void install(@Nullable final List<IntPair> changedLines,
-                        @NotNull UserDataHolder context,
-                        boolean defaultExpanded,
-                        final int range) {
-      if (changedLines == null) return;
-      if (range == -1) return;
-      final MyExpandSuggester suggester = new MyExpandSuggester(context.getUserData(CACHE_KEY), defaultExpanded);
-
-      invokeBatchOperation(new Runnable() {
-        @Override
-        public void run() {
-          int last = Integer.MIN_VALUE;
-          for (IntPair line : changedLines) {
-            addRange(last, line.val1, range, suggester);
-
-            last = line.val2;
-          }
-          addRange(last, Integer.MAX_VALUE, range, suggester);
-        }
-      });
+  private static final Key<FoldingCache> CACHE_KEY = Key.create("Diff.FoldingUtil.Cache");
 
-      updateLineNumbers();
-    }
-
-    private void addRange(int start1, int end1, int range, @NotNull MyExpandSuggester suggester) {
-      int count1 = myEditors[0].getDocument().getLineCount();
-
-      start1 = bound(start1 + range, 0, count1);
-      end1 = bound(end1 - range, 0, count1);
-
-      boolean expanded = suggester.getExpanded(start1, end1);
+  protected final int myCount;
+  @NotNull protected final EditorEx[] myEditors;
 
-      FoldRegion region1 = addFolding(myEditors[0], start1, end1, expanded);
-      if (region1 == null) return;
-      myFoldings.add(new FoldedBlock(new FoldRegion[]{region1}));
-    }
+  @NotNull protected final List<FoldedBlock> myFoldings = new ArrayList<FoldedBlock>();
 
-    private class MyExpandSuggester extends ExpandSuggesterBase {
-      public MyExpandSuggester(@Nullable FoldingCache cache, boolean defaultValue) {
-        super(cache, defaultValue);
-      }
+  private boolean myDuringSynchronize;
+  private boolean myShouldUpdateLineNumbers;
 
-      public boolean getExpanded(int start1, int end1) {
-        Boolean expanded1 = getCachedExpanded(start1, end1, 0);
+  public FoldingModelSupport(@NotNull EditorEx[] editors, @NotNull Disposable disposable) {
+    myEditors = editors;
+    myCount = myEditors.length;
 
-        return selectState(expanded1);
+    if (myCount > 1) {
+      for (int i = 0; i < myCount; i++) {
+        myEditors[i].getFoldingModel().addListener(new MyFoldingListener(i), disposable);
+        myEditors[i].getGutterComponentEx().setLineNumberConvertor(getLineConvertor(i));
       }
     }
-
-    @NotNull
-    public TIntFunction getLineNumberConvertor() {
-      return getLineConvertor(0);
-    }
   }
 
-  public static class SimpleFoldingModel extends FoldingModelBase {
-    private final MyPaintable myPaintable = new MyPaintable(0, 1);
+  //
+  // Init
+  //
 
-    public SimpleFoldingModel(@NotNull EditorEx editor1, @NotNull EditorEx editor2, @NotNull Disposable disposable) {
-      super(new EditorEx[]{editor1, editor2}, disposable);
+  /*
+   * Iterator returns ranges of changed lines: start1, end1, start2, end2, ...
+   */
+  protected void install(@Nullable final Iterator<int[]> changedLines,
+                         @NotNull final UserDataHolder context,
+                         final boolean defaultExpanded,
+                         final int range) {
+    ApplicationManager.getApplication().assertIsDispatchThread();
 
-      for (int i = 0; i < myCount; i++) {
-        myEditors[i].getFoldingModel().addListener(new MyListener(i), disposable);
-        myEditors[i].getGutterComponentEx().setLineNumberConvertor(getLineConvertor(i));
-      }
-    }
+    if (changedLines == null) return;
+    if (range == -1) return;
 
-    public void install(@Nullable final List<LineFragment> fragments,
-                        @NotNull UserDataHolder context,
-                        boolean defaultExpanded,
-                        final int range) {
-      if (fragments == null) return;
-      if (range == -1) return;
-      final MyExpandSuggester suggester = new MyExpandSuggester(context.getUserData(CACHE_KEY), defaultExpanded);
-
-      invokeBatchOperation(new Runnable() {
-        @Override
-        public void run() {
-          int last1 = Integer.MIN_VALUE;
-          int last2 = Integer.MIN_VALUE;
-          for (LineFragment fragment : fragments) {
-            addRange(last1, fragment.getStartLine1(), last2, fragment.getStartLine2(), range, suggester);
+    runBatchOperation(new Runnable() {
+      @Override
+      public void run() {
+        ExpandSuggester expandSuggester = new ExpandSuggester(context.getUserData(CACHE_KEY), defaultExpanded);
 
-            last1 = fragment.getEndLine1();
-            last2 = fragment.getEndLine2();
-          }
-          addRange(last1, Integer.MAX_VALUE, last2, Integer.MAX_VALUE, range, suggester);
+        int[] lineCount = new int[myCount];
+        for (int i = 0; i < myCount; i++) {
+          lineCount[i] = myEditors[i].getDocument().getLineCount();
         }
-      });
 
-      updateLineNumbers();
-    }
+        int[] starts = new int[myCount];
+        int[] ends = new int[myCount];
 
-    private void addRange(int start1, int end1, int start2, int end2, int range, @NotNull MyExpandSuggester suggester) {
-      int count1 = myEditors[0].getDocument().getLineCount();
-      int count2 = myEditors[1].getDocument().getLineCount();
+        int[] last = new int[myCount];
+        for (int i = 0; i < myCount; i++) {
+          last[i] = Integer.MIN_VALUE;
+        }
 
-      start1 = bound(start1 + range, 0, count1);
-      start2 = bound(start2 + range, 0, count2);
-      end1 = bound(end1 - range, 0, count1);
-      end2 = bound(end2 - range, 0, count2);
+        while (changedLines.hasNext()) {
+          int[] offsets = changedLines.next();
 
-      boolean expanded = suggester.getExpanded(start1, end1, start2, end2);
+          for (int i = 0; i < myCount; i++) {
+            starts[i] = bound(last[i] + range, 0, lineCount[i]);
+            ends[i] = bound(offsets[i * 2] - range, 0, lineCount[i]);
+          }
+          addRange(starts, ends, expandSuggester.isExpanded(starts, ends));
 
-      FoldRegion region1 = addFolding(myEditors[0], start1, end1, expanded);
-      FoldRegion region2 = addFolding(myEditors[1], start2, end2, expanded);
-      if (region1 == null && region2 == null) return;
-      myFoldings.add(new FoldedBlock(new FoldRegion[]{region1, region2}));
-    }
+          for (int i = 0; i < myCount; i++) {
+            last[i] = offsets[i * 2 + 1];
+          }
+        }
 
-    private class MyExpandSuggester extends ExpandSuggesterBase {
-      public MyExpandSuggester(@Nullable FoldingCache cache, boolean defaultValue) {
-        super(cache, defaultValue);
+        for (int i = 0; i < myCount; i++) {
+          starts[i] = bound(last[i] + range, 0, lineCount[i]);
+          ends[i] = bound(Integer.MAX_VALUE - range, 0, lineCount[i]);
+        }
+        addRange(starts, ends, expandSuggester.isExpanded(starts, ends));
       }
+    });
 
-      public boolean getExpanded(int start1, int end1, int start2, int end2) {
-        Boolean expanded1 = getCachedExpanded(start1, end1, 0);
-        Boolean expanded2 = getCachedExpanded(start2, end2, 1);
-
-        return selectState(expanded1, expanded2);
-      }
-    }
+    updateLineNumbers(true);
+  }
 
-    public void paintOnDivider(@NotNull Graphics2D gg, @NotNull Component divider) {
-      myPaintable.paintOnDivider(gg, divider);
+  private void addRange(int[] starts, int[] ends, boolean expanded) {
+    boolean hasFolding = false;
+    FoldRegion[] regions = new FoldRegion[myCount];
+    for (int i = 0; i < myCount; i++) {
+      if (ends[i] - starts[i] < 2) continue;
+      regions[i] = addFolding(myEditors[i], starts[i], ends[i], expanded);
+      hasFolding |= regions[i] != null;
     }
+    if (hasFolding) myFoldings.add(new FoldedBlock(regions));
   }
 
-  public static class SimpleThreesideFoldingModel extends FoldingModelBase {
-    private final MyPaintable myPaintable1 = new MyPaintable(0, 1);
-    private final MyPaintable myPaintable2 = new MyPaintable(1, 2);
-
-    public SimpleThreesideFoldingModel(@NotNull EditorEx[] editors, @NotNull Disposable disposable) {
-      super(editors, disposable);
-      assert editors.length == 3;
+  @Nullable
+  private static FoldRegion addFolding(@NotNull EditorEx editor, int start, int end, boolean expanded) {
+    DocumentEx document = editor.getDocument();
+    final int startOffset = document.getLineStartOffset(start);
+    final int endOffset = document.getLineEndOffset(end - 1);
 
-      for (int i = 0; i < myCount; i++) {
-        myEditors[i].getFoldingModel().addListener(new MyListener(i), disposable);
-        myEditors[i].getGutterComponentEx().setLineNumberConvertor(getLineConvertor(i));
-      }
-    }
+    FoldRegion value = editor.getFoldingModel().addFoldRegion(startOffset, endOffset, PLACEHOLDER);
+    if (value != null) value.setExpanded(expanded);
+    return value;
+  }
 
-    public void install(@Nullable final List<MergeLineFragment> fragments, @NotNull UserDataHolder context,
-                        boolean defaultExpanded, final int range) {
-      if (fragments == null) return;
-      if (range == -1) return;
-      final MyExpandSuggester suggester = new MyExpandSuggester(context.getUserData(CACHE_KEY), defaultExpanded);
+  private void runBatchOperation(@NotNull Runnable runnable) {
+    Runnable lastRunnable = runnable;
 
-      invokeBatchOperation(new Runnable() {
+    for (int i = 0; i < myCount; i++) {
+      final Editor editor = myEditors[i];
+      final Runnable finalRunnable = lastRunnable;
+      lastRunnable = new Runnable() {
         @Override
         public void run() {
-          int last1 = Integer.MIN_VALUE;
-          int last2 = Integer.MIN_VALUE;
-          int last3 = Integer.MIN_VALUE;
-          for (MergeLineFragment fragment : fragments) {
-            addRange(last1, fragment.getStartLine(ThreeSide.LEFT),
-                     last2, fragment.getStartLine(ThreeSide.BASE),
-                     last3, fragment.getStartLine(ThreeSide.RIGHT),
-                     range, suggester);
-
-            last1 = fragment.getEndLine(ThreeSide.LEFT);
-            last2 = fragment.getEndLine(ThreeSide.BASE);
-            last3 = fragment.getEndLine(ThreeSide.RIGHT);
-          }
-          addRange(last1, Integer.MAX_VALUE,
-                   last2, Integer.MAX_VALUE,
-                   last3, Integer.MAX_VALUE,
-                   range, suggester);
+          editor.getFoldingModel().runBatchFoldingOperation(new Runnable() {
+            @Override
+            public void run() {
+              finalRunnable.run();
+            }
+          });
         }
-      });
-
-      updateLineNumbers();
+      };
     }
 
-    private void addRange(int start1, int end1, int start2, int end2, int start3, int end3,
-                          int range, @NotNull MyExpandSuggester suggester) {
-      int count1 = myEditors[0].getDocument().getLineCount();
-      int count2 = myEditors[1].getDocument().getLineCount();
-      int count3 = myEditors[2].getDocument().getLineCount();
-
-      start1 = bound(start1 + range, 0, count1);
-      start2 = bound(start2 + range, 0, count2);
-      start3 = bound(start3 + range, 0, count3);
-      end1 = bound(end1 - range, 0, count1);
-      end2 = bound(end2 - range, 0, count2);
-      end3 = bound(end3 - range, 0, count3);
-
-      boolean expanded = suggester.getExpanded(start1, end1, start2, end2, start3, end3);
-
-      FoldRegion region1 = addFolding(myEditors[0], start1, end1, expanded);
-      FoldRegion region2 = addFolding(myEditors[1], start2, end2, expanded);
-      FoldRegion region3 = addFolding(myEditors[2], start3, end3, expanded);
-      if (region1 == null && region2 == null && region3 == null) return;
-      myFoldings.add(new FoldedBlock(new FoldRegion[]{region1, region2, region3}));
+    myDuringSynchronize = true;
+    try {
+      lastRunnable.run();
     }
-
-    private class MyExpandSuggester extends ExpandSuggesterBase {
-      public MyExpandSuggester(@Nullable FoldingCache cache, boolean defaultValue) {
-        super(cache, defaultValue);
-      }
-
-      public boolean getExpanded(int start1, int end1, int start2, int end2, int start3, int end3) {
-        Boolean expanded1 = getCachedExpanded(start1, end1, 0);
-        Boolean expanded2 = getCachedExpanded(start2, end2, 1);
-        Boolean expanded3 = getCachedExpanded(start3, end3, 2);
-
-        return selectState(expanded1, expanded2, expanded3);
-      }
+    finally {
+      myDuringSynchronize = false;
     }
+  }
 
-    public void paintOnDivider(@NotNull Graphics2D gg, @NotNull Component divider, @NotNull Side side) {
-      MyPaintable paintable = side.selectNotNull(myPaintable1, myPaintable2);
-      paintable.paintOnDivider(gg, divider);
+  public void destroy() {
+    for (int i = 0; i < myCount; i++) {
+      destroyFoldings(i);
     }
 
-    public void paintOnScrollbar(@NotNull Graphics2D gg, int width) {
-      myPaintable2.paintOnScrollbar(gg, width);
+    for (FoldedBlock folding : myFoldings) {
+      folding.destroyHighlighter();
     }
+    myFoldings.clear();
   }
 
-  private static abstract class FoldingModelBase {
-    protected static final Key<FoldingCache> CACHE_KEY = Key.create("Diff.FoldingUtil.SimpleCache");
+  private void destroyFoldings(final int index) {
+    final FoldingModelEx model = myEditors[index].getFoldingModel();
+    model.runBatchFoldingOperation(new Runnable() {
+      @Override
+      public void run() {
+        for (FoldedBlock folding : myFoldings) {
+          FoldRegion region = folding.getRegion(index);
+          if (region != null) model.removeFoldRegion(region);
+        }
+      }
+    });
+  }
 
-    protected final int myCount;
-    @NotNull protected final EditorEx[] myEditors;
+  //
+  // Line numbers
+  //
 
-    @NotNull protected final List<FoldedBlock> myFoldings = new ArrayList<FoldedBlock>();
+  public void onDocumentChanged(@NotNull DocumentEvent e) {
+    if (StringUtil.indexOf(e.getOldFragment(), '\n') != -1 ||
+        StringUtil.indexOf(e.getNewFragment(), '\n') != -1) {
+      myShouldUpdateLineNumbers = true;
+    }
+  }
 
-    private boolean myDuringSynchronize;
-    private boolean myShouldUpdateLineNumbers;
+  @NotNull
+  protected TIntFunction getLineConvertor(final int index) {
+    return new TIntFunction() {
+      @Override
+      public int execute(int value) {
+        updateLineNumbers(false);
+        for (FoldedBlock folding : myFoldings) {
+          int line = folding.getLine(index);
+          if (line == -1) continue;
+          if (line > value) break;
+          FoldRegion region = folding.getRegion(index);
+          if (line == value && region != null && !region.isExpanded()) return -1;
+        }
+        return value;
+      }
+    };
+  }
 
-    public FoldingModelBase(@NotNull EditorEx[] editors, @NotNull Disposable disposable) {
-      myEditors = editors;
-      myCount = myEditors.length;
+  private void updateLineNumbers(boolean force) {
+    if (!myShouldUpdateLineNumbers && !force) return;
+    ApplicationManager.getApplication().assertReadAccessAllowed();
+    for (FoldedBlock folding : myFoldings) {
+      folding.updateLineNumbers();
     }
+    myShouldUpdateLineNumbers = false;
+  }
 
-    //
-    // Init
-    //
-
-    protected void invokeBatchOperation(@NotNull Runnable runnable) {
-      Runnable lastRunnable = runnable;
+  //
+  // Synchronized toggling of ranges
+  //
 
+  public void expandAll(final boolean expanded) {
+    if (myDuringSynchronize) return;
+    myDuringSynchronize = true;
+    try {
       for (int i = 0; i < myCount; i++) {
-        final Editor editor = myEditors[i];
-        final Runnable finalRunnable = lastRunnable;
-        lastRunnable = new Runnable() {
+        final int index = i;
+        final FoldingModelEx model = myEditors[index].getFoldingModel();
+        model.runBatchFoldingOperation(new Runnable() {
           @Override
           public void run() {
-            editor.getFoldingModel().runBatchFoldingOperation(new Runnable() {
-              @Override
-              public void run() {
-                finalRunnable.run();
-              }
-            });
+            for (FoldedBlock folding : myFoldings) {
+              FoldRegion region = folding.getRegion(index);
+              if (region != null) region.setExpanded(expanded);
+            }
           }
-        };
+        });
       }
-
-      myDuringSynchronize = true;
-      try {
-        lastRunnable.run();
-      }
-      finally {
-        myDuringSynchronize = false;
-      }
-    }
-
-    @Nullable
-    protected static FoldRegion addFolding(@NotNull final EditorEx editor, int start, int end, final boolean expanded) {
-      assert ApplicationManager.getApplication().isReadAccessAllowed();
-      if (end - start < 2) return null;
-
-      DocumentEx document = editor.getDocument();
-      final int startOffset = document.getLineStartOffset(start);
-      final int endOffset = document.getLineEndOffset(end - 1);
-
-      FoldRegion value = editor.getFoldingModel().addFoldRegion(startOffset, endOffset, PLACEHOLDER);
-      if (value != null) value.setExpanded(expanded);
-      return value;
     }
-
-    public void destroy() {
-      for (int i = 0; i < myCount; i++) {
-        destroyFoldings(i);
-      }
-
-      for (FoldedBlock folding : myFoldings) {
-        folding.destroyHighlighter();
-      }
-      myFoldings.clear();
-    }
-
-    private void destroyFoldings(final int index) {
-      final FoldingModelEx model = myEditors[index].getFoldingModel();
-      model.runBatchFoldingOperation(new Runnable() {
-        @Override
-        public void run() {
-          for (FoldedBlock folding : myFoldings) {
-            FoldRegion region = folding.getRegion(index);
-            if (region != null) model.removeFoldRegion(region);
-          }
-        }
-      });
+    finally {
+      myDuringSynchronize = false;
     }
+  }
 
-    //
-    // Line numbers
-    //
+  private class MyFoldingListener implements FoldingListener {
+    private final int myIndex;
+    @NotNull Set<FoldRegion> myModifiedRegions = new HashSet<FoldRegion>();
 
-    public void onDocumentChanged(@NotNull DocumentEvent e) {
-      if (StringUtil.indexOf(e.getOldFragment(), '\n') != -1 ||
-          StringUtil.indexOf(e.getNewFragment(), '\n') != -1) {
-        myShouldUpdateLineNumbers = true;
-      }
+    public MyFoldingListener(int index) {
+      myIndex = index;
     }
 
-    @NotNull
-    protected TIntFunction getLineConvertor(final int index) {
-      return new TIntFunction() {
-        @Override
-        public int execute(int value) {
-          if (myShouldUpdateLineNumbers) updateLineNumbers();
-          for (FoldedBlock folding : myFoldings) {
-            int line = folding.getLine(index);
-            if (line == -1) continue;
-            if (line > value) break;
-            FoldRegion region = folding.getRegion(index);
-            if (line == value && region != null && !region.isExpanded()) return -1;
-          }
-          return value;
-        }
-      };
-    }
-
-    protected void updateLineNumbers() {
-      assert ApplicationManager.getApplication().isReadAccessAllowed();
-      for (FoldedBlock folding : myFoldings) {
-        folding.updateLineNumbers();
-      }
-      myShouldUpdateLineNumbers = false;
+    @Override
+    public void onFoldRegionStateChange(@NotNull FoldRegion region) {
+      if (myDuringSynchronize) return;
+      myModifiedRegions.add(region);
     }
 
-    //
-    // Synchronized toggling of ranges
-    //
-
-    public void expandAll(final boolean expanded) {
-      if (myDuringSynchronize) return;
+    @Override
+    public void onFoldProcessingEnd() {
+      if (myModifiedRegions.isEmpty()) return;
       myDuringSynchronize = true;
       try {
         for (int i = 0; i < myCount; i++) {
-          final int index = i;
-          final FoldingModelEx model = myEditors[index].getFoldingModel();
-          model.runBatchFoldingOperation(new Runnable() {
+          if (i == myIndex) continue;
+          final int pairedIndex = i;
+          myEditors[pairedIndex].getFoldingModel().runBatchFoldingOperation(new Runnable() {
             @Override
             public void run() {
               for (FoldedBlock folding : myFoldings) {
-                FoldRegion region = folding.getRegion(index);
-                if (region != null) region.setExpanded(expanded);
+                FoldRegion region = folding.getRegion(myIndex);
+                if (region == null || !region.isValid()) continue;
+                if (myModifiedRegions.contains(region)) {
+                  FoldRegion pairedRegion = folding.getRegion(pairedIndex);
+                  if (pairedRegion == null || !pairedRegion.isValid()) continue;
+                  pairedRegion.setExpanded(region.isExpanded());
+                }
               }
             }
           });
         }
+
+        myModifiedRegions.clear();
       }
       finally {
         myDuringSynchronize = false;
       }
     }
+  }
 
-    private void updatePairedRegion(@NotNull FoldRegion region, int index, int pairedIndex) {
-      FoldRegion pairedRegion = null;
-      for (FoldedBlock folding : myFoldings) {
-        if (folding.getRegion(index) == region) {
-          pairedRegion = folding.getRegion(pairedIndex);
-          break;
-        }
-      }
-      if (pairedRegion == null) return;
-      if (!region.isValid() || !pairedRegion.isValid()) return;
-      pairedRegion.setExpanded(region.isExpanded());
-    }
-
-    protected class MyListener implements FoldingListener {
-      private final int myIndex;
-      @NotNull List<FoldRegion> myModifiedRegions = new ArrayList<FoldRegion>();
+  //
+  // Highlighting
+  //
 
-      public MyListener(int index) {
-        myIndex = index;
-      }
+  protected class MyPaintable implements DiffDividerDrawUtil.DividerSeparatorPaintable {
+    private final int myLeft;
+    private final int myRight;
 
-      @Override
-      public void onFoldRegionStateChange(@NotNull FoldRegion region) {
-        if (myDuringSynchronize) return;
-        myModifiedRegions.add(region);
-      }
-
-      @Override
-      public void onFoldProcessingEnd() {
-        myDuringSynchronize = true;
-        try {
-          for (int i = 0; i < myCount; i++) {
-            if (i == myIndex) continue;
-            final int pairedIndex = i;
-            myEditors[pairedIndex].getFoldingModel().runBatchFoldingOperation(new Runnable() {
-              @Override
-              public void run() {
-                for (final FoldRegion region : myModifiedRegions) {
-                  updatePairedRegion(region, myIndex, pairedIndex);
-                }
-              }
-            });
-          }
+    public MyPaintable(int left, int right) {
+      myLeft = left;
+      myRight = right;
+    }
 
-          myModifiedRegions.clear();
-        }
-        finally {
-          myDuringSynchronize = false;
-        }
+    @Override
+    public void process(@NotNull Handler handler) {
+      for (FoldedBlock folding : myFoldings) {
+        if (folding.myRegions[myLeft] == null || folding.myRegions[myRight] == null) continue;
+        if (folding.myRegions[myLeft].isExpanded() || folding.myRegions[myRight].isExpanded()) continue;
+        int line1 = myEditors[myLeft].getDocument().getLineNumber(folding.myRegions[myLeft].getStartOffset());
+        int line2 = myEditors[myRight].getDocument().getLineNumber(folding.myRegions[myRight].getStartOffset());
+        if (!handler.process(line1, line2)) return;
       }
     }
 
-    //
-    // Highlighting
-    //
-
-    protected class MyPaintable implements DiffDividerDrawUtil.DividerSeparatorPaintable {
-      private final int myLeft;
-      private final int myRight;
+    public void paintOnDivider(@NotNull Graphics2D gg, @NotNull Component divider) {
+      DiffDividerDrawUtil.paintSeparators(gg, divider.getWidth(), myEditors[myLeft], myEditors[myRight], this);
+    }
 
-      public MyPaintable(int left, int right) {
-        myLeft = left;
-        myRight = right;
-      }
+    public void paintOnScrollbar(@NotNull Graphics2D gg, int width) {
+      DiffDividerDrawUtil.paintSeparatorsOnScrollbar(gg, width, myEditors[myLeft], myEditors[myRight], this);
+    }
+  }
 
-      @Override
-      public void process(@NotNull Handler handler) {
-        for (FoldedBlock folding : myFoldings) {
-          if (folding.myRegions[myLeft] == null || folding.myRegions[myRight] == null) continue;
-          if (folding.myRegions[myLeft].isExpanded() || folding.myRegions[myRight].isExpanded()) continue;
-          int line1 = myEditors[myLeft].getDocument().getLineNumber(folding.myRegions[myLeft].getStartOffset());
-          int line2 = myEditors[myRight].getDocument().getLineNumber(folding.myRegions[myRight].getStartOffset());
-          handler.process(line1, line2);
-        }
-      }
+  //
+  // Cache
+  //
 
-      public void paintOnDivider(@NotNull Graphics2D gg, @NotNull Component divider) {
-        DiffDividerDrawUtil.paintSeparators(gg, divider.getWidth(), myEditors[myLeft], myEditors[myRight], this);
-      }
+  private class ExpandSuggester {
+    @Nullable private final FoldingCache myCache;
+    private final int[] myIndex = new int[myCount];
+    protected final boolean myDefault;
 
-      public void paintOnScrollbar(@NotNull Graphics2D gg, int width) {
-        DiffDividerDrawUtil.paintSeparatorsOnScrollbar(gg, width, myEditors[myLeft], myEditors[myRight], this);
-      }
+    public ExpandSuggester(@Nullable FoldingCache cache, boolean defaultValue) {
+      myCache = cache;
+      myDefault = defaultValue;
     }
 
-    //
-    // Cache
-    //
-
-    protected abstract class ExpandSuggesterBase {
-      @Nullable private final FoldingCache myCache;
-      private final int[] myIndex = new int[myCount];
-      protected final boolean myDefault;
+    public boolean isExpanded(int[] starts, int[] ends) {
+      if (myCache == null || myCache.myRanges.length != myCount) return myDefault;
+      if (myDefault != myCache.myExpandByDefault) return myDefault;
 
-      public ExpandSuggesterBase(@Nullable FoldingCache cache, boolean defaultValue) {
-        myCache = cache;
-        myDefault = defaultValue;
-      }
-
-      protected boolean selectState(Boolean... sides) {
-        Boolean state = null;
-        for (Boolean side : sides) {
-          if (side == null) continue;
-          if (state == null) {
-            state = side;
-            continue;
-          }
-          if (state != side) return myDefault;
+      Boolean state = null;
+      for (int i = 0; i < myCount; i++) {
+        Boolean sideState = getCachedExpanded(starts[i], ends[i], i);
+        if (sideState == null) continue;
+        if (state == null) {
+          state = sideState;
+          continue;
         }
-        return state == null ? myDefault : state;
+        if (state != sideState) return myDefault;
       }
+      return state == null ? myDefault : state;
+    }
 
-      @Nullable
-      protected Boolean getCachedExpanded(int start, int end, int index) {
-        if (myCache == null || myCache.myRanges.length != myCount) return null;
-        if (start == end) return null;
-        if (myDefault != myCache.myExpandByDefault) return myDefault;
-
-        List<FoldedRange> ranges = myCache.myRanges[index];
-        for (; myIndex[index] < ranges.size(); myIndex[index]++) {
-          FoldedRange range = ranges.get(myIndex[index]);
-          if (range.myEndLine <= start) continue;
-          if (range.myStartLine >= end) return null;
-          if (range.myStartLine < end && range.myEndLine > start) {
-            return range.myExpanded;
-          }
+    @Nullable
+    private Boolean getCachedExpanded(int start, int end, int index) {
+      if (start == end) return null;
+
+      List<FoldedRangeState> ranges = myCache.myRanges[index];
+      for (; myIndex[index] < ranges.size(); myIndex[index]++) {
+        FoldedRangeState range = ranges.get(myIndex[index]);
+        if (range.myEndLine <= start) continue;
+        if (range.myStartLine >= end) return null;
+        if (range.myStartLine <= start && range.myEndLine >= end) {
+          return range.myExpanded;
         }
-        return null;
       }
+      return null;
     }
+  }
 
-    public void updateContext(@NotNull UserDataHolder context, boolean defaultState) {
-      if (myFoldings.isEmpty()) return; // do not rewrite cache by initial state
-      context.putUserData(CACHE_KEY, getFoldingCache(defaultState));
-    }
+  public void updateContext(@NotNull UserDataHolder context, boolean defaultState) {
+    if (myFoldings.isEmpty()) return; // do not rewrite cache by initial state
+    context.putUserData(CACHE_KEY, getFoldingCache(defaultState));
+  }
 
-    @NotNull
-    private FoldingCache getFoldingCache(final boolean defaultState) {
-      return ApplicationManager.getApplication().runReadAction(new Computable<FoldingCache>() {
-        @Override
-        public FoldingCache compute() {
-          List<FoldedRange>[] result = new List[myCount];
-          for (int i = 0; i < myCount; i++) {
-            result[i] = getFoldedRanges(i);
-          }
-          return new FoldingCache(result, defaultState);
+  @NotNull
+  private FoldingCache getFoldingCache(final boolean defaultState) {
+    return ApplicationManager.getApplication().runReadAction(new Computable<FoldingCache>() {
+      @Override
+      public FoldingCache compute() {
+        List<FoldedRangeState>[] result = new List[myCount];
+        for (int i = 0; i < myCount; i++) {
+          result[i] = getFoldedRanges(i);
         }
-      });
-    }
-
-    @NotNull
-    private List<FoldedRange> getFoldedRanges(int index) {
-      ApplicationManager.getApplication().assertIsDispatchThread();
-      List<FoldedRange> ranges = new ArrayList<FoldedRange>(myFoldings.size());
-      for (FoldedBlock folding : myFoldings) {
-        FoldRegion region = folding.getRegion(index);
-        if (region == null || !region.isValid()) continue;
-        DocumentEx document = myEditors[index].getDocument();
-        int line1 = document.getLineNumber(region.getStartOffset());
-        int line2 = document.getLineNumber(region.getEndOffset()) + 1;
-        ranges.add(new FoldedRange(line1, line2, region.isExpanded()));
+        return new FoldingCache(result, defaultState);
       }
-      return ranges;
-    }
+    });
+  }
+
+  @NotNull
+  private List<FoldedRangeState> getFoldedRanges(int index) {
+    ApplicationManager.getApplication().assertReadAccessAllowed();
+    List<FoldedRangeState> ranges = new ArrayList<FoldedRangeState>();
+    for (FoldedBlock folding : myFoldings) {
+      FoldRegion region = folding.getRegion(index);
+      if (region == null || !region.isValid()) continue;
+      DocumentEx document = myEditors[index].getDocument();
+      int line1 = document.getLineNumber(region.getStartOffset());
+      int line2 = document.getLineNumber(region.getEndOffset()) + 1;
+      ranges.add(new FoldedRangeState(line1, line2, region.isExpanded()));
+    }
+    return ranges;
+  }
 
-    protected static class FoldingCache {
-      public final boolean myExpandByDefault;
-      @NotNull public final List<FoldedRange>[] myRanges;
+  private static class FoldingCache {
+    public final boolean myExpandByDefault;
+    @NotNull public final List<FoldedRangeState>[] myRanges;
 
-      public FoldingCache(@NotNull List<FoldedRange>[] ranges, boolean expandByDefault) {
-        myRanges = ranges;
-        myExpandByDefault = expandByDefault;
-      }
+    public FoldingCache(@NotNull List<FoldedRangeState>[] ranges, boolean expandByDefault) {
+      myRanges = ranges;
+      myExpandByDefault = expandByDefault;
     }
+  }
 
-    //
-    // Impl
-    //
+  private static class FoldedRangeState {
+    public final int myStartLine;
+    public final int myEndLine;
+    public final boolean myExpanded;
 
-    protected class FoldedBlock {
-      @NotNull protected final FoldRegion[] myRegions;
-      @NotNull private final List<RangeHighlighter> myHighlighters = new ArrayList<RangeHighlighter>();
+    public FoldedRangeState(int startLine, int endLine, boolean expanded) {
+      myStartLine = startLine;
+      myEndLine = endLine;
+      myExpanded = expanded;
+    }
+  }
 
-      private final int[] myLines = new int[myCount];
+  //
+  // Impl
+  //
 
-      public FoldedBlock(@NotNull FoldRegion[] regions) {
-        assert regions.length == myCount;
-        myRegions = regions;
+  protected class FoldedBlock {
+    @NotNull private final FoldRegion[] myRegions;
+    @NotNull private final int[] myLines;
+    @NotNull private final List<RangeHighlighter> myHighlighters = new ArrayList<RangeHighlighter>(myCount);
 
-        installHighlighter();
-      }
+    public FoldedBlock(@NotNull FoldRegion[] regions) {
+      assert regions.length == myCount;
+      myRegions = regions;
+      myLines = new int[myCount];
+
+      installHighlighter();
+    }
 
-      public void installHighlighter() {
-        assert myHighlighters.isEmpty();
+    public void installHighlighter() {
+      assert myHighlighters.isEmpty();
 
-        for (int i = 0; i < myCount; i++) {
-          FoldRegion region = myRegions[i];
-          if (region == null || !region.isValid()) continue;
-          myHighlighters.add(createFoldingHighlighter(myEditors[i], region));
-        }
+      for (int i = 0; i < myCount; i++) {
+        FoldRegion region = myRegions[i];
+        if (region == null || !region.isValid()) continue;
+        myHighlighters.add(createFoldingHighlighter(myEditors[i], region));
       }
+    }
 
-      public void destroyHighlighter() {
-        for (RangeHighlighter highlighter : myHighlighters) {
-          highlighter.dispose();
-        }
-        myHighlighters.clear();
+    public void destroyHighlighter() {
+      for (RangeHighlighter highlighter : myHighlighters) {
+        highlighter.dispose();
       }
+      myHighlighters.clear();
+    }
 
-      public void updateLineNumbers() {
-        for (int i = 0; i < myCount; i++) {
-          FoldRegion region = myRegions[i];
-          if (region == null || !region.isValid()) {
-            myLines[i] = -1;
-          }
-          else {
-            myLines[i] = myEditors[i].getDocument().getLineNumber(region.getStartOffset());
-          }
+    public void updateLineNumbers() {
+      for (int i = 0; i < myCount; i++) {
+        FoldRegion region = myRegions[i];
+        if (region == null || !region.isValid()) {
+          myLines[i] = -1;
+        }
+        else {
+          myLines[i] = myEditors[i].getDocument().getLineNumber(region.getStartOffset());
         }
       }
+    }
 
-      @Nullable
-      public FoldRegion getRegion(int index) {
-        return myRegions[index];
-      }
+    @Nullable
+    public FoldRegion getRegion(int index) {
+      return myRegions[index];
+    }
 
-      public int getLine(int index) {
-        return myLines[index];
-      }
+    public int getLine(int index) {
+      return myLines[index];
     }
   }
 
@@ -663,33 +515,35 @@ public class FoldingModelSupport {
     return Math.min(Math.max(value, min), max);
   }
 
-  @NotNull
-  private static RangeHighlighter createFoldingHighlighter(@NotNull Editor editor, @NotNull FoldRegion region) {
-    return DiffDrawUtil.createLineSeparatorHighlighter(editor, region.getStartOffset(), region.getEndOffset(), new RangeCondition(region));
-  }
-
-  private static class RangeCondition implements BooleanGetter {
-    @NotNull private final FoldRegion myRegion;
+  @Nullable
+  @Contract("null, _ -> null; !null, _ -> !null")
+  protected static <T, V> Iterator<V> map(@Nullable final List<T> list, @NotNull final Function<T, V> mapping) {
+    if (list == null) return null;
+    final Iterator<T> it = list.iterator();
+    return new Iterator<V>() {
+      @Override
+      public boolean hasNext() {
+        return it.hasNext();
+      }
 
-    public RangeCondition(@NotNull FoldRegion region) {
-      myRegion = region;
-    }
+      @Override
+      public V next() {
+        return mapping.fun(it.next());
+      }
 
-    @Override
-    public boolean get() {
-      return myRegion.isValid() && !myRegion.isExpanded();
-    }
+      @Override
+      public void remove() {
+      }
+    };
   }
 
-  private static class FoldedRange {
-    public final int myStartLine;
-    public final int myEndLine;
-    public final boolean myExpanded;
-
-    public FoldedRange(int startLine, int endLine, boolean expanded) {
-      myStartLine = startLine;
-      myEndLine = endLine;
-      myExpanded = expanded;
-    }
+  @NotNull
+  private static RangeHighlighter createFoldingHighlighter(@NotNull Editor editor, @NotNull final FoldRegion region) {
+    return DiffDrawUtil.createLineSeparatorHighlighter(editor, region.getStartOffset(), region.getEndOffset(), new BooleanGetter() {
+      @Override
+      public boolean get() {
+        return region.isValid() && !region.isExpanded();
+      }
+    });
   }
 }
index cd7413763c97e7960f46d514f22ce8f71d9cb350..adb42585db421cdbea2fe91a991815c1a45024ec 100644 (file)
@@ -142,7 +142,7 @@ public abstract class TextDiffViewerBase extends ListenerDiffViewerBase {
 
   @NotNull
   protected boolean[] checkForceReadOnly() {
-    int contentCount = myRequest.getContents().length;
+    int contentCount = myRequest.getContents().size();
     boolean[] result = new boolean[contentCount];
 
     if (DiffUtil.isUserDataFlagSet(DiffUserDataKeys.FORCE_READ_ONLY, myRequest, myContext)) {
index c4a89d7fc6e895981e5bc2c23f8e07f64b90926f..9c9069ca2fc2fff18398d4a95ea154857fae8c04 100644 (file)
@@ -88,8 +88,8 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase {
   public ThreesideTextDiffViewer(@NotNull DiffContext context, @NotNull ContentDiffRequest request) {
     super(context, request);
 
-    DiffContent[] contents = myRequest.getContents();
-    myActualContents = ContainerUtil.newArrayList((DocumentContent)contents[0], (DocumentContent)contents[1], (DocumentContent)contents[2]);
+    List<DiffContent> contents = myRequest.getContents();
+    myActualContents = ContainerUtil.newArrayList((DocumentContent)contents.get(0), (DocumentContent)contents.get(1), (DocumentContent)contents.get(2));
 
 
     myEditors = createEditors();
@@ -310,12 +310,12 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase {
   public static boolean canShowRequest(@NotNull DiffContext context, @NotNull DiffRequest request) {
     if (!(request instanceof ContentDiffRequest)) return false;
 
-    DiffContent[] contents = ((ContentDiffRequest)request).getContents();
-    if (contents.length != 3) return false;
+    List<DiffContent> contents = ((ContentDiffRequest)request).getContents();
+    if (contents.size() != 3) return false;
 
-    if (!canShowContent(contents[0])) return false;
-    if (!canShowContent(contents[1])) return false;
-    if (!canShowContent(contents[2])) return false;
+    if (!canShowContent(contents.get(0))) return false;
+    if (!canShowContent(contents.get(1))) return false;
+    if (!canShowContent(contents.get(2))) return false;
 
     return true;
   }
@@ -360,8 +360,8 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase {
 
     @Override
     public void actionPerformed(AnActionEvent e) {
-      DiffContent[] contents = myRequest.getContents();
-      String[] titles = myRequest.getContentTitles();
+      List<DiffContent> contents = myRequest.getContents();
+      List<String> titles = myRequest.getContentTitles();
 
       DiffRequest request = new SimpleDiffRequest(myRequest.getTitle(), mySide1.selectNotNull(contents), mySide2.selectNotNull(contents),
                                                   mySide1.selectNotNull(titles), mySide1.selectNotNull(titles));
index b61997dcd4c94103d4d27e7fccc3d2ab32bb0ecc..0195e8c2a8a6ca32eef6d4a8138398c225a26433 100644 (file)
@@ -87,9 +87,9 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase {
   public TwosideTextDiffViewer(@NotNull DiffContext context, @NotNull ContentDiffRequest request) {
     super(context, request);
 
-    DiffContent[] contents = myRequest.getContents();
-    myActualContent1 = contents[0] instanceof DocumentContent ? ((DocumentContent)contents[0]) : null;
-    myActualContent2 = contents[1] instanceof DocumentContent ? ((DocumentContent)contents[1]) : null;
+    List<DiffContent> contents = myRequest.getContents();
+    myActualContent1 = contents.get(0) instanceof DocumentContent ? ((DocumentContent)contents.get(0)) : null;
+    myActualContent2 = contents.get(1) instanceof DocumentContent ? ((DocumentContent)contents.get(1)) : null;
     assert myActualContent1 != null || myActualContent2 != null;
 
 
@@ -353,13 +353,13 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase {
   public static boolean canShowRequest(@NotNull DiffContext context, @NotNull DiffRequest request) {
     if (!(request instanceof ContentDiffRequest)) return false;
 
-    DiffContent[] contents = ((ContentDiffRequest)request).getContents();
-    if (contents.length != 2) return false;
+    List<DiffContent> contents = ((ContentDiffRequest)request).getContents();
+    if (contents.size() != 2) return false;
 
-    if (!canShowContent(contents[0])) return false;
-    if (!canShowContent(contents[1])) return false;
+    if (!canShowContent(contents.get(0))) return false;
+    if (!canShowContent(contents.get(1))) return false;
 
-    if (contents[0] instanceof EmptyContent && contents[1] instanceof EmptyContent) return false;
+    if (contents.get(0) instanceof EmptyContent && contents.get(1) instanceof EmptyContent) return false;
 
     return true;
   }
@@ -412,7 +412,7 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase {
     int editorHeight = myEditor1.getComponent().getHeight();
     int dividerOffset = divider.getLocationOnScreen().y;
     int editorOffset = myEditor1.getComponent().getLocationOnScreen().y;
-    return  (Graphics2D)g.create(0, editorOffset - dividerOffset, width, editorHeight);
+    return (Graphics2D)g.create(0, editorOffset - dividerOffset, width, editorHeight);
   }
 
   private class MyEditorFocusListener extends FocusAdapter {
index 5cf87e80015ec2f69a3c657ecfb057b6894a18b3..69cfcc8740715ca38c0ad4c094954f70805a6909 100644 (file)
@@ -256,9 +256,9 @@ public class DiffUtil {
 
   @NotNull
   public static List<JComponent> createSimpleTitles(@NotNull ContentDiffRequest request) {
-    String[] titles = request.getContentTitles();
+    List<String> titles = request.getContentTitles();
 
-    List<JComponent> components = new ArrayList<JComponent>(titles.length);
+    List<JComponent> components = new ArrayList<JComponent>(titles.size());
     for (String title : titles) {
       components.add(createTitle(title));
     }
@@ -268,8 +268,8 @@ public class DiffUtil {
 
   @NotNull
   public static List<JComponent> createTextTitles(@NotNull ContentDiffRequest request, @NotNull List<? extends Editor> editors) {
-    DiffContent[] contents = request.getContents();
-    String[] titles = request.getContentTitles();
+    List<DiffContent> contents = request.getContents();
+    List<String> titles = request.getContentTitles();
 
     List<Charset> charsets = ContainerUtil.map(contents, new Function<DiffContent, Charset>() {
       @Override
@@ -289,10 +289,10 @@ public class DiffUtil {
     boolean equalCharsets = isEqualElements(charsets);
     boolean equalSeparators = isEqualElements(separators);
 
-    List<JComponent> result = new ArrayList<JComponent>(contents.length);
+    List<JComponent> result = new ArrayList<JComponent>(contents.size());
 
-    for (int i = 0; i < contents.length; i++) {
-      result.add(createTitle(titles[i], contents[i], equalCharsets, equalSeparators, editors.get(i)));
+    for (int i = 0; i < contents.size(); i++) {
+      result.add(createTitle(titles.get(i), contents.get(i), equalCharsets, equalSeparators, editors.get(i)));
     }
 
     return result;
index cb3896f0bf588e289c7d3003b1c6a5623eef6ae4..c045e58a9e3a106dc07c155d4fb92c76001cea36 100644 (file)
       <reference id="Vcs.CherryPick"/>
       <add-to-group group-id="Vcs.Log.Toolbar"/>
     </group>
+
+    <group>
+      <reference ref="Vcs.CherryPick"/>
+      <reference ref="Vcs.Push"/>
+      <separator/>
+
+      <add-to-group group-id="VcsGeneral.KeymapGroup"/>
+    </group>
   </actions>
   <project-components>
     <component>
index 02c2d68a0e49f0381a3478220ce3b411a56c439d..9acf28f90ca1a18a3e2def2e2946963a336d0e9c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2014 JetBrains s.r.o.
+ * Copyright 2000-2015 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -32,7 +32,7 @@ public class PluginId implements Comparable<PluginId> {
 
   private final String myIdString;
 
-  private PluginId(String idString) {
+  private PluginId(@NotNull String idString) {
     myIdString = idString;
   }
 
@@ -63,6 +63,7 @@ public class PluginId implements Comparable<PluginId> {
   }
 
   @NonNls
+  @NotNull
   public String getIdString() {
     return myIdString;
   }
index a48e50f332c6ee697d351cf77c885c5eb8a686f1..882d618adeabdcecef10e8ea321eabdea3c4d131 100644 (file)
@@ -65,7 +65,7 @@ public class ExternalToolPass extends ProgressableTextEditorHighlightingPass {
                           @NotNull Editor editor,
                           int startOffset,
                           int endOffset) {
-    super(file.getProject(), editor.getDocument(), "External annotators", file, editor, new TextRange(startOffset, endOffset), false, HighlightInfoProcessor.getEmpty());
+    super(file.getProject(), editor.getDocument(), "External annotators", file, editor, new TextRange(startOffset, endOffset), false, new DefaultHighlightInfoProcessor());
     myAnnotationHolder = new AnnotationHolderImpl(new AnnotationSession(file));
 
     myExternalToolPassFactory = externalToolPassFactory;
index 6ff242108eedb1a757f32b6338c777f1bd06a353..acef25209d06d5ec3b5c4225fc71eca304778af7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2015 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -33,7 +33,7 @@ import org.jetbrains.annotations.NotNull;
 */
 class WolfHighlightingPass extends ProgressableTextEditorHighlightingPass implements DumbAware {
   WolfHighlightingPass(@NotNull Project project, @NotNull Document document, @NotNull PsiFile file) {
-    super(project, document, DaemonBundle.message("pass.wolf"), file, null, TextRange.EMPTY_RANGE, false, HighlightInfoProcessor.getEmpty());
+    super(project, document, DaemonBundle.message("pass.wolf"), file, null, TextRange.EMPTY_RANGE, false, new DefaultHighlightInfoProcessor());
   }
 
   @Override
index fab185e6ddc08b4b60aa80de82ae410620ccbdb4..73024b53862a4f39952e683a88c34174de231ba7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2014 JetBrains s.r.o.
+ * Copyright 2000-2015 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -239,7 +239,9 @@ public class WolfTheProblemSolverImpl extends WolfTheProblemSolver {
       if (!virtualFile.isValid() || orderVincentToCleanTheCar(virtualFile, progress)) {
         doRemove(virtualFile);
       }
-      if (virtualFile.isValid()) pass.advanceProgress(virtualFile.getLength());
+      if (virtualFile.isValid()) {
+        pass.advanceProgress(virtualFile.getLength());
+      }
     }
   }
 
index 799520b7932d50564463dd1f8ec5a424c8729c98..c07c599e5dad5143820d6f8ae2bd3e7b0749e288 100644 (file)
@@ -637,11 +637,11 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse
         if (renderer == null) {
           return;
         }
-        if (myEditor.getFoldingModel().isOffsetCollapsed(highlighter.getStartOffset())) {
+        if (!isHighlighterVisible(highlighter)) {
           return;
         }
-        VisualPosition visualPosition = myEditor.offsetToVisualPosition(highlighter.getStartOffset());
-        int line = EditorUtil.calcSurroundingRange(myEditor, visualPosition, visualPosition).getFirst().line;
+        int lineStartOffset = EditorUtil.getNotFoldedLineStartOffset(myEditor, highlighter.getStartOffset());
+        int line = myEditor.getDocument().getLineNumber(lineStartOffset);
         List<GutterMark> renderers = myLineToGutterRenderers.get(line);
         if (renderers == null) {
           renderers = new SmartList<GutterMark>();
@@ -675,6 +675,17 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse
     myLineMarkerAreaWidth = myIconsAreaWidth + FREE_PAINTERS_AREA_WIDTH;
   }
 
+  private boolean isHighlighterVisible(RangeHighlighter highlighter) {
+    int startOffset = highlighter instanceof RangeHighlighterEx ? 
+                      ((RangeHighlighterEx)highlighter).getAffectedAreaStartOffset() : 
+                      highlighter.getStartOffset();
+    int endOffset = highlighter instanceof RangeHighlighterEx ? 
+                    ((RangeHighlighterEx)highlighter).getAffectedAreaEndOffset() : 
+                    highlighter.getEndOffset();
+    FoldRegion foldRegion = myEditor.getFoldingModel().getCollapsedRegionAtOffset(startOffset);
+    return foldRegion == null || foldRegion.getEndOffset() < endOffset;
+  }
+
   private void paintGutterRenderers(final Graphics g, int firstVisibleOffset, int lastVisibleOffset) {
     Graphics2D g2 = (Graphics2D)g;
 
@@ -698,22 +709,12 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse
   }
 
   private void paintIcons(final int firstVisibleLine, final int lastVisibleLine, final Graphics g) {
-    myLineToGutterRenderers.forEachKey(new TIntProcedure() {
-      @Override
-      public boolean execute(int line) {
-        if (firstVisibleLine > line || lastVisibleLine < line) return true;
-        if (isLineCollapsed(line)) return true;
-        List<GutterMark> renderers = myLineToGutterRenderers.get(line);
+    for (int line = firstVisibleLine; line <= lastVisibleLine; line++) {
+      List<GutterMark> renderers = myLineToGutterRenderers.get(line);
+      if (renderers != null) {
         paintIconRow(line, renderers, g);
-        return true;
       }
-    });
-  }
-
-  private boolean isLineCollapsed(final int line) {
-    int startOffset = myEditor.getDocument().getLineStartOffset(line);
-    final FoldRegion region = myEditor.getFoldingModel().getCollapsedRegionAtOffset(startOffset);
-    return region != null && region.getEndOffset() >= myEditor.getDocument().getLineEndOffset(line);
+    }
   }
 
   private void paintIconRow(int line, List<GutterMark> row, final Graphics g) {
index 7aa7812371808c4e0693ddf31ecbd0812743fa37..985d0f13a7152eccaef35c169e8ae29d4b73a694 100644 (file)
@@ -571,7 +571,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
 
   @NotNull
   static Color adjustThumbColor(@NotNull Color base, boolean dark) {
-    return dark ? ColorUtil.withAlpha(ColorUtil.shift(base, 1.35), 0.5) 
+    return dark ? ColorUtil.withAlpha(ColorUtil.shift(base, 1.35), 0.5)
                 : ColorUtil.withAlpha(ColorUtil.shift(base, 0.68), 0.4);
   }
 
@@ -1115,7 +1115,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
 
   @NotNull
   @Override
-  public EditorGutterComponentEx getGutterComponentEx() {
+  public EditorGutterComponentImpl getGutterComponentEx() {
     return myGutterComponent;
   }
 
@@ -1710,7 +1710,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
 
   private void bulkUpdateStarted() {
     saveCaretRelativePosition();
-    
+
     myCaretModel.onBulkDocumentUpdateStarted();
     mySoftWrapModel.onBulkDocumentUpdateStarted();
     myFoldingModel.onBulkDocumentUpdateStarted();
@@ -1731,7 +1731,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
     updateGutterSize();
     repaintToScreenBottom(0);
     updateCaretCursor();
-    
+
     restoreCaretRelativePosition();
   }
 
@@ -3098,7 +3098,8 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
       y = logicalLineToY(line + 1);
     }
 
-    if (y < clip.y || y > clip.y + clip.height) return;
+    y -= 1;
+    if (y + getLineHeight() < clip.y || y > clip.y + clip.height) return;
 
     int endShift = clip.x + clip.width;
     g.setColor(separatorColor);
@@ -3108,10 +3109,10 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
     }
 
     if (lineSeparatorRenderer != null) {
-      lineSeparatorRenderer.drawLine(g, 0, endShift, y - 1);
+      lineSeparatorRenderer.drawLine(g, 0, endShift, y);
     }
     else {
-      UIUtil.drawLine(g, 0, y - 1, endShift, y - 1);
+      UIUtil.drawLine(g, 0, y, endShift, y);
     }
   }
 
@@ -3603,10 +3604,10 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
     draft.width += additionalSpace;
     return draft;
   }
-  
+
   private boolean shouldRespectAdditionalColumns() {
-    return !mySoftWrapModel.isSoftWrappingEnabled() 
-           || mySoftWrapModel.isRespectAdditionalColumns() 
+    return !mySoftWrapModel.isSoftWrappingEnabled()
+           || mySoftWrapModel.isRespectAdditionalColumns()
            || mySizeContainer.getContentSize().getWidth() > myScrollingModel.getVisibleArea().getWidth();
   }
 
@@ -4039,7 +4040,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
     // and, in the case of the positive answer, clear selection. Please note that there is a possible case that mouse click
     // is performed inside selection but it triggers context menu. We don't want to drop the selection then.
     if (myMousePressedEvent != null && myMousePressedEvent.getClickCount() == 1 && myMousePressedInsideSelection
-        && !myMousePressedEvent.isShiftDown() 
+        && !myMousePressedEvent.isShiftDown()
         && !myMousePressedEvent.isPopupTrigger()
         && !isToggleCaretEvent(myMousePressedEvent)
         && !isCreateRectangularSelectionEvent(myMousePressedEvent)) {
@@ -4337,7 +4338,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
     }
     myCaretModel.setCaretsAndSelections(caretStates);
   }
-  
+
   private Caret getLeadCaret() {
     List<Caret> allCarets = myCaretModel.getAllCarets();
     Caret firstCaret = allCarets.get(0);
@@ -5061,7 +5062,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
   MyScrollBar getVerticalScrollBar() {
     return myVerticalScrollBar;
   }
-  
+
   @NotNull
   MyScrollBar getHorizontalScrollBar() {
     return (MyScrollBar)myScrollPane.getHorizontalScrollBar();
index 82eceacf1547c55a9d7b00a8ebf6a49d91bf2b90..cca125c85f6f0fb3063a842f82c2e0d232bd3c0c 100644 (file)
@@ -368,9 +368,8 @@ public class FoldingModelImpl implements FoldingModelEx, PrioritizedDocumentList
 
     myEditor.updateCaretCursor();
     myEditor.recalculateSizeAndRepaint();
-    if (myEditor.getGutterComponentEx().isFoldingOutlineShown()) {
-      myEditor.getGutterComponentEx().repaint();
-    }
+    myEditor.getGutterComponentEx().updateSize();
+    myEditor.getGutterComponentEx().repaint();
 
     LogicalPosition caretPosition = myEditor.getCaretModel().getLogicalPosition();
     // There is a possible case that caret position is already visual position aware. But visual position depends on number of folded
index 091211c6d0282661a02262e2f4577149a80f369b..90516edf0d0e7a405dd35b6006bdeabaace95819 100644 (file)
                      groupKey="group.names.internationalization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.intellij.codeInspection.LossyEncodingInspection"/>
     <localInspection shortName="ProblematicWhitespace" bundle="messages.InspectionsBundle" key="problematic.whitespace.display.name"
-                     groupKey="group.names.code.style.issues" enabledByDefault="false" level="WARNING"
+                     groupName="General" enabledByDefault="false" level="WARNING"
                      implementationClass="com.intellij.codeInspection.ProblematicWhitespaceInspection"/>
     <localInspection shortName="TodoComment" bundle="messages.InspectionsBundle" key="todo.comment.display.name"
-                     groupBundle="messages.InspectionsBundle" groupKey="group.names.code.maturity.issues" enabledByDefault="false"
+                     groupName="General" enabledByDefault="false"
                      level="WARNING" implementationClass="com.intellij.codeInspection.TodoCommentInspection"/>
 
     <annotator language="TEXT" implementationClass="com.intellij.codeInsight.highlighting.LargeFilesAnnotator"/>
index 16edb2c61ac8cfeb46c06d8f9b9f788ffa76ba72..e66f6e70ba4932c6356dba37773f8b4eb68b2aa5 100644 (file)
     <getDataRule key="context.ProjectFileDirectory" implementationClass="com.intellij.ide.impl.dataRules.ProjectFileDirectoryRule"/>
 
     <localInspection shortName="InconsistentLineSeparators" bundle="messages.InspectionsBundle" key="inconsistent.line.separators"
-                     groupKey="group.names.portability.issues" enabledByDefault="false" level="WARNING"
+                     groupName="General" enabledByDefault="false" level="WARNING"
                      implementationClass="com.intellij.codeStyle.InconsistentLineSeparatorsInspection"/>
     <search.topHitProvider implementation="com.intellij.platform.DefaultPlatformTopHitProvider"/>
     <search.topHitProvider implementation="com.intellij.ide.ui.UISimpleSettingsProvider"/>
index 918e582009ea95568037cbfc6c343a45d3608026..03156a36546da468beaacabb43e7ea86afbe0254 100644 (file)
       <reference ref="Vcs.RollbackChangedLines"/>
       <reference ref="WelcomeScreen.GetFromVcs"/>
       <reference ref="Vcs.CopyRevisionNumberAction"/>
+      <separator/>
 
       <add-to-group group-id="VcsGeneral.KeymapGroup"/>
     </group>
index edb73a89713bfac5848ef4748bc568e5599fdd80..0d8eda07fcb11982a2cb8ce1f2f8d84a69608828 100644 (file)
@@ -7,23 +7,27 @@ import com.intellij.openapi.vcs.history.VcsFileRevision;
 import com.intellij.openapi.vcs.history.VcsRevisionNumber;
 import com.intellij.util.containers.HashMap;
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
 class AnnotateCurrentRevisionAction extends AnnotateRevisionAction {
-  @NotNull private final List<VcsFileRevision> myRevisions;
+  @Nullable private final List<VcsFileRevision> myRevisions;
 
   public AnnotateCurrentRevisionAction(@NotNull FileAnnotation annotation, @NotNull AbstractVcs vcs) {
     super("Annotate Revision", "Annotate selected revision in new tab", AllIcons.Actions.Annotate,
           annotation, vcs);
-    Map<VcsRevisionNumber, VcsFileRevision> map = new HashMap<VcsRevisionNumber, VcsFileRevision>();
     List<VcsFileRevision> revisions = annotation.getRevisions();
-    if (revisions != null) {
-      for (VcsFileRevision revision : revisions) {
-        map.put(revision.getRevisionNumber(), revision);
-      }
+    if (revisions == null) {
+      myRevisions = null;
+      return;
+    }
+
+    Map<VcsRevisionNumber, VcsFileRevision> map = new HashMap<VcsRevisionNumber, VcsFileRevision>();
+    for (VcsFileRevision revision : revisions) {
+      map.put(revision.getRevisionNumber(), revision);
     }
 
     myRevisions = new ArrayList<VcsFileRevision>(annotation.getLineCount());
@@ -33,7 +37,7 @@ class AnnotateCurrentRevisionAction extends AnnotateRevisionAction {
   }
 
   @Override
-  @NotNull
+  @Nullable
   public List<VcsFileRevision> getRevisions() {
     return myRevisions;
   }
index 8fc2c1258398d625b3f1c6326a040f32c6641597..476f63865f6aebe44fedbd6a1ac35132aaeaf5ca 100644 (file)
@@ -7,25 +7,29 @@ import com.intellij.openapi.vcs.history.VcsFileRevision;
 import com.intellij.openapi.vcs.history.VcsRevisionNumber;
 import com.intellij.util.containers.HashMap;
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
 class AnnotatePreviousRevisionAction extends AnnotateRevisionAction {
-  @NotNull private final List<VcsFileRevision> myRevisions;
+  @Nullable private final List<VcsFileRevision> myRevisions;
 
   public AnnotatePreviousRevisionAction(@NotNull FileAnnotation annotation, @NotNull AbstractVcs vcs) {
     super("Annotate Previous Revision", "Annotate successor of selected revision in new tab", AllIcons.Actions.Annotate,
           annotation, vcs);
-    Map<VcsRevisionNumber, VcsFileRevision> map = new HashMap<VcsRevisionNumber, VcsFileRevision>();
     List<VcsFileRevision> revisions = annotation.getRevisions();
-    if (revisions != null) {
-      for (int i = 0; i < revisions.size(); i++) {
-        VcsFileRevision revision = revisions.get(i);
-        VcsFileRevision previousRevision = i + 1 < revisions.size() ? revisions.get(i + 1) : null;
-        map.put(revision.getRevisionNumber(), previousRevision);
-      }
+    if (revisions == null) {
+      myRevisions = null;
+      return;
+    }
+
+    Map<VcsRevisionNumber, VcsFileRevision> map = new HashMap<VcsRevisionNumber, VcsFileRevision>();
+    for (int i = 0; i < revisions.size(); i++) {
+      VcsFileRevision revision = revisions.get(i);
+      VcsFileRevision previousRevision = i + 1 < revisions.size() ? revisions.get(i + 1) : null;
+      map.put(revision.getRevisionNumber(), previousRevision);
     }
 
     myRevisions = new ArrayList<VcsFileRevision>(annotation.getLineCount());
@@ -35,7 +39,7 @@ class AnnotatePreviousRevisionAction extends AnnotateRevisionAction {
   }
 
   @Override
-  @NotNull
+  @Nullable
   public List<VcsFileRevision> getRevisions() {
     return myRevisions;
   }
index ed9b07bf4e33a1d51b48367baa36c02fcad50860..aa61855cd802228295d848fbf9e20a9442d89589 100644 (file)
@@ -31,7 +31,18 @@ abstract class AnnotateRevisionAction extends AnnotateRevisionActionBase impleme
     myVcs = vcs;
   }
 
-  @NotNull
+  @Override
+  public void update(@NotNull AnActionEvent e) {
+    if (getRevisions() == null) {
+      e.getPresentation().setEnabledAndVisible(false);
+      return;
+    }
+    e.getPresentation().setVisible(true);
+
+    super.update(e);
+  }
+
+  @Nullable
   protected abstract List<VcsFileRevision> getRevisions();
 
   @Nullable
@@ -54,6 +65,7 @@ abstract class AnnotateRevisionAction extends AnnotateRevisionActionBase impleme
   @Override
   protected VcsFileRevision getFileRevision(@NotNull AnActionEvent e) {
     List<VcsFileRevision> revisions = getRevisions();
+    assert getRevisions() != null;
 
     if (currentLine < 0 || currentLine >= revisions.size()) return null;
     return revisions.get(currentLine);
index c9e33e5d5b4f0e57ede588b8d39d9d17cf302dce..4fc7f19673e6eb19b8a5ebc94bad70b38aaad3d6 100644 (file)
@@ -49,6 +49,7 @@ import com.intellij.openapi.vcs.merge.MergeData;
 import com.intellij.openapi.vfs.CharsetToolkit;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.util.ThreeState;
+import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.ui.UIUtil;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -272,14 +273,14 @@ public class ChangeDiffRequestProducer implements DiffRequestProducer {
         String afterRevisionTitle = getRevisionTitle(aRev, "Server version");
 
         String title = FileUtil.toSystemDependentName(file.getPresentableUrl());
-        String[] titles = new String[]{beforeRevisionTitle, "Base Version", afterRevisionTitle};
+        List<String> titles = ContainerUtil.list(beforeRevisionTitle, "Base Version", afterRevisionTitle);
 
         // Yep, we hope that it's a text file. And that charset wasn't changed.
-        DiffContent[] contents = new DiffContent[]{
+        List<DiffContent> contents = ContainerUtil.list(
           createTextContent(mergeData.CURRENT, file),
           createTextContent(mergeData.ORIGINAL, file),
           createTextContent(mergeData.LAST, file)
-        };
+        );
 
         SimpleDiffRequest request = new SimpleDiffRequest(title, contents, titles);
 
index 87d2d40ebf0e5d5e7acf598641113db5797a6525..2c69ab6725c63e9c7dc3fbfdde2f79c5554e1bd4 100644 (file)
@@ -48,6 +48,8 @@ import org.jetbrains.annotations.NonNls;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
@@ -88,14 +90,15 @@ public class MigrateToNewDiffUtil {
 
     com.intellij.openapi.diff.DiffContent[] contents = oldRequest.getContents();
     String[] titles = oldRequest.getContentTitles();
-    DiffContent[] newContents = new DiffContent[contents.length];
+    List<DiffContent> newContents = new ArrayList<DiffContent>(contents.length);
 
     for (int i = 0; i < contents.length; i++) {
-      newContents[i] = convertContent(oldRequest.getProject(), contents[i]);
-      if (newContents[i] == null) return null;
+      DiffContent convertedContent = convertContent(oldRequest.getProject(), contents[i]);
+      if (convertedContent == null) return null;
+      newContents.add(convertedContent);
     }
 
-    SimpleDiffRequest newRequest = new SimpleDiffRequest(oldRequest.getWindowTitle(), newContents, titles);
+    SimpleDiffRequest newRequest = new SimpleDiffRequest(oldRequest.getWindowTitle(), newContents, Arrays.asList(titles));
 
     newRequest.putUserData(DiffUserDataKeys.CONTEXT_ACTIONS, Collections.<AnAction>singletonList(new MyShowDiffAction(oldRequest)));
 
index 830e86f8c0c695ad172b69113de27deda271dad2..0b21a6b6ac8bd7c78f43feb8c8c2d625162e75f5 100644 (file)
@@ -72,6 +72,10 @@ public class RollbackLineStatusAction extends DumbAwareAction {
     if (carets.size() != 1) return true;
     Caret caret = carets.get(0);
     if (caret.hasSelection()) return true;
+    if (caret.getOffset() == editor.getDocument().getTextLength() &&
+        tracker.getRangeForLine(editor.getDocument().getLineCount()) != null) {
+      return true;
+    }
     return tracker.getRangeForLine(caret.getLogicalPosition().line) != null;
   }
 
index 0b621568428d8130f0e4b40fed3b29f678662520..47ce022bd4c1f2c0bafa19c4788f87a6a663ea86 100644 (file)
       <reference id="Vcs.CopyRevisionNumberAction"/>
       <reference id="Vcs.Log.CreatePatch"/>
     </group>
+
+    <group>
+      <reference ref="Vcs.Log.CreatePatch"/>
+      <reference ref="Vcs.Log.GoToRef"/>
+      <reference ref="Vcs.Log.QuickSettings"/>
+      <reference ref="Vcs.Log.IntelliSortChooser"/>
+      <separator/>
+
+      <add-to-group group-id="VcsGeneral.KeymapGroup"/>
+    </group>
   </actions>
 
 </idea-plugin>
index 9b4162f96faf900271b7c60193597e37b39e542b..b0f9978b77299eaf82ee673c12f079afe67b8ac6 100644 (file)
   <extensions defaultExtensionNs="com.intellij">
 
     <!--group.names.abstraction.issues-->
-    <localInspection language="JAVA" shortName="BooleanParameter" bundle="com.siyeh.InspectionGadgetsBundle" key="boolean.parameter.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="BooleanParameter" bundle="com.siyeh.InspectionGadgetsBundle" key="boolean.parameter.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.abstraction.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.abstraction.BooleanParameterInspection"/>
-    <localInspection language="JAVA" shortName="CastToConcreteClass" bundle="com.siyeh.InspectionGadgetsBundle" key="cast.to.concrete.class.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="CastToConcreteClass" bundle="com.siyeh.InspectionGadgetsBundle" key="cast.to.concrete.class.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.abstraction.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.abstraction.CastToConcreteClassInspection"/>
-    <localInspection language="JAVA" shortName="ClassReferencesSubclass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ClassReferencesSubclass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="class.references.subclass.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.abstraction.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.abstraction.ClassReferencesSubclassInspection"/>
-    <localInspection language="JAVA" suppressId="CollectionDeclaredAsConcreteClass" shortName="DeclareCollectionAsInterface"
+    <localInspection groupPath="Java" language="JAVA" suppressId="CollectionDeclaredAsConcreteClass" shortName="DeclareCollectionAsInterface"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="collection.declared.by.class.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.abstraction.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.abstraction.DeclareCollectionAsInterfaceInspection"/>
-    <localInspection language="JAVA" shortName="FeatureEnvy" bundle="com.siyeh.InspectionGadgetsBundle" key="feature.envy.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="FeatureEnvy" bundle="com.siyeh.InspectionGadgetsBundle" key="feature.envy.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.abstraction.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.abstraction.FeatureEnvyInspection"/>
-    <localInspection language="JAVA" shortName="InstanceVariableOfConcreteClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="InstanceVariableOfConcreteClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="instance.variable.of.concrete.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.abstraction.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.abstraction.InstanceVariableOfConcreteClassInspection"/>
-    <localInspection language="JAVA" suppressId="ChainOfInstanceofChecks" shortName="InstanceofChain" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ChainOfInstanceofChecks" shortName="InstanceofChain" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="chain.of.instanceof.checks.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.abstraction.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.abstraction.InstanceofChainInspection"/>
-    <localInspection language="JAVA" shortName="InstanceofInterfaces" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="InstanceofInterfaces" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="instanceof.concrete.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.abstraction.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.abstraction.InstanceofInterfacesInspection"/>
-    <localInspection language="JAVA" shortName="InstanceofThis" bundle="com.siyeh.InspectionGadgetsBundle" key="instanceof.check.for.this.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="InstanceofThis" bundle="com.siyeh.InspectionGadgetsBundle" key="instanceof.check.for.this.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.abstraction.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.abstraction.InstanceofThisInspection"/>
-    <localInspection language="JAVA" shortName="LocalVariableOfConcreteClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="LocalVariableOfConcreteClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="local.variable.of.concrete.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.abstraction.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.abstraction.LocalVariableOfConcreteClassInspection"/>
-    <localInspection language="JAVA" shortName="MagicNumber" bundle="com.siyeh.InspectionGadgetsBundle" key="magic.number.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="MagicNumber" bundle="com.siyeh.InspectionGadgetsBundle" key="magic.number.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.abstraction.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.abstraction.MagicNumberInspection"/>
-    <localInspection language="JAVA" shortName="MethodOnlyUsedFromInnerClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="MethodOnlyUsedFromInnerClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="method.only.used.from.inner.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.abstraction.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.abstraction.MethodOnlyUsedFromInnerClassInspection"/>
-    <localInspection language="JAVA" shortName="MethodReturnOfConcreteClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="MethodReturnOfConcreteClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="method.return.concrete.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.abstraction.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.abstraction.MethodReturnOfConcreteClassInspection"/>
-    <localInspection language="JAVA" shortName="OverlyStrongTypeCast" bundle="com.siyeh.InspectionGadgetsBundle" key="overly.strong.type.cast.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="OverlyStrongTypeCast" bundle="com.siyeh.InspectionGadgetsBundle" key="overly.strong.type.cast.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.abstraction.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.abstraction.OverlyStrongTypeCastInspection"/>
-    <localInspection language="JAVA" suppressId="MethodParameterOfConcreteClass" shortName="ParameterOfConcreteClass"
+    <localInspection groupPath="Java" language="JAVA" suppressId="MethodParameterOfConcreteClass" shortName="ParameterOfConcreteClass"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="concrete.class.method.parameter.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.abstraction.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.abstraction.ParameterOfConcreteClassInspection"/>
-    <localInspection language="JAVA" shortName="PublicMethodNotExposedInInterface" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="PublicMethodNotExposedInInterface" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="public.method.not.in.interface.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.abstraction.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.abstraction.PublicMethodNotExposedInInterfaceInspection"/>
-    <localInspection language="JAVA" shortName="StaticMethodOnlyUsedInOneClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="StaticMethodOnlyUsedInOneClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="static.method.only.used.in.one.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.abstraction.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.abstraction.StaticMethodOnlyUsedInOneClassInspection"/>
-    <localInspection language="JAVA" shortName="StaticVariableOfConcreteClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="StaticVariableOfConcreteClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="static.variable.of.concrete.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.abstraction.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.abstraction.StaticVariableOfConcreteClassInspection"/>
-    <localInspection language="JAVA" shortName="TypeMayBeWeakened" bundle="com.siyeh.InspectionGadgetsBundle" key="type.may.be.weakened.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="TypeMayBeWeakened" bundle="com.siyeh.InspectionGadgetsBundle" key="type.may.be.weakened.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.abstraction.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.abstraction.TypeMayBeWeakenedInspection"/>
 
     <!--group.names.assignment.issues-->
-    <localInspection language="JAVA" shortName="AssignmentToCatchBlockParameter" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AssignmentToCatchBlockParameter" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="assignment.to.catch.block.parameter.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.assignment.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.assignment.AssignmentToCatchBlockParameterInspection"/>
-    <localInspection language="JAVA" suppressId="AssignmentToCollectionOrArrayFieldFromParameter" shortName="AssignmentToCollectionFieldFromParameter"
+    <localInspection groupPath="Java" language="JAVA" suppressId="AssignmentToCollectionOrArrayFieldFromParameter" shortName="AssignmentToCollectionFieldFromParameter"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="assignment.collection.array.field.from.parameter.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.assignment.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.assignment.AssignmentToCollectionFieldFromParameterInspection"/>
-    <localInspection language="JAVA" shortName="AssignmentToDateFieldFromParameter" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AssignmentToDateFieldFromParameter" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="assignment.to.date.calendar.field.from.parameter.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.assignment.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.assignment.AssignmentToDateFieldFromParameterInspection"/>
-    <localInspection language="JAVA" shortName="AssignmentToForLoopParameter" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AssignmentToForLoopParameter" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="assignment.to.for.loop.parameter.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.assignment.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.assignment.AssignmentToForLoopParameterInspection"/>
-    <localInspection language="JAVA" shortName="AssignmentToLambdaParameter" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AssignmentToLambdaParameter" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="assignment.to.lambda.parameter.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.assignment.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.assignment.AssignmentToLambdaParameterInspection"/>
-    <localInspection language="JAVA" shortName="AssignmentToMethodParameter" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AssignmentToMethodParameter" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="assignment.to.method.parameter.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.assignment.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.assignment.AssignmentToMethodParameterInspection"/>
-    <localInspection language="JAVA" shortName="AssignmentToNull" bundle="com.siyeh.InspectionGadgetsBundle" key="assignment.to.null.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="AssignmentToNull" bundle="com.siyeh.InspectionGadgetsBundle" key="assignment.to.null.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.assignment.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.assignment.AssignmentToNullInspection"/>
-    <localInspection language="JAVA" shortName="AssignmentToStaticFieldFromInstanceMethod" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AssignmentToStaticFieldFromInstanceMethod" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="assignment.to.static.field.from.instance.method.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.assignment.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.assignment.AssignmentToStaticFieldFromInstanceMethodInspection"/>
-    <localInspection language="JAVA" shortName="AssignmentToSuperclassField" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AssignmentToSuperclassField" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="assignment.to.superclass.field.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.assignment.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.assignment.AssignmentToSuperclassFieldInspection"/>
-    <localInspection language="JAVA" shortName="AssignmentUsedAsCondition" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AssignmentUsedAsCondition" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="assignment.used.as.condition.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.assignment.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.assignment.AssignmentUsedAsConditionInspection"/>
-    <localInspection language="JAVA" suppressId="ValueOfIncrementOrDecrementUsed" shortName="IncrementDecrementUsedAsExpression"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ValueOfIncrementOrDecrementUsed" shortName="IncrementDecrementUsedAsExpression"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="increment.decrement.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.assignment.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.assignment.IncrementDecrementUsedAsExpressionInspection"/>
-    <localInspection language="JAVA" shortName="NestedAssignment" bundle="com.siyeh.InspectionGadgetsBundle" key="nested.assignment.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="NestedAssignment" bundle="com.siyeh.InspectionGadgetsBundle" key="nested.assignment.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.assignment.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.assignment.NestedAssignmentInspection"/>
-    <localInspection language="JAVA" suppressId="AssignmentReplaceableWithOperatorAssignment" shortName="ReplaceAssignmentWithOperatorAssignment"
+    <localInspection groupPath="Java" language="JAVA" suppressId="AssignmentReplaceableWithOperatorAssignment" shortName="ReplaceAssignmentWithOperatorAssignment"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="assignment.replaceable.with.operator.assignment.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.assignment.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.assignment.ReplaceAssignmentWithOperatorAssignmentInspection"/>
 
     <!--group.names.bitwise.operation.issues-->
-    <localInspection language="JAVA" suppressId="IncompatibleBitwiseMaskOperation" shortName="IncompatibleMask" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="IncompatibleBitwiseMaskOperation" shortName="IncompatibleMask" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="incompatible.mask.operation.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.bitwise.operation.issues" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bitwise.IncompatibleMaskInspection"/>
-    <localInspection language="JAVA" shortName="PointlessBitwiseExpression" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="PointlessBitwiseExpression" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="pointless.bitwise.expression.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.bitwise.operation.issues" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bitwise.PointlessBitwiseExpressionInspection"/>
-    <localInspection language="JAVA" shortName="ShiftOutOfRange" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ShiftOutOfRange" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="shift.operation.by.inappropriate.constant.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.bitwise.operation.issues" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bitwise.ShiftOutOfRangeInspection"/>
 
     <!--group.names.probable.bugs-->
-    <localInspection language="JAVA" shortName="ArrayEquality" bundle="com.siyeh.InspectionGadgetsBundle" key="array.comparison.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ArrayEquality" bundle="com.siyeh.InspectionGadgetsBundle" key="array.comparison.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.ArrayEqualityInspection"/>
-    <localInspection language="JAVA" shortName="ArrayEquals" bundle="com.siyeh.InspectionGadgetsBundle" key="equals.called.on.array.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ArrayEquals" bundle="com.siyeh.InspectionGadgetsBundle" key="equals.called.on.array.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.ArrayEqualsInspection"/>
-    <localInspection language="JAVA" shortName="ArrayHashCode" bundle="com.siyeh.InspectionGadgetsBundle" key="array.hash.code.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ArrayHashCode" bundle="com.siyeh.InspectionGadgetsBundle" key="array.hash.code.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.ArrayHashCodeInspection"/>
-    <localInspection language="JAVA" shortName="AssertWithSideEffects" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AssertWithSideEffects" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="assert.with.side.effects.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.AssertWithSideEffectsInspection"/>
-    <localInspection language="JAVA" shortName="ConstantAssertCondition" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ConstantAssertCondition" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="constant.assert.condition.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.ConstantAssertConditionInspection"/>
-    <localInspection language="JAVA" shortName="CastConflictsWithInstanceof" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="CastConflictsWithInstanceof" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="cast.conflicts.with.instanceof.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.CastConflictsWithInstanceofInspection"/>
-    <localInspection language="JAVA" shortName="CastToIncompatibleInterface" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="CastToIncompatibleInterface" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="casting.to.incompatible.interface.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.CastToIncompatibleInterfaceInspection"/>
-    <localInspection language="JAVA" shortName="ClassNewInstance" bundle="com.siyeh.InspectionGadgetsBundle" key="class.new.instance.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ClassNewInstance" bundle="com.siyeh.InspectionGadgetsBundle" key="class.new.instance.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.ClassNewInstanceInspection"/>
-    <localInspection language="JAVA" shortName="CollectionAddedToSelf" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="CollectionAddedToSelf" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="collection.added.to.self.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.CollectionAddedToSelfInspection"/>
-    <localInspection language="JAVA" shortName="ComparableImplementedButEqualsNotOverridden" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ComparableImplementedButEqualsNotOverridden" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="comparable.implemented.but.equals.not.overridden.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.ComparableImplementedButEqualsNotOverriddenInspection"/>
-    <localInspection language="JAVA" shortName="ComparatorMethodParameterNotUsed" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ComparatorMethodParameterNotUsed" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="comparator.method.parameter.not.used.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.ComparatorMethodParameterNotUsedInspection"/>
-    <localInspection language="JAVA" shortName="CompareToUsesNonFinalVariable" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="CompareToUsesNonFinalVariable" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="non.final.field.compareto.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.CompareToUsesNonFinalVariableInspection"/>
-    <localInspection language="JAVA" shortName="CovariantCompareTo" bundle="com.siyeh.InspectionGadgetsBundle" key="covariant.compareto.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="CovariantCompareTo" bundle="com.siyeh.InspectionGadgetsBundle" key="covariant.compareto.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.CovariantCompareToInspection"/>
-    <localInspection language="JAVA" shortName="CovariantEquals" bundle="com.siyeh.InspectionGadgetsBundle" key="covariant.equals.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="CovariantEquals" bundle="com.siyeh.InspectionGadgetsBundle" key="covariant.equals.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.CovariantEqualsInspection"/>
-    <localInspection language="JAVA" suppressId="EmptyClassInitializer" shortName="EmptyInitializer" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="EmptyClassInitializer" shortName="EmptyInitializer" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="empty.class.initializer.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.EmptyInitializerInspection"/>
-    <localInspection language="JAVA" suppressId="StatementWithEmptyBody" shortName="EmptyStatementBody" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="StatementWithEmptyBody" shortName="EmptyStatementBody" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="statement.with.empty.body.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.EmptyStatementBodyInspection"/>
-    <localInspection language="JAVA" shortName="EqualsBetweenInconvertibleTypes" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="EqualsBetweenInconvertibleTypes" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="equals.between.inconvertible.types.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.EqualsBetweenInconvertibleTypesInspection"/>
-    <localInspection language="JAVA" shortName="EqualsWithItself" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="EqualsWithItself" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="equals.with.itself.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.EqualsWithItselfInspection"/>
-    <localInspection language="JAVA" suppressId="NonFinalFieldReferenceInEquals" shortName="EqualsUsesNonFinalVariable"
+    <localInspection groupPath="Java" language="JAVA" suppressId="NonFinalFieldReferenceInEquals" shortName="EqualsUsesNonFinalVariable"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="non.final.field.in.equals.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.EqualsUsesNonFinalVariableInspection"/>
-    <localInspection language="JAVA" shortName="EqualsWhichDoesntCheckParameterClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="EqualsWhichDoesntCheckParameterClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="equals.doesnt.check.class.parameter.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.EqualsWhichDoesntCheckParameterClassInspection"/>
-    <localInspection language="JAVA" shortName="ThrowableInstanceNeverThrown" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ThrowableInstanceNeverThrown" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="throwable.instance.never.thrown.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.ThrowableInstanceNeverThrownInspection"/>
-    <localInspection language="JAVA" shortName="ForLoopThatDoesntUseLoopVariable" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ForLoopThatDoesntUseLoopVariable" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="for.loop.not.use.loop.variable.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.ForLoopThatDoesntUseLoopVariableInspection"/>
-    <localInspection language="JAVA" suppressId="NonFinalFieldReferencedInHashCode" shortName="HashCodeUsesNonFinalVariable"
+    <localInspection groupPath="Java" language="JAVA" suppressId="NonFinalFieldReferencedInHashCode" shortName="HashCodeUsesNonFinalVariable"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="non.final.field.in.hashcode.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.HashCodeUsesNonFinalVariableInspection"/>
-    <localInspection language="JAVA" suppressId="ResultOfMethodCallIgnored" shortName="IgnoreResultOfCall" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ResultOfMethodCallIgnored" shortName="IgnoreResultOfCall" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="result.of.method.call.ignored.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.IgnoreResultOfCallInspection"/>
-    <localInspection language="JAVA" shortName="ImplicitArrayToString" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ImplicitArrayToString" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="implicit.array.to.string.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.ImplicitArrayToStringInspection"/>
-    <localInspection language="JAVA" shortName="InfiniteRecursion" bundle="com.siyeh.InspectionGadgetsBundle" key="infinite.recursion.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="InfiniteRecursion" bundle="com.siyeh.InspectionGadgetsBundle" key="infinite.recursion.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.InfiniteRecursionInspection"/>
-    <localInspection language="JAVA" shortName="InnerClassReferencedViaSubclass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="InnerClassReferencedViaSubclass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="inner.class.referenced.via.subclass.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs"
                      enabledByDefault="false" level="WARNING" implementationClass="com.siyeh.ig.bugs.InnerClassReferencedViaSubclassInspection"/>
-    <localInspection language="JAVA" shortName="InstanceofIncompatibleInterface" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="InstanceofIncompatibleInterface" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="instanceof.with.incompatible.interface.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.InstanceofIncompatibleInterfaceInspection"/>
-    <localInspection language="JAVA" shortName="InstantiationOfUtilityClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="InstantiationOfUtilityClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="instantiation.utility.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.InstantiationOfUtilityClassInspection"/>
-    <localInspection language="JAVA" shortName="IteratorHasNextCallsIteratorNext" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="IteratorHasNextCallsIteratorNext" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="iterator.hasnext.which.calls.next.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.IteratorHasNextCallsIteratorNextInspection"/>
-    <localInspection language="JAVA" suppressId="IteratorNextCanNotThrowNoSuchElementException" shortName="IteratorNextDoesNotThrowNoSuchElementException"
+    <localInspection groupPath="Java" language="JAVA" suppressId="IteratorNextCanNotThrowNoSuchElementException" shortName="IteratorNextDoesNotThrowNoSuchElementException"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="iterator.next.does.not.throw.nosuchelementexception.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.IteratorNextDoesNotThrowNoSuchElementExceptionInspection"/>
-    <localInspection language="JAVA" shortName="MalformedFormatString" bundle="com.siyeh.InspectionGadgetsBundle" key="malformed.format.string.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="MalformedFormatString" bundle="com.siyeh.InspectionGadgetsBundle" key="malformed.format.string.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.MalformedFormatStringInspection"/>
-    <localInspection language="JAVA" shortName="MalformedRegex" bundle="com.siyeh.InspectionGadgetsBundle" key="malformed.regular.expression.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="MalformedRegex" bundle="com.siyeh.InspectionGadgetsBundle" key="malformed.regular.expression.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.MalformedRegexInspection"/>
-    <localInspection language="JAVA" shortName="MalformedXPath" bundle="com.siyeh.InspectionGadgetsBundle" key="malformed.xpath.expression.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="MalformedXPath" bundle="com.siyeh.InspectionGadgetsBundle" key="malformed.xpath.expression.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.MalformedXPathInspection"/>
-    <localInspection language="JAVA" shortName="MathRandomCastToInt" bundle="com.siyeh.InspectionGadgetsBundle" key="math.random.cast.to.int.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="MathRandomCastToInt" bundle="com.siyeh.InspectionGadgetsBundle" key="math.random.cast.to.int.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.MathRandomCastToIntInspection"/>
-    <localInspection language="JAVA" suppressId="MismatchedReadAndWriteOfArray" shortName="MismatchedArrayReadWrite"
+    <localInspection groupPath="Java" language="JAVA" suppressId="MismatchedReadAndWriteOfArray" shortName="MismatchedArrayReadWrite"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="mismatched.read.write.array.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.MismatchedArrayReadWriteInspection"/>
-    <localInspection language="JAVA" suppressId="MismatchedQueryAndUpdateOfCollection" shortName="MismatchedCollectionQueryUpdate"
+    <localInspection groupPath="Java" language="JAVA" suppressId="MismatchedQueryAndUpdateOfCollection" shortName="MismatchedCollectionQueryUpdate"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="mismatched.update.collection.display.name" runForWholeFile="true"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.MismatchedCollectionQueryUpdateInspection"/>
-    <localInspection language="JAVA" suppressId="MismatchedQueryAndUpdateOfStringBuilder" shortName="MismatchedStringBuilderQueryUpdate"
+    <localInspection groupPath="Java" language="JAVA" suppressId="MismatchedQueryAndUpdateOfStringBuilder" shortName="MismatchedStringBuilderQueryUpdate"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="mismatched.string.builder.query.update.display.name" runForWholeFile="true"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.MismatchedStringBuilderQueryUpdateInspection"/>
-    <localInspection language="JAVA" shortName="MisspelledCompareTo" bundle="com.siyeh.InspectionGadgetsBundle" key="misspelled.compareto.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="MisspelledCompareTo" bundle="com.siyeh.InspectionGadgetsBundle" key="misspelled.compareto.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.MisspelledCompareToInspection"/>
-    <localInspection language="JAVA" shortName="MisspelledHashcode" bundle="com.siyeh.InspectionGadgetsBundle" key="misspelled.hashcode.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="MisspelledHashcode" bundle="com.siyeh.InspectionGadgetsBundle" key="misspelled.hashcode.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.MisspelledHashcodeInspection"/>
-    <localInspection language="JAVA" shortName="MisspelledEquals" bundle="com.siyeh.InspectionGadgetsBundle" key="misspelled.equals.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="MisspelledEquals" bundle="com.siyeh.InspectionGadgetsBundle" key="misspelled.equals.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.MisspelledEqualsInspection"/>
-    <localInspection language="JAVA" shortName="MisspelledToString" bundle="com.siyeh.InspectionGadgetsBundle" key="misspelled.tostring.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="MisspelledToString" bundle="com.siyeh.InspectionGadgetsBundle" key="misspelled.tostring.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.MisspelledToStringInspection"/>
-    <localInspection language="JAVA" shortName="NewStringBufferWithCharArgument" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="NewStringBufferWithCharArgument" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="new.string.buffer.with.char.argument.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.NewStringBufferWithCharArgumentInspection"/>
-    <localInspection language="JAVA" suppressId="NonShortCircuitBooleanExpression" shortName="NonShortCircuitBoolean"
+    <localInspection groupPath="Java" language="JAVA" suppressId="NonShortCircuitBooleanExpression" shortName="NonShortCircuitBoolean"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="non.short.circuit.boolean.expression.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.NonShortCircuitBooleanInspection"/>
-    <localInspection language="JAVA" shortName="NullArgumentToVariableArgMethod" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="NullArgumentToVariableArgMethod" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="null.argument.to.var.arg.method.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.NullArgumentToVariableArgMethodInspection"/>
-    <localInspection language="JAVA" shortName="NumberEquality" bundle="com.siyeh.InspectionGadgetsBundle" key="number.comparison.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="NumberEquality" bundle="com.siyeh.InspectionGadgetsBundle" key="number.comparison.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.NumberEqualityInspection"/>
-    <localInspection language="JAVA" shortName="ObjectEquality" bundle="com.siyeh.InspectionGadgetsBundle" key="object.comparison.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ObjectEquality" bundle="com.siyeh.InspectionGadgetsBundle" key="object.comparison.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.ObjectEqualityInspection"/>
-    <localInspection language="JAVA" shortName="ObjectEqualsNull" bundle="com.siyeh.InspectionGadgetsBundle" key="object.equals.null.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ObjectEqualsNull" bundle="com.siyeh.InspectionGadgetsBundle" key="object.equals.null.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.ObjectEqualsNullInspection"/>
-    <localInspection language="JAVA" shortName="ObjectToString" bundle="com.siyeh.InspectionGadgetsBundle" key="default.tostring.call.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ObjectToString" bundle="com.siyeh.InspectionGadgetsBundle" key="default.tostring.call.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.ObjectToStringInspection"/>
-    <localInspection language="JAVA" shortName="PrimitiveArrayArgumentToVariableArgMethod" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="PrimitiveArrayArgumentToVariableArgMethod" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="primitive.array.argument.to.var.arg.method.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.PrimitiveArrayArgumentToVariableArgMethodInspection"/>
-    <localInspection language="JAVA" shortName="ReflectionForUnavailableAnnotation" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ReflectionForUnavailableAnnotation" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="reflection.for.unavailable.annotation.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.ReflectionForUnavailableAnnotationInspection"/>
-    <localInspection language="JAVA" shortName="ReplaceAllDot" bundle="com.siyeh.InspectionGadgetsBundle" key="replace.all.dot.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ReplaceAllDot" bundle="com.siyeh.InspectionGadgetsBundle" key="replace.all.dot.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.ReplaceAllDotInspection"/>
-    <localInspection language="JAVA" shortName="ResultOfObjectAllocationIgnored" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ResultOfObjectAllocationIgnored" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="result.of.object.allocation.ignored.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.ResultOfObjectAllocationIgnoredInspection"/>
-    <localInspection language="JAVA" suppressId="UseOfIndexZeroInJDBCResultSet" shortName="ResultSetIndexZero" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="UseOfIndexZeroInJDBCResultSet" shortName="ResultSetIndexZero" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="use.0index.in.jdbc.resultset.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.ResultSetIndexZeroInspection"/>
-    <localInspection language="JAVA" suppressId="ReturnOfNull" shortName="ReturnNull" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ReturnOfNull" shortName="ReturnNull" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="return.of.null.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs"
                      enabledByDefault="false" level="WARNING" implementationClass="com.siyeh.ig.bugs.ReturnNullInspection"/>
-    <localInspection language="JAVA" suppressId="StaticMethodReferencedViaSubclass" shortName="StaticCallOnSubclass"
+    <localInspection groupPath="Java" language="JAVA" suppressId="StaticMethodReferencedViaSubclass" shortName="StaticCallOnSubclass"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="static.method.via.subclass.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.StaticCallOnSubclassInspection" cleanupTool="true"/>
-    <localInspection language="JAVA" shortName="StringConcatenationInFormatCall" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="StringConcatenationInFormatCall" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="string.concatenation.in.format.call.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.StringConcatenationInFormatCallInspection"/>
-    <localInspection language="JAVA" shortName="StringConcatenationInMessageFormatCall" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="StringConcatenationInMessageFormatCall" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="string.concatenation.in.message.format.call.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.StringConcatenationInMessageFormatCallInspection"/>
-    <localInspection language="JAVA" shortName="StringConcatenationMissingWhitespace" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="StringConcatenationMissingWhitespace" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="string.concatenation.missing.whitespace.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.StringConcatenationMissingWhitespaceInspection"/>
-    <localInspection language="JAVA" suppressId="StaticFieldReferencedViaSubclass" shortName="StaticFieldReferenceOnSubclass"
+    <localInspection groupPath="Java" language="JAVA" suppressId="StaticFieldReferencedViaSubclass" shortName="StaticFieldReferenceOnSubclass"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="static.field.via.subclass.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.StaticFieldReferenceOnSubclassInspection"/>
-    <localInspection language="JAVA" shortName="StringEquality" bundle="com.siyeh.InspectionGadgetsBundle" key="string.comparison.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="StringEquality" bundle="com.siyeh.InspectionGadgetsBundle" key="string.comparison.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.StringEqualityInspection"/>
-    <localInspection language="JAVA" shortName="SubtractionInCompareTo" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="SubtractionInCompareTo" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="subtraction.in.compareto.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.SubtractionInCompareToInspection"/>
-    <localInspection language="JAVA" shortName="SuspiciousArrayCast" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="SuspiciousArrayCast" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="suspicious.array.cast.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.SuspiciousArrayCastInspection"/>
-    <localInspection language="JAVA" shortName="SuspiciousIndentAfterControlStatement" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="SuspiciousIndentAfterControlStatement" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="suspicious.indent.after.control.statement.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.SuspiciousIndentAfterControlStatementInspection"/>
-    <localInspection language="JAVA" shortName="SuspiciousSystemArraycopy" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="SuspiciousSystemArraycopy" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="suspicious.system.arraycopy.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.SuspiciousSystemArraycopyInspection"/>
-    <localInspection language="JAVA" shortName="SuspiciousToArrayCall" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="SuspiciousToArrayCall" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="suspicious.to.array.call.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.SuspiciousToArrayCallInspection"/>
-    <localInspection language="JAVA" shortName="TextLabelInSwitchStatement" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="TextLabelInSwitchStatement" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="text.label.in.switch.statement.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.TextLabelInSwitchStatementInspection"/>
-    <localInspection language="JAVA" shortName="ThrowableResultOfMethodCallIgnored" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ThrowableResultOfMethodCallIgnored" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="throwable.result.of.method.call.ignored.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.ThrowableResultOfMethodCallIgnoredInspection"/>
-    <localInspection language="JAVA" shortName="UseOfPropertiesAsHashtable" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="UseOfPropertiesAsHashtable" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="properties.object.as.hashtable.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.UseOfPropertiesAsHashtableInspection"/>
-    <localInspection language="JAVA" shortName="VariableNotUsedInsideIf" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="VariableNotUsedInsideIf" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="variable.not.used.inside.if.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.bugs.VariableNotUsedInsideIfInspection"/>
 
     <!--group.names.class.structure-->
-    <localInspection language="JAVA" shortName="AnonymousInnerClass" bundle="com.siyeh.InspectionGadgetsBundle" key="anonymous.inner.class.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="AnonymousInnerClass" bundle="com.siyeh.InspectionGadgetsBundle" key="anonymous.inner.class.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.class.structure" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.classlayout.AnonymousInnerClassInspection"/>
-    <localInspection language="JAVA" suppressId="NonStaticInitializer" shortName="ClassInitializer" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="NonStaticInitializer" shortName="ClassInitializer" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="class.initializer.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.class.structure"
                      enabledByDefault="false" level="WARNING" implementationClass="com.siyeh.ig.classlayout.ClassInitializerInspection"/>
-    <localInspection language="JAVA" shortName="ClassMayBeInterface" bundle="com.siyeh.InspectionGadgetsBundle" key="class.may.be.interface.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ClassMayBeInterface" bundle="com.siyeh.InspectionGadgetsBundle" key="class.may.be.interface.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.class.structure" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.classlayout.ClassMayBeInterfaceInspection"/>
-    <localInspection language="JAVA" shortName="ClassNameDiffersFromFileName" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ClassNameDiffersFromFileName" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="class.name.differs.from.file.name.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.ClassNameDiffersFromFileNameInspection"/>
-    <localInspection language="JAVA" shortName="ClassWithOnlyPrivateConstructors" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ClassWithOnlyPrivateConstructors" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="class.with.only.private.constructors.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.ClassWithOnlyPrivateConstructorsInspection"/>
-    <localInspection language="JAVA" shortName="ConstantDeclaredInAbstractClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ConstantDeclaredInAbstractClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="constant.declared.in.abstract.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.ConstantDeclaredInAbstractClassInspection"/>
-    <localInspection language="JAVA" shortName="ConstantDeclaredInInterface" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ConstantDeclaredInInterface" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="constant.declared.in.interface.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.ConstantDeclaredInInterfaceInspection"/>
-    <localInspection language="JAVA" shortName="EmptyClass" bundle="com.siyeh.InspectionGadgetsBundle" key="empty.class.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="EmptyClass" bundle="com.siyeh.InspectionGadgetsBundle" key="empty.class.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.class.structure" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.classlayout.EmptyClassInspection"/>
-    <localInspection language="JAVA" shortName="FinalClass" bundle="com.siyeh.InspectionGadgetsBundle" key="final.class.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="FinalClass" bundle="com.siyeh.InspectionGadgetsBundle" key="final.class.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.class.structure" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.classlayout.FinalClassInspection"/>
-    <localInspection language="JAVA" shortName="FinalMethodInFinalClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="FinalMethodInFinalClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="final.method.in.final.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.FinalMethodInFinalClassInspection"/>
-    <localInspection language="JAVA" shortName="FinalMethod" bundle="com.siyeh.InspectionGadgetsBundle" key="final.method.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="FinalMethod" bundle="com.siyeh.InspectionGadgetsBundle" key="final.method.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.class.structure" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.classlayout.FinalMethodInspection"/>
-    <localInspection language="JAVA" shortName="FinalPrivateMethod" bundle="com.siyeh.InspectionGadgetsBundle" key="final.private.method.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="FinalPrivateMethod" bundle="com.siyeh.InspectionGadgetsBundle" key="final.private.method.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.class.structure" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.FinalPrivateMethodInspection"/>
-    <localInspection language="JAVA" shortName="FinalStaticMethod" bundle="com.siyeh.InspectionGadgetsBundle" key="final.static.method.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="FinalStaticMethod" bundle="com.siyeh.InspectionGadgetsBundle" key="final.static.method.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.class.structure" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.FinalStaticMethodInspection"/>
-    <localInspection language="JAVA" suppressId="InnerClassOfInterface" shortName="InnerClassOnInterface" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="InnerClassOfInterface" shortName="InnerClassOnInterface" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="inner.class.on.interface.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.InnerClassOnInterfaceInspection"/>
-    <localInspection language="JAVA" shortName="LimitedScopeInnerClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="LimitedScopeInnerClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="limited.scope.inner.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.LimitedScopeInnerClassInspection"/>
-    <localInspection language="JAVA" shortName="ListenerMayUseAdapter" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ListenerMayUseAdapter" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="listener.may.use.adapter.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.ListenerMayUseAdapterInspection"/>
-    <localInspection language="JAVA" shortName="MarkerInterface" bundle="com.siyeh.InspectionGadgetsBundle" key="marker.interface.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="MarkerInterface" bundle="com.siyeh.InspectionGadgetsBundle" key="marker.interface.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.class.structure" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.classlayout.MarkerInterfaceInspection"/>
-    <localInspection language="JAVA" shortName="MultipleTopLevelClassesInFile" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="MultipleTopLevelClassesInFile" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="multiple.top.level.classes.in.file.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.MultipleTopLevelClassesInFileInspection"/>
-    <localInspection language="JAVA" shortName="NonFinalFieldInEnum" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="NonFinalFieldInEnum" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="non.final.field.in.enum.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.NonFinalFieldInEnumInspection"/>
-    <localInspection language="JAVA" shortName="NonFinalUtilityClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="NonFinalUtilityClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="non.final.utility.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.NonFinalUtilityClassInspection"/>
-    <localInspection language="JAVA" shortName="NoopMethodInAbstractClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="NoopMethodInAbstractClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="noop.method.in.abstract.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.NoopMethodInAbstractClassInspection"/>
-    <localInspection language="JAVA" shortName="ProtectedMemberInFinalClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ProtectedMemberInFinalClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="protected.member.in.final.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.ProtectedMemberInFinalClassInspection"/>
-    <localInspection language="JAVA" shortName="PublicConstructor" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="PublicConstructor" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="public.constructor.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.PublicConstructorInspection"/>
-    <localInspection language="JAVA" shortName="PublicConstructorInNonPublicClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="PublicConstructorInNonPublicClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="public.constructor.in.non.public.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.PublicConstructorInNonPublicClassInspection"/>
-    <localInspection language="JAVA" shortName="Singleton" bundle="com.siyeh.InspectionGadgetsBundle" key="singleton.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="Singleton" bundle="com.siyeh.InspectionGadgetsBundle" key="singleton.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.class.structure" enabledByDefault="false" runForWholeFile="true"
                      level="WARNING" implementationClass="com.siyeh.ig.classlayout.SingletonInspection"/>
-    <localInspection language="JAVA" shortName="StaticNonFinalField" bundle="com.siyeh.InspectionGadgetsBundle" key="static.non.final.field.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="StaticNonFinalField" bundle="com.siyeh.InspectionGadgetsBundle" key="static.non.final.field.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.class.structure" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.classlayout.StaticNonFinalFieldInspection"/>
-    <localInspection language="JAVA" shortName="UtilityClass" bundle="com.siyeh.InspectionGadgetsBundle" key="utility.class.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="UtilityClass" bundle="com.siyeh.InspectionGadgetsBundle" key="utility.class.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.class.structure" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.classlayout.UtilityClassInspection"/>
-    <localInspection language="JAVA" shortName="UtilityClassCanBeEnum" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="UtilityClassCanBeEnum" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="utility.class.can.be.enum.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.UtilityClassCanBeEnumInspection"/>
-    <localInspection language="JAVA" shortName="UtilityClassWithPublicConstructor" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="UtilityClassWithPublicConstructor" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="utility.class.with.public.constructor.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.UtilityClassWithPublicConstructorInspection"/>
-    <localInspection language="JAVA" shortName="UtilityClassWithoutPrivateConstructor" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="UtilityClassWithoutPrivateConstructor" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="utility.class.without.private.constructor.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.UtilityClassWithoutPrivateConstructorInspection"/>
-    <globalInspection language="JAVA" shortName="MethodReturnAlwaysConstant" bundle="com.siyeh.InspectionGadgetsBundle"
+    <globalInspection groupPath="Java" language="JAVA" shortName="MethodReturnAlwaysConstant" bundle="com.siyeh.InspectionGadgetsBundle"
                       key="method.return.always.constant.display.name" groupBundle="messages.InspectionsBundle"
                       groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                       implementationClass="com.siyeh.ig.classlayout.MethodReturnAlwaysConstantInspection"/>
-    <localInspection language="JAVA" shortName="InterfaceMayBeAnnotatedFunctional" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="InterfaceMayBeAnnotatedFunctional" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="interface.may.be.annotated.functional.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.structure" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classlayout.InterfaceMayBeAnnotatedFunctionalInspection"/>
 
     <!--group.names.class.metrics-->
-    <localInspection language="JAVA" suppressId="OverlyComplexAnonymousInnerClass" shortName="AnonymousClassComplexity"
+    <localInspection groupPath="Java" language="JAVA" suppressId="OverlyComplexAnonymousInnerClass" shortName="AnonymousClassComplexity"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="overly.complex.anonymous.inner.class.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.class.metrics" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classmetrics.AnonymousClassComplexityInspection"/>
-    <localInspection language="JAVA" suppressId="AnonymousInnerClassWithTooManyMethods" shortName="AnonymousClassMethodCount"
+    <localInspection groupPath="Java" language="JAVA" suppressId="AnonymousInnerClassWithTooManyMethods" shortName="AnonymousClassMethodCount"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="anonymous.inner.class.with.too.many.methods.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.class.metrics" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classmetrics.AnonymousClassMethodCountInspection"/>
-    <localInspection language="JAVA" suppressId="OverlyComplexClass" shortName="ClassComplexity" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="OverlyComplexClass" shortName="ClassComplexity" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="overly.complex.class.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.class.metrics"
                      enabledByDefault="false" level="WARNING" implementationClass="com.siyeh.ig.classmetrics.ClassComplexityInspection"/>
-    <localInspection language="JAVA" suppressId="OverlyCoupledClass" shortName="ClassCoupling" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="OverlyCoupledClass" shortName="ClassCoupling" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="overly.coupled.class.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.class.metrics"
                      enabledByDefault="false" level="WARNING" implementationClass="com.siyeh.ig.classmetrics.ClassCouplingInspection"/>
-    <localInspection language="JAVA" suppressId="ClassTooDeepInInheritanceTree" shortName="ClassInheritanceDepth" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ClassTooDeepInInheritanceTree" shortName="ClassInheritanceDepth" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="class.too.deep.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.class.metrics"
                      enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classmetrics.ClassInheritanceDepthInspection"/>
-    <localInspection language="JAVA" suppressId="InnerClassTooDeeplyNested" shortName="ClassNestingDepth" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="InnerClassTooDeeplyNested" shortName="ClassNestingDepth" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="inner.class.too.deeply.nested.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.class.metrics" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.classmetrics.ClassNestingDepthInspection"/>
-    <localInspection language="JAVA" suppressId="ClassWithTooManyConstructors" shortName="ConstructorCount" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ClassWithTooManyConstructors" shortName="ConstructorCount" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="too.many.constructors.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.class.metrics"
                      enabledByDefault="false" level="WARNING" implementationClass="com.siyeh.ig.classmetrics.ConstructorCountInspection"/>
-    <localInspection language="JAVA" suppressId="ClassWithTooManyFields" shortName="FieldCount" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ClassWithTooManyFields" shortName="FieldCount" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="too.many.fields.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.class.metrics"
                      enabledByDefault="false" level="WARNING" implementationClass="com.siyeh.ig.classmetrics.FieldCountInspection"/>
-    <localInspection language="JAVA" suppressId="ClassWithTooManyMethods" shortName="MethodCount" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ClassWithTooManyMethods" shortName="MethodCount" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="too.many.methods.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.class.metrics"
                      enabledByDefault="false" level="WARNING" implementationClass="com.siyeh.ig.classmetrics.MethodCountInspection"/>
 
     <!--group.names.cloning.issues-->
-    <localInspection language="JAVA" shortName="CloneCallsConstructors" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="CloneCallsConstructors" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="clone.instantiates.objects.with.constructor.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.cloning.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.cloneable.CloneCallsConstructorsInspection"/>
-    <localInspection language="JAVA" suppressId="CloneDoesntCallSuperClone" shortName="CloneCallsSuperClone" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="CloneDoesntCallSuperClone" shortName="CloneCallsSuperClone" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="clone.doesnt.call.super.clone.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.cloning.issues" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.cloneable.CloneCallsSuperCloneInspection"/>
-    <localInspection language="JAVA" suppressId="CloneDoesntDeclareCloneNotSupportedException" shortName="CloneDeclaresCloneNotSupported"
+    <localInspection groupPath="Java" language="JAVA" suppressId="CloneDoesntDeclareCloneNotSupportedException" shortName="CloneDeclaresCloneNotSupported"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="clone.doesnt.declare.clonenotsupportedexception.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.cloning.issues" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.cloneable.CloneDeclaresCloneNotSupportedInspection"/>
-    <localInspection language="JAVA" shortName="CloneInNonCloneableClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="CloneInNonCloneableClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="clone.method.in.non.cloneable.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.cloning.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.cloneable.CloneInNonCloneableClassInspection"/>
-    <localInspection language="JAVA" suppressId="CloneableClassWithoutClone" shortName="CloneableImplementsClone" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="CloneableClassWithoutClone" shortName="CloneableImplementsClone" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="cloneable.class.without.clone.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.cloning.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.cloneable.CloneableImplementsCloneInspection"/>
-    <localInspection language="JAVA" shortName="CloneReturnsClassType" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="CloneReturnsClassType" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="clone.returns.class.type.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.cloning.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.cloneable.CloneReturnsClassTypeInspection"/>
-    <localInspection language="JAVA" shortName="NonPublicClone" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="NonPublicClone" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="non.public.clone.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.cloning.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.cloneable.NonPublicCloneInspection"/>
-    <localInspection language="JAVA" shortName="UseOfClone" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="UseOfClone" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="use.of.clone.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.cloning.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.cloneable.UseOfCloneInspection"/>
 
     <!--group.names.control.flow.issues-->
-    <localInspection language="JAVA" shortName="BreakStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="break.statement.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="BreakStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="break.statement.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.BreakStatementInspection"/>
-    <localInspection language="JAVA" shortName="BreakStatementWithLabel" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="BreakStatementWithLabel" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="break.statement.with.label.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.BreakStatementWithLabelInspection"/>
-    <localInspection language="JAVA" shortName="ConditionalExpression" bundle="com.siyeh.InspectionGadgetsBundle" key="conditional.expression.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ConditionalExpression" bundle="com.siyeh.InspectionGadgetsBundle" key="conditional.expression.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.ConditionalExpressionInspection"/>
-    <localInspection language="JAVA" shortName="ConditionalExpressionWithIdenticalBranches" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ConditionalExpressionWithIdenticalBranches" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="conditional.expression.with.identical.branches.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.ConditionalExpressionWithIdenticalBranchesInspection"/>
-    <localInspection language="JAVA" suppressId="ConfusingElseBranch" shortName="ConfusingElse" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ConfusingElseBranch" shortName="ConfusingElse" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="confusing.else.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues"
                      enabledByDefault="false" level="WARNING" implementationClass="com.siyeh.ig.controlflow.ConfusingElseInspection"/>
-    <localInspection language="JAVA" shortName="ConstantConditionalExpression" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ConstantConditionalExpression" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="constant.conditional.expression.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.ConstantConditionalExpressionInspection"/>
-    <localInspection language="JAVA" shortName="ConstantIfStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="constant.if.statement.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ConstantIfStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="constant.if.statement.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="true"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.ConstantIfStatementInspection"/>
-    <localInspection language="JAVA" shortName="ContinueStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="continue.statement.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ContinueStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="continue.statement.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.ContinueStatementInspection"/>
-    <localInspection language="JAVA" shortName="ContinueStatementWithLabel" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ContinueStatementWithLabel" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="continue.statement.with.label.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.ContinueStatementWithLabelInspection"/>
-    <localInspection language="JAVA" shortName="DefaultNotLastCaseInSwitch" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="DefaultNotLastCaseInSwitch" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="default.not.last.case.in.switch.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.DefaultNotLastCaseInSwitchInspection"/>
-    <localInspection language="JAVA" shortName="DoubleNegation" bundle="com.siyeh.InspectionGadgetsBundle" key="double.negation.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="DoubleNegation" bundle="com.siyeh.InspectionGadgetsBundle" key="double.negation.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="true"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.DoubleNegationInspection"/>
-    <localInspection language="JAVA" shortName="DuplicateBooleanBranch" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="DuplicateBooleanBranch" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="duplicate.boolean.branch.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.DuplicateBooleanBranchInspection"/>
-    <localInspection language="JAVA" shortName="DuplicateCondition" bundle="com.siyeh.InspectionGadgetsBundle" key="duplicate.condition.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="DuplicateCondition" bundle="com.siyeh.InspectionGadgetsBundle" key="duplicate.condition.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.DuplicateConditionInspection"/>
-    <localInspection language="JAVA" shortName="EnumSwitchStatementWhichMissesCases" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="EnumSwitchStatementWhichMissesCases" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="enum.switch.statement.which.misses.cases.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.EnumSwitchStatementWhichMissesCasesInspection"/>
-    <localInspection language="JAVA" suppressId="fallthrough" shortName="FallthruInSwitchStatement" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="fallthrough" shortName="FallthruInSwitchStatement" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="fallthru.in.switch.statement.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.FallthruInSwitchStatementInspection"/>
-    <localInspection language="JAVA" shortName="ForLoopReplaceableByWhile" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ForLoopReplaceableByWhile" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="for.loop.replaceable.by.while.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.ForLoopReplaceableByWhileInspection"/>
-    <localInspection language="JAVA" shortName="ForLoopWithMissingComponent" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ForLoopWithMissingComponent" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="for.loop.with.missing.component.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.ForLoopWithMissingComponentInspection"/>
-    <localInspection language="JAVA" shortName="IfMayBeConditional" bundle="com.siyeh.InspectionGadgetsBundle" key="if.may.be.conditional.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="IfMayBeConditional" bundle="com.siyeh.InspectionGadgetsBundle" key="if.may.be.conditional.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.IfMayBeConditionalInspection"/>
-    <localInspection language="JAVA" shortName="IfStatementWithIdenticalBranches" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="IfStatementWithIdenticalBranches" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="if.statement.with.identical.branches.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.IfStatementWithIdenticalBranchesInspection"/>
-    <localInspection language="JAVA" shortName="IfStatementWithTooManyBranches" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="IfStatementWithTooManyBranches" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="if.statement.with.too.many.branches.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.IfStatementWithTooManyBranchesInspection"/>
-    <localInspection language="JAVA" shortName="InfiniteLoopStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="infinite.loop.statement.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="InfiniteLoopStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="infinite.loop.statement.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="true"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.InfiniteLoopStatementInspection"/>
-    <localInspection language="JAVA" shortName="LabeledStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="labeled.statement.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="LabeledStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="labeled.statement.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.LabeledStatementInspection"/>
-    <localInspection language="JAVA" shortName="LoopConditionNotUpdatedInsideLoop" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="LoopConditionNotUpdatedInsideLoop" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="loop.condition.not.updated.inside.loop.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.LoopConditionNotUpdatedInsideLoopInspection"/>
-    <localInspection language="JAVA" suppressId="LoopStatementThatDoesntLoop" shortName="LoopStatementsThatDontLoop"
+    <localInspection groupPath="Java" language="JAVA" suppressId="LoopStatementThatDoesntLoop" shortName="LoopStatementsThatDontLoop"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="loop.statements.that.dont.loop.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="true"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.LoopStatementsThatDontLoopInspection"/>
-    <localInspection language="JAVA" shortName="LoopWithImplicitTerminationCondition" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="LoopWithImplicitTerminationCondition" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="loop.with.implicit.termination.condition.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.LoopWithImplicitTerminationConditionInspection"/>
-    <localInspection language="JAVA" suppressId="ConditionalExpressionWithNegatedCondition" shortName="NegatedConditional"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ConditionalExpressionWithNegatedCondition" shortName="NegatedConditional"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="negated.conditional.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.NegatedConditionalInspection"/>
-    <localInspection language="JAVA" shortName="NegatedConditionalExpression" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="NegatedConditionalExpression" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="negated.conditional.expression.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.NegatedConditionalExpressionInspection"/>
-    <localInspection language="JAVA" shortName="NegatedEqualityExpression" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="NegatedEqualityExpression" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="negated.equality.expression.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.NegatedEqualityExpressionInspection"/>
-    <localInspection language="JAVA" suppressId="IfStatementWithNegatedCondition" shortName="NegatedIfElse" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="IfStatementWithNegatedCondition" shortName="NegatedIfElse" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="negated.if.else.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues"
                      enabledByDefault="false" level="WARNING" implementationClass="com.siyeh.ig.controlflow.NegatedIfElseInspection"/>
-    <localInspection language="JAVA" shortName="NestedConditionalExpression" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="NestedConditionalExpression" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="nested.conditional.expression.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.NestedConditionalExpressionInspection"/>
-    <localInspection language="JAVA" shortName="NestedSwitchStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="nested.switch.statement.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="NestedSwitchStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="nested.switch.statement.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.NestedSwitchStatementInspection"/>
-    <localInspection language="JAVA" shortName="OverlyComplexBooleanExpression" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="OverlyComplexBooleanExpression" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="overly.complex.boolean.expression.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.OverlyComplexBooleanExpressionInspection"/>
-    <localInspection language="JAVA" shortName="PointlessBooleanExpression" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="PointlessBooleanExpression" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="pointless.boolean.expression.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.PointlessBooleanExpressionInspection"/>
-    <localInspection language="JAVA" shortName="PointlessIndexOfComparison" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="PointlessIndexOfComparison" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="pointless.indexof.comparison.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.PointlessIndexOfComparisonInspection"/>
-    <localInspection language="JAVA" shortName="PointlessNullCheck" bundle="com.siyeh.InspectionGadgetsBundle" key="pointless.nullcheck.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="PointlessNullCheck" bundle="com.siyeh.InspectionGadgetsBundle" key="pointless.nullcheck.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.PointlessNullCheckInspection"/>
-    <localInspection language="JAVA" shortName="SimplifiableConditionalExpression" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="SimplifiableConditionalExpression" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="simplifiable.conditional.expression.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.SimplifiableConditionalExpressionInspection"/>
-    <localInspection language="JAVA" shortName="SwitchStatementDensity" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="SwitchStatementDensity" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="switch.statement.density.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.SwitchStatementDensityInspection"/>
-    <localInspection language="JAVA" shortName="SwitchStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="switch.statement.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="SwitchStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="switch.statement.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.SwitchStatementInspection"/>
-    <localInspection language="JAVA" suppressId="LocalVariableUsedAndDeclaredInDifferentSwitchBranches" shortName="SwitchStatementWithConfusingDeclaration"
+    <localInspection groupPath="Java" language="JAVA" suppressId="LocalVariableUsedAndDeclaredInDifferentSwitchBranches" shortName="SwitchStatementWithConfusingDeclaration"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="switch.statement.with.confusing.declaration.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.SwitchStatementWithConfusingDeclarationInspection"/>
-    <localInspection language="JAVA" shortName="SwitchStatementWithTooFewBranches" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="SwitchStatementWithTooFewBranches" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="switch.statement.with.too.few.branches.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.SwitchStatementWithTooFewBranchesInspection"/>
-    <localInspection language="JAVA" shortName="SwitchStatementWithTooManyBranches" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="SwitchStatementWithTooManyBranches" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="switch.statement.with.too.many.branches.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.SwitchStatementWithTooManyBranchesInspection"/>
-    <localInspection language="JAVA" suppressId="SwitchStatementWithoutDefaultBranch" shortName="SwitchStatementsWithoutDefault"
+    <localInspection groupPath="Java" language="JAVA" suppressId="SwitchStatementWithoutDefaultBranch" shortName="SwitchStatementsWithoutDefault"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="switch.statements.without.default.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.SwitchStatementsWithoutDefaultInspection"/>
-    <localInspection language="JAVA" suppressId="RedundantIfStatement" shortName="TrivialIf" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="RedundantIfStatement" shortName="TrivialIf" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="trivial.if.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues"
                      enabledByDefault="true" level="WARNING" implementationClass="com.siyeh.ig.controlflow.TrivialIfInspection" cleanupTool="true"/>
-    <localInspection language="JAVA" suppressId="RedundantConditionalExpression" shortName="UnnecessaryConditionalExpression"
+    <localInspection groupPath="Java" language="JAVA" suppressId="RedundantConditionalExpression" shortName="UnnecessaryConditionalExpression"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="unnecessary.conditional.expression.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="true"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.UnnecessaryConditionalExpressionInspection"/>
-    <localInspection language="JAVA" shortName="UnnecessaryBreak" bundle="com.siyeh.InspectionGadgetsBundle" key="unnecessary.break.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="UnnecessaryBreak" bundle="com.siyeh.InspectionGadgetsBundle" key="unnecessary.break.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="true"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.UnnecessaryBreakInspection"/>
-    <localInspection language="JAVA" shortName="UnnecessaryContinue" bundle="com.siyeh.InspectionGadgetsBundle" key="unnecessary.continue.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="UnnecessaryContinue" bundle="com.siyeh.InspectionGadgetsBundle" key="unnecessary.continue.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="true"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.UnnecessaryContinueInspection"/>
-    <localInspection language="JAVA" shortName="UnnecessaryDefault" bundle="com.siyeh.InspectionGadgetsBundle" key="unnecessary.default.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="UnnecessaryDefault" bundle="com.siyeh.InspectionGadgetsBundle" key="unnecessary.default.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.control.flow.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.controlflow.UnnecessaryDefaultInspection"/>
-    <localInspection language="JAVA" shortName="UnnecessaryLabelOnBreakStatement" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="UnnecessaryLabelOnBreakStatement" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="unnecessary.label.on.break.statement.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.UnnecessaryLabelOnBreakStatementInspection"/>
-    <localInspection language="JAVA" shortName="UnnecessaryLabelOnContinueStatement" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="UnnecessaryLabelOnContinueStatement" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="unnecessary.label.on.continue.statement.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.UnnecessaryLabelOnContinueStatementInspection"/>
-    <localInspection language="JAVA" suppressId="UnnecessaryReturnStatement" shortName="UnnecessaryReturn" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="UnnecessaryReturnStatement" shortName="UnnecessaryReturn" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="unnecessary.return.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.control.flow.issues" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.controlflow.UnnecessaryReturnInspection"/>
 
     <!--group.names.data.flow.issues-->
-    <localInspection language="JAVA" shortName="BooleanVariableAlwaysNegated" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="BooleanVariableAlwaysNegated" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="boolean.variable.always.inverted.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.data.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.dataflow.BooleanVariableAlwaysNegatedInspection"/>
-    <localInspection language="JAVA" shortName="ConstantValueVariableUse" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ConstantValueVariableUse" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="constant.value.variable.use.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.data.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.dataflow.ConstantValueVariableUseInspection"/>
-    <localInspection language="JAVA" shortName="LawOfDemeter" bundle="com.siyeh.InspectionGadgetsBundle" key="law.of.demeter.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="LawOfDemeter" bundle="com.siyeh.InspectionGadgetsBundle" key="law.of.demeter.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.data.flow.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.dataflow.LawOfDemeterInspection"/>
-    <localInspection language="JAVA" shortName="NegativelyNamedBooleanVariable" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="NegativelyNamedBooleanVariable" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="negatively.named.boolean.variable.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.data.flow.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.dataflow.NegativelyNamedBooleanVariableInspection"/>
-    <localInspection language="JAVA" shortName="ReuseOfLocalVariable" bundle="com.siyeh.InspectionGadgetsBundle" key="reuse.of.local.variable.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ReuseOfLocalVariable" bundle="com.siyeh.InspectionGadgetsBundle" key="reuse.of.local.variable.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.data.flow.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.dataflow.ReuseOfLocalVariableInspection"/>
-    <localInspection language="JAVA" shortName="TooBroadScope" bundle="com.siyeh.InspectionGadgetsBundle" key="too.broad.scope.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="TooBroadScope" bundle="com.siyeh.InspectionGadgetsBundle" key="too.broad.scope.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.data.flow.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.dataflow.TooBroadScopeInspection"/>
-    <localInspection language="JAVA" shortName="UnnecessaryLocalVariable" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="UnnecessaryLocalVariable" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="redundant.local.variable.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.data.flow.issues" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.dataflow.UnnecessaryLocalVariableInspection"/>
-    <globalInspection language="JAVA" shortName="BooleanMethodIsAlwaysInverted" bundle="messages.InspectionsBundle"
+    <globalInspection groupPath="Java" language="JAVA" shortName="BooleanMethodIsAlwaysInverted" bundle="messages.InspectionsBundle"
                       key="boolean.method.is.always.inverted.display.name" groupBundle="messages.InspectionsBundle"
                       groupKey="group.names.data.flow.issues" enabledByDefault="true" level="WARNING"
                       implementationClass="com.intellij.codeInspection.booleanIsAlwaysInverted.BooleanMethodIsAlwaysInvertedInspection"/>
 
     <!--group.names.dependency.issues-->
-    <globalInspection language="JAVA" shortName="ClassWithTooManyDependencies" bundle="com.siyeh.InspectionGadgetsBundle"
+    <globalInspection groupPath="Java" language="JAVA" shortName="ClassWithTooManyDependencies" bundle="com.siyeh.InspectionGadgetsBundle"
                       key="class.with.too.many.dependencies.display.name" groupBundle="messages.InspectionsBundle"
                       groupKey="group.names.dependency.issues" enabledByDefault="false" level="WARNING"
                       implementationClass="com.siyeh.ig.dependency.ClassWithTooManyDependenciesInspection"/>
-    <globalInspection language="JAVA" shortName="ClassWithTooManyDependents" bundle="com.siyeh.InspectionGadgetsBundle"
+    <globalInspection groupPath="Java" language="JAVA" shortName="ClassWithTooManyDependents" bundle="com.siyeh.InspectionGadgetsBundle"
                       key="class.with.too.many.dependents.display.name" groupBundle="messages.InspectionsBundle"
                       groupKey="group.names.dependency.issues" enabledByDefault="false" level="WARNING"
                       implementationClass="com.siyeh.ig.dependency.ClassWithTooManyDependentsInspection"/>
-    <globalInspection language="JAVA" shortName="ClassWithTooManyTransitiveDependencies" bundle="com.siyeh.InspectionGadgetsBundle"
+    <globalInspection groupPath="Java" language="JAVA" shortName="ClassWithTooManyTransitiveDependencies" bundle="com.siyeh.InspectionGadgetsBundle"
                       key="class.with.too.many.transitive.dependencies.display.name" groupBundle="messages.InspectionsBundle"
                       groupKey="group.names.dependency.issues" enabledByDefault="false" level="WARNING"
                       implementationClass="com.siyeh.ig.dependency.ClassWithTooManyTransitiveDependenciesInspection"/>
-    <globalInspection language="JAVA" shortName="ClassWithTooManyTransitiveDependents" bundle="com.siyeh.InspectionGadgetsBundle"
+    <globalInspection groupPath="Java" language="JAVA" shortName="ClassWithTooManyTransitiveDependents" bundle="com.siyeh.InspectionGadgetsBundle"
                       key="class.with.too.many.transitive.dependents.display.name" groupBundle="messages.InspectionsBundle"
                       groupKey="group.names.dependency.issues" enabledByDefault="false" level="WARNING"
                       implementationClass="com.siyeh.ig.dependency.ClassWithTooManyTransitiveDependentsInspection"/>
-    <globalInspection language="JAVA" shortName="CyclicClassDependency" bundle="com.siyeh.InspectionGadgetsBundle"
+    <globalInspection groupPath="Java" language="JAVA" shortName="CyclicClassDependency" bundle="com.siyeh.InspectionGadgetsBundle"
                       key="cyclic.class.dependency.display.name" groupBundle="messages.InspectionsBundle"
                       groupKey="group.names.dependency.issues" enabledByDefault="false" level="WARNING"
                       implementationClass="com.siyeh.ig.dependency.CyclicClassDependencyInspection"/>
-    <globalInspection language="JAVA" shortName="CyclicPackageDependency" bundle="com.siyeh.InspectionGadgetsBundle"
+    <globalInspection groupPath="Java" language="JAVA" shortName="CyclicPackageDependency" bundle="com.siyeh.InspectionGadgetsBundle"
                       key="cyclic.package.dependency.display.name" groupBundle="messages.InspectionsBundle"
                       groupKey="group.names.dependency.issues" enabledByDefault="false" level="WARNING"
                       implementationClass="com.siyeh.ig.dependency.CyclicPackageDependencyInspection"/>
 
     <!--group.names.encapsulation.issues-->
-    <localInspection language="JAVA" shortName="PackageVisibleField" bundle="com.siyeh.InspectionGadgetsBundle" key="package.visible.field.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="PackageVisibleField" bundle="com.siyeh.InspectionGadgetsBundle" key="package.visible.field.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.encapsulation.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.encapsulation.PackageVisibleFieldInspection"/>
-    <localInspection language="JAVA" shortName="PackageVisibleInnerClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="PackageVisibleInnerClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="package.visible.inner.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.encapsulation.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.encapsulation.PackageVisibleInnerClassInspection"/>
-    <localInspection language="JAVA" shortName="ProtectedField" bundle="com.siyeh.InspectionGadgetsBundle" key="protected.field.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ProtectedField" bundle="com.siyeh.InspectionGadgetsBundle" key="protected.field.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.encapsulation.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.encapsulation.ProtectedFieldInspection"/>
-    <localInspection language="JAVA" shortName="ProtectedInnerClass" bundle="com.siyeh.InspectionGadgetsBundle" key="protected.inner.class.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ProtectedInnerClass" bundle="com.siyeh.InspectionGadgetsBundle" key="protected.inner.class.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.encapsulation.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.encapsulation.ProtectedInnerClassInspection"/>
-    <localInspection language="JAVA" shortName="PublicField" bundle="com.siyeh.InspectionGadgetsBundle" key="public.field.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="PublicField" bundle="com.siyeh.InspectionGadgetsBundle" key="public.field.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.encapsulation.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.encapsulation.PublicFieldInspection"/>
-    <localInspection language="JAVA" shortName="PublicInnerClass" bundle="com.siyeh.InspectionGadgetsBundle" key="public.inner.class.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="PublicInnerClass" bundle="com.siyeh.InspectionGadgetsBundle" key="public.inner.class.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.encapsulation.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.encapsulation.PublicInnerClassInspection"/>
-    <localInspection language="JAVA" suppressId="ReturnOfCollectionOrArrayField" shortName="ReturnOfCollectionField"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ReturnOfCollectionOrArrayField" shortName="ReturnOfCollectionField"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="return.of.collection.array.field.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.encapsulation.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.encapsulation.ReturnOfCollectionFieldInspection"/>
-    <localInspection language="JAVA" shortName="ReturnOfDateField" bundle="com.siyeh.InspectionGadgetsBundle" key="return.date.calendar.field.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ReturnOfDateField" bundle="com.siyeh.InspectionGadgetsBundle" key="return.date.calendar.field.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.encapsulation.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.encapsulation.ReturnOfDateFieldInspection"/>
-    <localInspection language="JAVA" suppressId="AccessingNonPublicFieldOfAnotherObject" shortName="UseOfAnotherObjectsPrivateField"
+    <localInspection groupPath="Java" language="JAVA" suppressId="AccessingNonPublicFieldOfAnotherObject" shortName="UseOfAnotherObjectsPrivateField"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="accessing.non.public.field.of.another.object.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.encapsulation.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.encapsulation.UseOfAnotherObjectsPrivateFieldInspection"/>
 
     <!--group.names.error.handling-->
-    <localInspection language="JAVA" suppressId="ProhibitedExceptionCaught" shortName="BadExceptionCaught" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ProhibitedExceptionCaught" shortName="BadExceptionCaught" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="bad.exception.caught.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.error.handling"
                      enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.BadExceptionCaughtInspection"/>
-    <localInspection language="JAVA" suppressId="ProhibitedExceptionDeclared" shortName="BadExceptionDeclared" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ProhibitedExceptionDeclared" shortName="BadExceptionDeclared" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="bad.exception.declared.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.error.handling" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.BadExceptionDeclaredInspection"/>
-    <localInspection language="JAVA" suppressId="ProhibitedExceptionThrown" shortName="BadExceptionThrown" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ProhibitedExceptionThrown" shortName="BadExceptionThrown" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="bad.exception.thrown.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.error.handling"
                      enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.BadExceptionThrownInspection"/>
-    <localInspection language="JAVA" shortName="CaughtExceptionImmediatelyRethrown" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="CaughtExceptionImmediatelyRethrown" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="caught.exception.immediately.rethrown.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.error.handling" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.CaughtExceptionImmediatelyRethrownInspection"/>
-    <localInspection language="JAVA" shortName="CheckedExceptionClass" bundle="com.siyeh.InspectionGadgetsBundle" key="checked.exception.class.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="CheckedExceptionClass" bundle="com.siyeh.InspectionGadgetsBundle" key="checked.exception.class.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.error.handling" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.CheckedExceptionClassInspection"/>
-    <localInspection language="JAVA" shortName="ContinueOrBreakFromFinallyBlock" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ContinueOrBreakFromFinallyBlock" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="continue.or.break.from.finally.block.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.error.handling" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.ContinueOrBreakFromFinallyBlockInspection"/>
-    <localInspection language="JAVA" shortName="EmptyCatchBlock" bundle="com.siyeh.InspectionGadgetsBundle" key="empty.catch.block.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="EmptyCatchBlock" bundle="com.siyeh.InspectionGadgetsBundle" key="empty.catch.block.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.error.handling" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.EmptyCatchBlockInspection"/>
-    <localInspection language="JAVA" shortName="EmptyFinallyBlock" bundle="com.siyeh.InspectionGadgetsBundle" key="empty.finally.block.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="EmptyFinallyBlock" bundle="com.siyeh.InspectionGadgetsBundle" key="empty.finally.block.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.error.handling" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.EmptyFinallyBlockInspection"/>
-    <localInspection language="JAVA" shortName="EmptyTryBlock" bundle="com.siyeh.InspectionGadgetsBundle" key="empty.try.block.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="EmptyTryBlock" bundle="com.siyeh.InspectionGadgetsBundle" key="empty.try.block.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.error.handling" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.EmptyTryBlockInspection"/>
-    <localInspection language="JAVA" suppressId="ErrorNotRethrown" shortName="ErrorRethrown" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ErrorNotRethrown" shortName="ErrorRethrown" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="error.rethrown.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.error.handling"
                      enabledByDefault="false" level="WARNING" implementationClass="com.siyeh.ig.errorhandling.ErrorRethrownInspection"/>
-    <localInspection language="JAVA" suppressId="ThrowInsideCatchBlockWhichIgnoresCaughtException" shortName="ExceptionFromCatchWhichDoesntWrap"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ThrowInsideCatchBlockWhichIgnoresCaughtException" shortName="ExceptionFromCatchWhichDoesntWrap"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="exception.from.catch.which.doesnt.wrap.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.error.handling" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.ExceptionFromCatchWhichDoesntWrapInspection"/>
-    <localInspection language="JAVA" suppressId="finally" shortName="FinallyBlockCannotCompleteNormally" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="finally" shortName="FinallyBlockCannotCompleteNormally" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="finally.block.cannot.complete.normally.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.error.handling" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.FinallyBlockCannotCompleteNormallyInspection"/>
-    <localInspection language="JAVA" shortName="InstanceofCatchParameter" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="InstanceofCatchParameter" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="instanceof.catch.parameter.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.error.handling" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.InstanceofCatchParameterInspection"/>
-    <localInspection language="JAVA" shortName="NestedTryStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="nested.try.statement.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="NestedTryStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="nested.try.statement.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.error.handling" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.NestedTryStatementInspection"/>
-    <localInspection language="JAVA" shortName="NonFinalFieldOfException" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="NonFinalFieldOfException" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="non.final.field.of.exception.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.error.handling" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.NonFinalFieldOfExceptionInspection"/>
-    <localInspection language="JAVA" suppressId="ReturnInsideFinallyBlock" shortName="ReturnFromFinallyBlock" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ReturnInsideFinallyBlock" shortName="ReturnFromFinallyBlock" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="return.from.finally.block.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.error.handling" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.ReturnFromFinallyBlockInspection"/>
-    <localInspection language="JAVA" suppressId="ThreadDeathNotRethrown" shortName="ThreadDeathRethrown" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ThreadDeathNotRethrown" shortName="ThreadDeathRethrown" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="thread.death.rethrown.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.error.handling"
                      enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.ThreadDeathRethrownInspection"/>
-    <localInspection language="JAVA" shortName="ThrowCaughtLocally" bundle="com.siyeh.InspectionGadgetsBundle" key="throw.caught.locally.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ThrowCaughtLocally" bundle="com.siyeh.InspectionGadgetsBundle" key="throw.caught.locally.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.error.handling" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.ThrowCaughtLocallyInspection"/>
-    <localInspection language="JAVA" shortName="ThrowFromFinallyBlock" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ThrowFromFinallyBlock" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="throw.from.finally.block.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.error.handling" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.ThrowFromFinallyBlockInspection"/>
-    <localInspection language="JAVA" shortName="NullThrown" bundle="com.siyeh.InspectionGadgetsBundle" key="null.thrown.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="NullThrown" bundle="com.siyeh.InspectionGadgetsBundle" key="null.thrown.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.error.handling" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.NullThrownInspection"/>
-    <localInspection language="JAVA" suppressId="OverlyBroadCatchBlock" shortName="TooBroadCatch" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="OverlyBroadCatchBlock" shortName="TooBroadCatch" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="too.broad.catch.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.error.handling"
                      enabledByDefault="false" level="WARNING" implementationClass="com.siyeh.ig.errorhandling.TooBroadCatchInspection"/>
-    <localInspection language="JAVA" suppressId="OverlyBroadThrowsClause" shortName="TooBroadThrows" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="OverlyBroadThrowsClause" shortName="TooBroadThrows" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="overly.broad.throws.clause.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.error.handling" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.TooBroadThrowsInspection"/>
-    <localInspection language="JAVA" shortName="UncheckedExceptionClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="UncheckedExceptionClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="unchecked.exception.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.error.handling" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.UncheckedExceptionClassInspection"/>
-    <localInspection language="JAVA" shortName="UnusedCatchParameter" bundle="com.siyeh.InspectionGadgetsBundle" key="unused.catch.parameter.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="UnusedCatchParameter" bundle="com.siyeh.InspectionGadgetsBundle" key="unused.catch.parameter.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.error.handling" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.UnusedCatchParameterInspection"/>
-    <localInspection language="JAVA" shortName="NewExceptionWithoutArguments" bundle="com.siyeh.InspectionGadgetsBundle" key="new.exception.without.arguments.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="NewExceptionWithoutArguments" bundle="com.siyeh.InspectionGadgetsBundle" key="new.exception.without.arguments.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.error.handling" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.NewExceptionWithoutArgumentsInspection"/>
-    <localInspection language="JAVA" shortName="ThrowsRuntimeException" bundle="com.siyeh.InspectionGadgetsBundle" key="throws.runtime.exception.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ThrowsRuntimeException" bundle="com.siyeh.InspectionGadgetsBundle" key="throws.runtime.exception.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.error.handling" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.errorhandling.ThrowsRuntimeExceptionInspection"/>
 
     <!--group.names.finalization.issues-->
-    <localInspection language="JAVA" suppressId="FinalizeDoesntCallSuperFinalize" shortName="FinalizeCallsSuperFinalize"
+    <localInspection groupPath="Java" language="JAVA" suppressId="FinalizeDoesntCallSuperFinalize" shortName="FinalizeCallsSuperFinalize"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="finalize.doesnt.call.super.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.finalization.issues" enabledByDefault="true"
                      level="WARNING" implementationClass="com.siyeh.ig.finalization.FinalizeCallsSuperFinalizeInspection"/>
-    <localInspection language="JAVA" suppressId="FinalizeDeclaration" shortName="Finalize" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="FinalizeDeclaration" shortName="Finalize" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="finalize.declaration.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.finalization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.finalization.FinalizeInspection"/>
-    <localInspection language="JAVA" shortName="FinalizeNotProtected" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="FinalizeNotProtected" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="finalize.not.declared.protected.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.finalization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.finalization.FinalizeNotProtectedInspection"/>
-    <localInspection language="JAVA" suppressId="FinalizeCalledExplicitly" shortName="NoExplicitFinalizeCalls" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="FinalizeCalledExplicitly" shortName="NoExplicitFinalizeCalls" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="finalize.called.explicitly.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.finalization.issues" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.finalization.NoExplicitFinalizeCallsInspection"/>
 
     <!--group.names.imports-->
-    <localInspection language="JAVA" shortName="JavaLangImport" bundle="com.siyeh.InspectionGadgetsBundle" key="java.lang.import.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="JavaLangImport" bundle="com.siyeh.InspectionGadgetsBundle" key="java.lang.import.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.imports" enabledByDefault="false" level="WARNING" cleanupTool="true"
                      implementationClass="com.siyeh.ig.imports.JavaLangImportInspection"/>
-    <localInspection language="JAVA" shortName="OnDemandImport" bundle="com.siyeh.InspectionGadgetsBundle" key="import.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="OnDemandImport" bundle="com.siyeh.InspectionGadgetsBundle" key="import.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.imports" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.imports.OnDemandImportInspection"/>
-    <localInspection language="JAVA" shortName="SamePackageImport" bundle="com.siyeh.InspectionGadgetsBundle" key="import.from.same.package.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="SamePackageImport" bundle="com.siyeh.InspectionGadgetsBundle" key="import.from.same.package.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.imports" enabledByDefault="false" level="WARNING" cleanupTool="true"
                      implementationClass="com.siyeh.ig.imports.SamePackageImportInspection"/>
-    <localInspection language="JAVA" shortName="SingleClassImport" bundle="com.siyeh.InspectionGadgetsBundle" key="single.class.import.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="SingleClassImport" bundle="com.siyeh.InspectionGadgetsBundle" key="single.class.import.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.imports" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.imports.SingleClassImportInspection"/>
-    <localInspection language="JAVA" shortName="StaticImport" bundle="com.siyeh.InspectionGadgetsBundle" key="static.import.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="StaticImport" bundle="com.siyeh.InspectionGadgetsBundle" key="static.import.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.imports" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.imports.StaticImportInspection"/>
-    <localInspection language="JAVA" shortName="UnusedImport" bundle="com.siyeh.InspectionGadgetsBundle" key="unused.import.display.name" runForWholeFile="true"
+    <localInspection groupPath="Java" language="JAVA" shortName="UnusedImport" bundle="com.siyeh.InspectionGadgetsBundle" key="unused.import.display.name" runForWholeFile="true"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.imports" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.imports.UnusedImportInspection"/>
 
     <!--group.names.inheritance.issues-->
-    <localInspection language="JAVA" shortName="AbstractClassExtendsConcreteClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AbstractClassExtendsConcreteClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="abstract.class.extends.concrete.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.inheritance.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.inheritance.AbstractClassExtendsConcreteClassInspection"/>
-    <localInspection language="JAVA" shortName="AbstractClassNeverImplemented" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AbstractClassNeverImplemented" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="abstract.class.never.implemented.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.inheritance.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.inheritance.AbstractClassNeverImplementedInspection"/>
-    <localInspection language="JAVA" shortName="AbstractClassWithoutAbstractMethods" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AbstractClassWithoutAbstractMethods" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="abstract.class.without.abstract.methods.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.inheritance.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.inheritance.AbstractClassWithoutAbstractMethodsInspection"/>
-    <localInspection language="JAVA" shortName="AbstractMethodOverridesAbstractMethod" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AbstractMethodOverridesAbstractMethod" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="abstract.method.overrides.abstract.method.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.inheritance.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.inheritance.AbstractMethodOverridesAbstractMethodInspection"/>
-    <localInspection language="JAVA" shortName="AbstractMethodOverridesConcreteMethod" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AbstractMethodOverridesConcreteMethod" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="abstract.method.overrides.concrete.method.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.inheritance.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.inheritance.AbstractMethodOverridesConcreteMethodInspection"/>
-    <localInspection language="JAVA" shortName="AbstractMethodWithMissingImplementations" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AbstractMethodWithMissingImplementations" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="abstract.method.with.missing.implementations.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.inheritance.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.inheritance.AbstractMethodWithMissingImplementationsInspection"/>
-    <localInspection language="JAVA" suppressId="ClassExplicitlyAnnotation" shortName="ExtendsAnnotation" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ClassExplicitlyAnnotation" shortName="ExtendsAnnotation" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="extends.annotation.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.inheritance.issues" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.inheritance.ExtendsAnnotationInspection"/>
-    <localInspection language="JAVA" suppressId="ClassExtendsConcreteCollection" shortName="ExtendsConcreteCollection"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ClassExtendsConcreteCollection" shortName="ExtendsConcreteCollection"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="extends.concrete.collection.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.inheritance.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.inheritance.ExtendsConcreteCollectionInspection"/>
-    <localInspection language="JAVA" shortName="ExtendsUtilityClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ExtendsUtilityClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="class.extends.utility.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.inheritance.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.inheritance.ExtendsUtilityClassInspection"/>
-    <localInspection language="JAVA" shortName="InterfaceNeverImplemented" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="InterfaceNeverImplemented" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="interface.never.implemented.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.inheritance.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.inheritance.InterfaceNeverImplementedInspection"/>
-    <localInspection language="JAVA" suppressId="ConstructorNotProtectedInAbstractClass" shortName="NonProtectedConstructorInAbstractClass"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ConstructorNotProtectedInAbstractClass" shortName="NonProtectedConstructorInAbstractClass"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="non.protected.constructor.in.abstract.class.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.inheritance.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.inheritance.NonProtectedConstructorInAbstractClassInspection"/>
-    <localInspection language="JAVA" shortName="ParameterTypePreventsOverriding" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ParameterTypePreventsOverriding" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="parameter.type.prevents.overriding.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.inheritance.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.inheritance.ParameterTypePreventsOverridingInspection"/>
-    <localInspection language="JAVA" shortName="ProblematicVarargsMethodOverride" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ProblematicVarargsMethodOverride" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="problematic.varargs.method.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.inheritance.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.inheritance.ProblematicVarargsMethodOverrideInspection"/>
-    <localInspection language="JAVA" shortName="RedundantMethodOverride" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="RedundantMethodOverride" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="redundant.method.override.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.inheritance.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.inheritance.RedundantMethodOverrideInspection"/>
-    <localInspection language="JAVA" shortName="RefusedBequest" bundle="com.siyeh.InspectionGadgetsBundle" key="refused.bequest.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="RefusedBequest" bundle="com.siyeh.InspectionGadgetsBundle" key="refused.bequest.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.inheritance.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.inheritance.RefusedBequestInspection"/>
-    <localInspection language="JAVA" shortName="StaticInheritance" bundle="com.siyeh.InspectionGadgetsBundle" key="static.inheritance.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="StaticInheritance" bundle="com.siyeh.InspectionGadgetsBundle" key="static.inheritance.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.inheritance.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.inheritance.StaticInheritanceInspection"/>
-    <localInspection language="JAVA" shortName="TypeParameterExtendsFinalClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="TypeParameterExtendsFinalClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="type.parameter.extends.final.class.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.inheritance.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.inheritance.TypeParameterExtendsFinalClassInspection"/>
-    <localInspection language="JAVA" suppressId="override" shortName="MissingOverrideAnnotation" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="override" shortName="MissingOverrideAnnotation" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="missing.override.annotation.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.inheritance.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.inheritance.MissingOverrideAnnotationInspection"/>
 
     <!--group.names.initialization.issues-->
-    <localInspection language="JAVA" shortName="AbstractMethodCallInConstructor" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AbstractMethodCallInConstructor" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="abstract.method.call.in.constructor.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.initialization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.initialization.AbstractMethodCallInConstructorInspection"/>
-    <localInspection language="JAVA" shortName="DoubleBraceInitialization" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="DoubleBraceInitialization" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="double.brace.initialization.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.initialization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.initialization.DoubleBraceInitializationInspection"/>
-    <localInspection language="JAVA" suppressId="InstanceVariableMayNotBeInitialized" shortName="InstanceVariableInitialization"
+    <localInspection groupPath="Java" language="JAVA" suppressId="InstanceVariableMayNotBeInitialized" shortName="InstanceVariableInitialization"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="instance.variable.may.not.be.initialized.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.initialization.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.initialization.InstanceVariableInitializationInspection"/>
-    <localInspection language="JAVA" suppressId="InstanceVariableUsedBeforeInitialized" shortName="InstanceVariableUninitializedUse"
+    <localInspection groupPath="Java" language="JAVA" suppressId="InstanceVariableUsedBeforeInitialized" shortName="InstanceVariableUninitializedUse"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="instance.variable.used.before.initialized.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.initialization.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.initialization.InstanceVariableUninitializedUseInspection"/>
-    <localInspection language="JAVA" shortName="NonFinalStaticVariableUsedInClassInitialization" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="NonFinalStaticVariableUsedInClassInitialization" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="non.final.static.variable.initialization.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.initialization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.initialization.NonFinalStaticVariableUsedInClassInitializationInspection"/>
-    <localInspection language="JAVA" shortName="NonThreadSafeLazyInitialization" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="NonThreadSafeLazyInitialization" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="non.thread.safe.lazy.initialization.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.initialization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.initialization.NonThreadSafeLazyInitializationInspection"/>
-    <localInspection language="JAVA" shortName="OverridableMethodCallDuringObjectConstruction" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="OverridableMethodCallDuringObjectConstruction" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="overridable.method.call.in.constructor.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.initialization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.initialization.OverridableMethodCallDuringObjectConstructionInspection"/>
-    <localInspection language="JAVA" shortName="OverriddenMethodCallDuringObjectConstruction" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="OverriddenMethodCallDuringObjectConstruction" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="overridden.method.call.in.constructor.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.initialization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.initialization.OverriddenMethodCallDuringObjectConstructionInspection"/>
-    <localInspection language="JAVA" suppressId="StaticVariableMayNotBeInitialized" shortName="StaticVariableInitialization"
+    <localInspection groupPath="Java" language="JAVA" suppressId="StaticVariableMayNotBeInitialized" shortName="StaticVariableInitialization"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="static.variable.may.not.be.initialized.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.initialization.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.initialization.StaticVariableInitializationInspection"/>
-    <localInspection language="JAVA" suppressId="StaticVariableUsedBeforeInitialization" shortName="StaticVariableUninitializedUse"
+    <localInspection groupPath="Java" language="JAVA" suppressId="StaticVariableUsedBeforeInitialization" shortName="StaticVariableUninitializedUse"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="static.variable.used.before.initialization.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.initialization.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.initialization.StaticVariableUninitializedUseInspection"/>
-    <localInspection language="JAVA" suppressId="ThisEscapedInObjectConstruction" shortName="ThisEscapedInConstructor"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ThisEscapedInObjectConstruction" shortName="ThisEscapedInConstructor"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="this.reference.escaped.in.construction.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.initialization.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.initialization.ThisEscapedInConstructorInspection"/>
 
     <!--group.names.internationalization.issues-->
-    <localInspection language="JAVA" shortName="CharacterComparison" bundle="com.siyeh.InspectionGadgetsBundle" key="character.comparison.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="CharacterComparison" bundle="com.siyeh.InspectionGadgetsBundle" key="character.comparison.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.internationalization.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.internationalization.CharacterComparisonInspection"/>
-    <localInspection language="JAVA" suppressId="CallToDateToString" shortName="DateToString" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="CallToDateToString" shortName="DateToString" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="call.to.date.tostring.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.internationalization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.internationalization.DateToStringInspection"/>
-    <localInspection language="JAVA" shortName="MagicCharacter" bundle="com.siyeh.InspectionGadgetsBundle" key="magic.character.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="MagicCharacter" bundle="com.siyeh.InspectionGadgetsBundle" key="magic.character.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.internationalization.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.internationalization.MagicCharacterInspection"/>
-    <localInspection language="JAVA" suppressId="CallToNumericToString" shortName="NumericToString" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="CallToNumericToString" shortName="NumericToString" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="call.to.numeric.tostring.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.internationalization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.internationalization.NumericToStringInspection"/>
-    <localInspection language="JAVA" shortName="SimpleDateFormatWithoutLocale" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="SimpleDateFormatWithoutLocale" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="instantiating.simpledateformat.without.locale.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.internationalization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.internationalization.SimpleDateFormatWithoutLocaleInspection"/>
-    <localInspection language="JAVA" suppressId="CallToStringCompareTo" shortName="StringCompareTo" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="CallToStringCompareTo" shortName="StringCompareTo" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="string.compareto.call.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.internationalization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.internationalization.StringCompareToInspection"/>
-    <localInspection language="JAVA" shortName="StringConcatenation" bundle="com.siyeh.InspectionGadgetsBundle" key="string.concatenation.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="StringConcatenation" bundle="com.siyeh.InspectionGadgetsBundle" key="string.concatenation.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.internationalization.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.internationalization.StringConcatenationInspection"/>
-    <localInspection language="JAVA" suppressId="CallToStringEqualsIgnoreCase" shortName="StringEqualsIgnoreCase" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="CallToStringEqualsIgnoreCase" shortName="StringEqualsIgnoreCase" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="string.equalsignorecase.call.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.internationalization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.internationalization.StringEqualsIgnoreCaseInspection"/>
-    <localInspection language="JAVA" suppressId="CallToStringEquals" shortName="StringEquals" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="CallToStringEquals" shortName="StringEquals" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="string.equals.call.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.internationalization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.internationalization.StringEqualsInspection"/>
-    <localInspection language="JAVA" suppressId="StringToUpperCaseOrToLowerCaseWithoutLocale" shortName="StringToUpperWithoutLocale"
+    <localInspection groupPath="Java" language="JAVA" suppressId="StringToUpperCaseOrToLowerCaseWithoutLocale" shortName="StringToUpperWithoutLocale"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="string.touppercase.tolowercase.without.locale.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.internationalization.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.internationalization.StringToUpperWithoutLocaleInspection"/>
-    <localInspection language="JAVA" suppressId="UseOfStringTokenizer" shortName="StringTokenizer" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="UseOfStringTokenizer" shortName="StringTokenizer" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="use.stringtokenizer.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.internationalization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.internationalization.StringTokenizerInspection"/>
-    <localInspection language="JAVA" suppressId="CallToTimeToString" shortName="TimeToString" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="CallToTimeToString" shortName="TimeToString" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="time.tostring.call.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.internationalization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.internationalization.TimeToStringInspection"/>
-    <localInspection language="JAVA" shortName="AbsoluteAlignmentInUserInterface" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AbsoluteAlignmentInUserInterface" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="absolute.alignment.in.user.interface.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.internationalization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.internationalization.AbsoluteAlignmentInUserInterfaceInspection"/>
-    <localInspection language="JAVA" shortName="UnnecessaryUnicodeEscape" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="UnnecessaryUnicodeEscape" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="unnecessary.unicode.escape.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.internationalization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.internationalization.UnnecessaryUnicodeEscapeInspection"/>
-<localInspection language="JAVA" shortName="ImplicitDefaultCharsetUsage" bundle="com.siyeh.InspectionGadgetsBundle"
+<localInspection groupPath="Java" language="JAVA" shortName="ImplicitDefaultCharsetUsage" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="implicit.default.charset.usage.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.internationalization.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.internationalization.ImplicitDefaultCharsetUsageInspection"/>
 
     <!--group.names.j2me.issues-->
-    <localInspection language="JAVA" shortName="AbstractClassWithOnlyOneDirectInheritor" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AbstractClassWithOnlyOneDirectInheritor" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="abstract.class.with.only.one.direct.inheritor.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.j2me.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.j2me.AbstractClassWithOnlyOneDirectInheritorInspection"/>
-    <localInspection language="JAVA" shortName="ArrayLengthInLoopCondition" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ArrayLengthInLoopCondition" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="array.length.in.loop.condition.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.j2me.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.j2me.ArrayLengthInLoopConditionInspection"/>
-    <localInspection language="JAVA" shortName="CheckForOutOfMemoryOnLargeArrayAllocation" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="CheckForOutOfMemoryOnLargeArrayAllocation" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="large.array.allocation.no.outofmemoryerror.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.j2me.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.j2me.CheckForOutOfMemoryOnLargeArrayAllocationInspection"/>
-    <localInspection language="JAVA" suppressId="ConnectionOpenedButNotSafelyClosed" shortName="ConnectionResource"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ConnectionOpenedButNotSafelyClosed" shortName="ConnectionResource"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="connection.opened.not.safely.closed.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.j2me.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.j2me.ConnectionResourceInspection"/>
-    <localInspection language="JAVA" suppressId="FieldRepeatedlyAccessedInMethod" shortName="FieldRepeatedlyAccessed"
+    <localInspection groupPath="Java" language="JAVA" suppressId="FieldRepeatedlyAccessedInMethod" shortName="FieldRepeatedlyAccessed"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="field.repeatedly.accessed.in.method.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.j2me.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.j2me.FieldRepeatedlyAccessedInspection"/>
-    <localInspection language="JAVA" shortName="InterfaceWithOnlyOneDirectInheritor" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="InterfaceWithOnlyOneDirectInheritor" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="interface.one.inheritor.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.j2me.issues"
                      enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.j2me.InterfaceWithOnlyOneDirectInheritorInspection"/>
-    <localInspection language="JAVA" shortName="MethodCallInLoopCondition" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="MethodCallInLoopCondition" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="method.call.in.loop.condition.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.j2me.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.j2me.MethodCallInLoopConditionInspection"/>
-    <localInspection language="JAVA" shortName="MultiplyOrDivideByPowerOfTwo" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="MultiplyOrDivideByPowerOfTwo" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="multiply.or.divide.by.power.of.two.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.j2me.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.j2me.MultiplyOrDivideByPowerOfTwoInspection"/>
-    <localInspection language="JAVA" shortName="OverlyLargePrimitiveArrayInitializer" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="OverlyLargePrimitiveArrayInitializer" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="large.initializer.primitive.type.array.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.j2me.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.j2me.OverlyLargePrimitiveArrayInitializerInspection"/>
-    <localInspection language="JAVA" shortName="PrivateMemberAccessBetweenOuterAndInnerClass" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="PrivateMemberAccessBetweenOuterAndInnerClass" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="private.member.access.between.outer.and.inner.classes.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.j2me.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.j2me.PrivateMemberAccessBetweenOuterAndInnerClassInspection"/>
-    <localInspection language="JAVA" suppressId="RecordStoreOpenedButNotSafelyClosed" shortName="RecordStoreResource"
+    <localInspection groupPath="Java" language="JAVA" suppressId="RecordStoreOpenedButNotSafelyClosed" shortName="RecordStoreResource"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="recordstore.opened.not.safely.closed.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.j2me.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.j2me.RecordStoreResourceInspection"/>
-    <localInspection language="JAVA" shortName="SimplifiableIfStatement" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="SimplifiableIfStatement" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="simplifiable.if.statement.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.j2me.issues" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.j2me.SimplifiableIfStatementInspection"/>
-    <localInspection language="JAVA" shortName="SingleCharacterStartsWith" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="SingleCharacterStartsWith" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="single.character.startswith.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.j2me.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.j2me.SingleCharacterStartsWithInspection"/>
 
     <!--group.names.javabeans.issues-->
-    <localInspection language="JAVA" shortName="ClassWithoutConstructor" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ClassWithoutConstructor" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="class.without.constructor.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.javabeans.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.javabeans.ClassWithoutConstructorInspection"/>
-    <localInspection language="JAVA" shortName="ClassWithoutNoArgConstructor" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ClassWithoutNoArgConstructor" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="class.without.no.arg.constructor.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.javabeans.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.javabeans.ClassWithoutNoArgConstructorInspection"/>
-    <localInspection language="JAVA" shortName="FieldHasSetterButNoGetter" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="FieldHasSetterButNoGetter" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="field.has.setter.but.no.getter.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.javabeans.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.javabeans.FieldHasSetterButNoGetterInspection"/>
-    <localInspection language="JAVA" shortName="PropertyValueSetToItself" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="PropertyValueSetToItself" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="property.value.set.to.itself.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.javabeans.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.javabeans.PropertyValueSetToItselfInspection"/>
-    <localInspection language="JAVA" shortName="SuspiciousGetterSetter" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="SuspiciousGetterSetter" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="suspicious.getter.setter.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.javabeans.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.javabeans.SuspiciousGetterSetterInspection"/>
 
     <!--group.names.javadoc.issues-->
-    <localInspection language="JAVA" shortName="DanglingJavadoc" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="DanglingJavadoc" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="dangling.javadoc.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.javadoc.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.javadoc.DanglingJavadocInspection"/>
-    <localInspection language="JAVA" shortName="HtmlTagCanBeJavadocTag" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="HtmlTagCanBeJavadocTag" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="html.tag.can.be.javadoc.tag.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.javadoc.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.javadoc.HtmlTagCanBeJavadocTagInspection"/>
-    <localInspection language="JAVA" shortName="MissingDeprecatedAnnotation" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="MissingDeprecatedAnnotation" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="missing.deprecated.annotation.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.javadoc.issues" enabledByDefault="false" level="WARNING" runForWholeFile="true"
                      implementationClass="com.siyeh.ig.javadoc.MissingDeprecatedAnnotationInspection"/>
-    <globalInspection language="JAVA" shortName="MissingPackageInfo" bundle="com.siyeh.InspectionGadgetsBundle"
+    <globalInspection groupPath="Java" language="JAVA" shortName="MissingPackageInfo" bundle="com.siyeh.InspectionGadgetsBundle"
                       key="missing.package.info.display.name" groupBundle="messages.InspectionsBundle"
                       groupKey="group.names.javadoc.issues" enabledByDefault="false" level="WARNING"
                       implementationClass="com.siyeh.ig.javadoc.MissingPackageInfoInspection"/>
-    <localInspection language="JAVA" shortName="PackageInfoWithoutPackage" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="PackageInfoWithoutPackage" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="package.info.java.without.package.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.javadoc.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.javadoc.PackageInfoWithoutPackageInspection"/>
-    <localInspection language="HTML" shortName="PackageDotHtmlMayBePackageInfo" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="HTML" shortName="PackageDotHtmlMayBePackageInfo" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="package.dot.html.may.be.package.info.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.javadoc.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.javadoc.PackageDotHtmlMayBePackageInfoInspection"/>
-    <localInspection language="JAVA" shortName="UnnecessaryJavaDocLink" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="UnnecessaryJavaDocLink" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="unnecessary.javadoc.link.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.javadoc.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.javadoc.UnnecessaryJavaDocLinkInspection"/>
-    <localInspection language="JAVA" shortName="UnnecessaryInheritDoc" bundle="com.siyeh.InspectionGadgetsBundle" key="unnecessary.inherit.doc.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="UnnecessaryInheritDoc" bundle="com.siyeh.InspectionGadgetsBundle" key="unnecessary.inherit.doc.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.javadoc.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.javadoc.UnnecessaryInheritDocInspection"/>
 
     <!--group.names.language.level.specific.issues.and.migration.aids-->
-    <localInspection language="JAVA" shortName="CollectionsFieldAccessReplaceableByMethodCall" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="CollectionsFieldAccessReplaceableByMethodCall" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="collections.field.access.replaceable.by.method.call.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.language.level.specific.issues.and.migration.aids" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.migration.CollectionsFieldAccessReplaceableByMethodCallInspection"/>
-    <localInspection language="JAVA" shortName="BigDecimalLegacyMethod" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="BigDecimalLegacyMethod" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="bigdecimal.legacy.method.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.language.level.specific.issues.and.migration.aids" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.migration.BigDecimalLegacyMethodInspection"/>
-    <localInspection language="JAVA" shortName="EnumerationCanBeIteration" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="EnumerationCanBeIteration" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="enumeration.can.be.iteration.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.language.level.specific.issues.and.migration.aids" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.migration.EnumerationCanBeIterationInspection"/>
-    <localInspection language="JAVA" suppressId="ForLoopReplaceableByForEach" shortName="ForCanBeForeach" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="ForLoopReplaceableByForEach" shortName="ForCanBeForeach" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="for.can.be.foreach.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.language.level.specific.issues.and.migration.aids" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.migration.ForCanBeForeachInspection"/>
-    <localInspection language="JAVA" shortName="IfCanBeSwitch" bundle="com.siyeh.InspectionGadgetsBundle" key="if.can.be.switch.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="IfCanBeSwitch" bundle="com.siyeh.InspectionGadgetsBundle" key="if.can.be.switch.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.language.level.specific.issues.and.migration.aids"
                      enabledByDefault="true" level="WARNING" implementationClass="com.siyeh.ig.migration.IfCanBeSwitchInspection"/>
-    <localInspection language="JAVA" shortName="IndexOfReplaceableByContains" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="IndexOfReplaceableByContains" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="indexof.replaceable.by.contains.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.language.level.specific.issues.and.migration.aids" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.migration.IndexOfReplaceableByContainsInspection"/>
-    <localInspection language="JAVA" shortName="MethodCanBeVariableArityMethod" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="MethodCanBeVariableArityMethod" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="method.can.be.variable.arity.method.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.language.level.specific.issues.and.migration.aids" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.migration.MethodCanBeVariableArityMethodInspection"/>
-    <localInspection language="JAVA" suppressId="rawtypes" alternativeId="RawUseOfParameterized" shortName="RawUseOfParameterizedType" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="rawtypes" alternativeId="RawUseOfParameterized" shortName="RawUseOfParameterizedType" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="raw.use.of.parameterized.type.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.language.level.specific.issues.and.migration.aids" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.migration.RawUseOfParameterizedTypeInspection"/>
-    <localInspection language="JAVA" suppressId="StringBufferMayBeStringBuilder" shortName="StringBufferReplaceableByStringBuilder"
+    <localInspection groupPath="Java" language="JAVA" suppressId="StringBufferMayBeStringBuilder" shortName="StringBufferReplaceableByStringBuilder"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="string.buffer.replaceable.by.string.builder.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.language.level.specific.issues.and.migration.aids"
                      enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.migration.StringBufferReplaceableByStringBuilderInspection"/>
-    <localInspection language="JAVA" shortName="TryFinallyCanBeTryWithResources" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="TryFinallyCanBeTryWithResources" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="try.finally.can.be.try.with.resources.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.language.level.specific.issues.and.migration.aids" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.migration.TryFinallyCanBeTryWithResourcesInspection"/>
-    <localInspection language="JAVA" shortName="TryWithIdenticalCatches" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="TryWithIdenticalCatches" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="try.with.identical.catches.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.language.level.specific.issues.and.migration.aids" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.migration.TryWithIdenticalCatchesInspection"/>
-    <localInspection language="JAVA" shortName="UnnecessaryBoxing" bundle="com.siyeh.InspectionGadgetsBundle" key="unnecessary.boxing.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="UnnecessaryBoxing" bundle="com.siyeh.InspectionGadgetsBundle" key="unnecessary.boxing.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.language.level.specific.issues.and.migration.aids"
                      enabledByDefault="true" level="WARNING" implementationClass="com.siyeh.ig.migration.UnnecessaryBoxingInspection"/>
-    <localInspection language="JAVA" shortName="UnnecessaryUnboxing" bundle="com.siyeh.InspectionGadgetsBundle" key="unnecessary.unboxing.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="UnnecessaryUnboxing" bundle="com.siyeh.InspectionGadgetsBundle" key="unnecessary.unboxing.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.language.level.specific.issues.and.migration.aids"
                      enabledByDefault="true" level="WARNING" implementationClass="com.siyeh.ig.migration.UnnecessaryUnboxingInspection"/>
-    <localInspection language="JAVA" suppressId="WhileLoopReplaceableByForEach" shortName="WhileCanBeForeach" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="WhileLoopReplaceableByForEach" shortName="WhileCanBeForeach" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="while.can.be.foreach.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.language.level.specific.issues.and.migration.aids" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.migration.WhileCanBeForeachInspection"/>
 
     <!--group.names.java.language.level.issues-->
-    <localInspection language="JAVA" shortName="AnnotationClass" bundle="com.siyeh.InspectionGadgetsBundle" key="annotation.class.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="AnnotationClass" bundle="com.siyeh.InspectionGadgetsBundle" key="annotation.class.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.java.language.level.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.jdk.AnnotationClassInspection"/>
-    <localInspection language="JAVA" shortName="Annotation" bundle="com.siyeh.InspectionGadgetsBundle" key="annotation.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="Annotation" bundle="com.siyeh.InspectionGadgetsBundle" key="annotation.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.java.language.level.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.jdk.AnnotationInspection"/>
-    <localInspection language="JAVA" suppressId="AssertAsIdentifier" shortName="AssertAsName" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="AssertAsIdentifier" shortName="AssertAsName" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="use.assert.as.identifier.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.java.language.level.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.jdk.AssertAsNameInspection"/>
-    <localInspection language="JAVA" shortName="AssertStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="assert.statement.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="AssertStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="assert.statement.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.java.language.level.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.jdk.AssertStatementInspection"/>
-    <localInspection language="JAVA" alternativeId="boxing" shortName="AutoBoxing" bundle="com.siyeh.InspectionGadgetsBundle" key="auto.boxing.display.name"
+    <localInspection groupPath="Java" language="JAVA" alternativeId="boxing" shortName="AutoBoxing" bundle="com.siyeh.InspectionGadgetsBundle" key="auto.boxing.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.java.language.level.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.jdk.AutoBoxingInspection"/>
-    <localInspection language="JAVA" shortName="AutoUnboxing" bundle="com.siyeh.InspectionGadgetsBundle" key="auto.unboxing.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="AutoUnboxing" bundle="com.siyeh.InspectionGadgetsBundle" key="auto.unboxing.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.java.language.level.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.jdk.AutoUnboxingInspection"/>
-    <localInspection language="JAVA" suppressId="EnumAsIdentifier" shortName="EnumAsName" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="EnumAsIdentifier" shortName="EnumAsName" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="use.enum.as.identifier.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.java.language.level.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.jdk.EnumAsNameInspection"/>
-    <localInspection language="JAVA" shortName="EnumClass" bundle="com.siyeh.InspectionGadgetsBundle" key="enumerated.class.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="EnumClass" bundle="com.siyeh.InspectionGadgetsBundle" key="enumerated.class.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.java.language.level.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.jdk.EnumClassInspection"/>
-    <localInspection language="JAVA" shortName="ForeachStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="extended.for.statement.display.name"
+    <localInspection groupPath="Java" language="JAVA" shortName="ForeachStatement" bundle="com.siyeh.InspectionGadgetsBundle" key="extended.for.statement.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.java.language.level.issues" enabledByDefault="false"
                      level="WARNING" implementationClass="com.siyeh.ig.jdk.ForeachStatementInspection"/>
-    <localInspection language="JAVA" suppressId="VariableArgumentMethod" shortName="VarargParameter" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" suppressId="VariableArgumentMethod" shortName="VarargParameter" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="variable.argument.method.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.java.language.level.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.jdk.VarargParameterInspection"/>
 
     <!--group.names.junit.issues-->
-    <localInspection language="JAVA" shortName="AssertEqualsBetweenInconvertibleTypes" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AssertEqualsBetweenInconvertibleTypes" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="assertequals.between.inconvertible.types.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.junit.issues" enabledByDefault="true" level="WARNING"
                      implementationClass="com.siyeh.ig.junit.AssertEqualsBetweenInconvertibleTypesInspection"/>
-    <localInspection language="JAVA" shortName="AssertEqualsMayBeAssertSame" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AssertEqualsMayBeAssertSame" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="assertequals.may.be.assertsame.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.junit.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.junit.AssertEqualsMayBeAssertSameInspection"/>
-    <localInspection language="JAVA" shortName="AssertEqualsCalledOnArray" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="AssertEqualsCalledOnArray" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="assertequals.called.on.arrays.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.junit.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.junit.AssertEqualsCalledOnArrayInspection"/>
-    <localInspection language="JAVA" shortName="JUnitRule" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="JUnitRule" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="junit.rule.display.name" implementationClass="com.siyeh.ig.junit.JUnitRuleInspection"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.junit.issues" enabledByDefault="false" level="WARNING"/>
-    <localInspection language="JAVA" shortName="JUnitDatapoint" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="JUnitDatapoint" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="junit.datapoint.display.name" implementationClass="com.siyeh.ig.junit.JUnitDatapointInspection"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.junit.issues" enabledByDefault="false" level="WARNING"/>
-    <localInspection language="JAVA" suppressId="MessageMissingOnJUnitAssertion" shortName="AssertsWithoutMessages"
+    <localInspection groupPath="Java" language="JAVA" suppressId="MessageMissingOnJUnitAssertion" shortName="AssertsWithoutMessages"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="asserts.without.messages.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.junit.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.junit.AssertsWithoutMessagesInspection"/>
-    <localInspection language="JAVA" suppressId="BeforeOrAfterWithIncorrectSignature" shortName="BeforeClassOrAfterClassIsPublicStaticVoidNoArg"
+    <localInspection groupPath="Java" language="JAVA" suppressId="BeforeOrAfterWithIncorrectSignature" shortName="BeforeClassOrAfterClassIsPublicStaticVoidNoArg"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="before.class.or.after.class.is.public.static.void.no.arg.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.junit.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.junit.BeforeClassOrAfterClassIsPublicStaticVoidNoArgInspection"/>
-    <localInspection language="JAVA" suppressId="BeforeOrAfterWithIncorrectSignature" shortName="BeforeOrAfterIsPublicVoidNoArg"
+    <localInspection groupPath="Java" language="JAVA" suppressId="BeforeOrAfterWithIncorrectSignature" shortName="BeforeOrAfterIsPublicVoidNoArg"
                      bundle="com.siyeh.InspectionGadgetsBundle" key="before.or.after.is.public.void.no.arg.display.name"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.junit.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.junit.BeforeOrAfterIsPublicVoidNoArgInspection"/>
-    <localInspection language="JAVA" shortName="ExpectedExceptionNeverThrown" bundle="com.siyeh.InspectionGadgetsBundle"
+    <localInspection groupPath="Java" language="JAVA" shortName="ExpectedExceptionNeverThrown" bundle="com.siyeh.InspectionGadgetsBundle"
                      key="expected.exception.never.thrown.display.name" groupBundle="messages.InspectionsBundle"
                      groupKey="group.names.junit.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.junit.ExpectedExceptionNeverThrownInspection"/>
-    <localInspection language="JAVA" shortName="ParameterizedParametersStaticCollection" displayName="@RunWith(Parameterized.class) without data provider"
+    <localInspection groupPath="Java" language="JAVA" shortName="ParameterizedParametersStaticCollection" displayName="@RunWith(Parameterized.class) without data provider"
                      groupBundle="messages.InspectionsBundle" groupKey="group.names.junit.issues" enabledByDefault="false" level="WARNING"
                      implementationClass="com.siyeh.ig.junit.Parameterized