diff --git a/.idea/libraries/asm4.xml b/.idea/libraries/asm4.xml
deleted file mode 100644
index 3ed48ba9daf5..000000000000
--- a/.idea/libraries/asm4.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/LICENSE.txt b/LICENSE.txt
index d64569567334..4c4a741bfd61 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -187,7 +187,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
- Copyright [yyyy] [name of copyright owner]
+ Copyright 2000-2016 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.
diff --git a/build/asm/.gitignore b/build/asm/.gitignore
new file mode 100644
index 000000000000..0c64996a6a2e
--- /dev/null
+++ b/build/asm/.gitignore
@@ -0,0 +1,2 @@
+src/
+out/
\ No newline at end of file
diff --git a/build/asm/1_version_check.patch b/build/asm/1_version_check.patch
new file mode 100644
index 000000000000..63ec6e0278f8
--- /dev/null
+++ b/build/asm/1_version_check.patch
@@ -0,0 +1,13 @@
+Index: org/objectweb/asm/ClassReader.java
+===================================================================
+--- org/objectweb/asm/ClassReader.java
++++ org/objectweb/asm/ClassReader.java
+@@ -167,7 +167,7 @@
+ this.b = b;
+ // checks the class version
+ if (readShort(off + 6) > Opcodes.V1_8) {
+- throw new IllegalArgumentException();
++ //[JB: accept any version] throw new IllegalArgumentException();
+ }
+ // parses the constant pool
+ items = new int[readUnsignedShort(off + 8)];
diff --git a/build/asm/2_coverage_fix.patch b/build/asm/2_coverage_fix.patch
new file mode 100644
index 000000000000..0aa5c7dbca45
--- /dev/null
+++ b/build/asm/2_coverage_fix.patch
@@ -0,0 +1,13 @@
+Index: org/objectweb/asm/tree/MethodNode.java
+===================================================================
+--- org/objectweb/asm/tree/MethodNode.java
++++ org/objectweb/asm/tree/MethodNode.java
+@@ -623,7 +623,7 @@
+ */
+ protected LabelNode getLabelNode(final Label l) {
+ if (!(l.info instanceof LabelNode)) {
+- l.info = new LabelNode();
++ l.info = new LabelNode(l); //[JB: passing a reference to avoid exceptions in coverage]
+ }
+ return (LabelNode) l.info;
+ }
diff --git a/build/asm/repackage.xml b/build/asm/repackage.xml
new file mode 100644
index 000000000000..75336cfbe16b
--- /dev/null
+++ b/build/asm/repackage.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build/conf/classVersions.txt b/build/conf/classVersions.txt
index aef87f308a55..c956aacaa72b 100644
--- a/build/conf/classVersions.txt
+++ b/build/conf/classVersions.txt
@@ -49,6 +49,12 @@
1.6 => plugins/gradle/lib/gradle-tooling-extension-api.jar
1.6 => plugins/gradle/lib/gradle-tooling-extension-impl.jar
+1.6 => plugins/maven/lib/maven-server-api.jar
+1.6 => plugins/maven/lib/maven2-server-impl.jar
+1.6 => plugins/maven/lib/maven3-server-common.jar
+1.6 => plugins/maven/lib/maven30-server-impl.jar
+1.6 => plugins/maven/lib/maven32-server-impl.jar
+
1.4 => plugins/xpath/lib/rt/xslt-rt.jar
1.5 => plugins/xslt-debugger/lib/xslt-debugger-engine.jar
1.5 => plugins/xslt-debugger/lib/rt/xslt-debugger-engine-impl.jar
diff --git a/build/conf/nsis/desktop.ini b/build/conf/nsis/desktop.ini
index 5a39b377d9ae..a35782f10af2 100644
--- a/build/conf/nsis/desktop.ini
+++ b/build/conf/nsis/desktop.ini
@@ -12,15 +12,15 @@ Text=Create Desktop shortcut
[Field 2]
Type=checkbox
Left=5
-Right=105
+Right=70
Top=25
Bottom=35
State=0
[Field 3]
Type=Label
-Left=115
-Right=215
+Left=75
+Right=140
Top=25
Bottom=35
Text=""
diff --git a/build/scripts/utils.gant b/build/scripts/utils.gant
index d838e9bc8e75..5697edf7f387 100644
--- a/build/scripts/utils.gant
+++ b/build/scripts/utils.gant
@@ -706,7 +706,7 @@ binding.setVariable("patchPropertiesFile", { String target, Map args = [:] ->
}
String product_uc = args.product_uc != null ? args.product_uc : p("component.names.product").toUpperCase()
- String settings_dir = args.system_selector.replaceFirst("\\d+", "")
+ String settings_dir = args.system_selector.replaceFirst("\\d+(\\.\\d+)?", "")
ant.replace(file: file) {
replacefilter(token: "@@product_uc@@", value: product_uc)
replacefilter(token: "@@settings_dir@@", value: settings_dir)
diff --git a/java/idea-ui/src/com/intellij/codeInsight/daemon/impl/AttachSourcesNotificationProvider.java b/java/idea-ui/src/com/intellij/codeInsight/daemon/impl/AttachSourcesNotificationProvider.java
index 23a85aa41e57..ebac72fdd5bb 100644
--- a/java/idea-ui/src/com/intellij/codeInsight/daemon/impl/AttachSourcesNotificationProvider.java
+++ b/java/idea-ui/src/com/intellij/codeInsight/daemon/impl/AttachSourcesNotificationProvider.java
@@ -35,7 +35,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectBundle;
import com.intellij.openapi.roots.*;
import com.intellij.openapi.roots.libraries.Library;
-import com.intellij.openapi.roots.ui.configuration.PathUIUtils;
+import com.intellij.openapi.roots.ui.configuration.LibrarySourceRootDetectorUtil;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.ui.popup.ListSeparator;
@@ -305,7 +305,7 @@ public class AttachSourcesNotificationProvider extends EditorNotifications.Provi
Library firstLibrary = libraries.get(0).getLibrary();
VirtualFile[] roots = firstLibrary != null ? firstLibrary.getFiles(OrderRootType.CLASSES) : VirtualFile.EMPTY_ARRAY;
VirtualFile[] candidates = FileChooser.chooseFiles(descriptor, myProject, roots.length == 0 ? null : PathUtil.getLocalFile(roots[0]));
- final VirtualFile[] files = PathUIUtils.scanAndSelectDetectedJavaSourceRoots(myParentComponent, candidates);
+ final VirtualFile[] files = LibrarySourceRootDetectorUtil.scanAndSelectDetectedJavaSourceRoots(myParentComponent, candidates);
if (files.length == 0) {
return ActionCallback.REJECTED;
}
diff --git a/java/idea-ui/src/com/intellij/jarFinder/InternetAttachSourceProvider.java b/java/idea-ui/src/com/intellij/jarFinder/InternetAttachSourceProvider.java
index 8ee9e96245c0..f17b29a4d0b0 100644
--- a/java/idea-ui/src/com/intellij/jarFinder/InternetAttachSourceProvider.java
+++ b/java/idea-ui/src/com/intellij/jarFinder/InternetAttachSourceProvider.java
@@ -26,7 +26,7 @@ import com.intellij.openapi.progress.Task;
import com.intellij.openapi.roots.LibraryOrderEntry;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.libraries.Library;
-import com.intellij.openapi.roots.ui.configuration.PathUIUtils;
+import com.intellij.openapi.roots.ui.configuration.LibrarySourceRootDetectorUtil;
import com.intellij.openapi.util.ActionCallback;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.JarFileSystem;
@@ -215,7 +215,7 @@ public class InternetAttachSourceProvider implements AttachSourcesProvider {
VirtualFile jarRoot = JarFileSystem.getInstance().getJarRootForLocalFile(srcFile);
if (jarRoot == null) return;
- VirtualFile[] roots = PathUIUtils.scanAndSelectDetectedJavaSourceRoots(null, new VirtualFile[]{jarRoot});
+ VirtualFile[] roots = LibrarySourceRootDetectorUtil.scanAndSelectDetectedJavaSourceRoots(null, new VirtualFile[]{jarRoot});
if (roots.length == 0) {
roots = new VirtualFile[]{jarRoot};
}
diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/LanguageLevelCombo.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/LanguageLevelCombo.java
index b3e8c77cf98c..ab412d7726b1 100644
--- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/LanguageLevelCombo.java
+++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/LanguageLevelCombo.java
@@ -34,7 +34,7 @@ import javax.swing.*;
*/
@SuppressWarnings("unchecked")
public abstract class LanguageLevelCombo extends ComboBox {
-
+ private boolean myDefaultWasSelectedBeforeRemoving;
private final String myDefaultItem;
public LanguageLevelCombo(String defaultItem) {
@@ -91,18 +91,28 @@ public abstract class LanguageLevelCombo extends ComboBox {
private void updateDefaultLevel(LanguageLevel newLevel, boolean isDefaultProject) {
if (newLevel == null && !isDefaultProject) {
- if (getSelectedItem() == myDefaultItem) {
- setSelectedItem(getDefaultLevel());
+ if (isDefaultItemAdded()) {
+ boolean defaultSelected = getSelectedItem() == myDefaultItem;
+ if (defaultSelected) {
+ setSelectedItem(getDefaultLevel());
+ }
+ myDefaultWasSelectedBeforeRemoving = defaultSelected;
+ removeItem(myDefaultItem);
}
- removeItem(myDefaultItem);
}
- else if (!(getItemAt(0) instanceof String)) {
+ else if (!(isDefaultItemAdded())) {
addDefaultItem();
- setSelectedIndex(0);
+ if (myDefaultWasSelectedBeforeRemoving) {
+ setSelectedIndex(0);
+ }
}
repaint();
}
+ private boolean isDefaultItemAdded() {
+ return getItemAt(0) instanceof String;
+ }
+
void addDefaultItem() {
insertItemAt(myDefaultItem, 0);
}
diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JavaSourceRootDetector.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/LibraryJavaSourceRootDetector.java
similarity index 92%
rename from java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JavaSourceRootDetector.java
rename to java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/LibraryJavaSourceRootDetector.java
index 3b02e0cd0fb7..f96d8e0667ad 100644
--- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JavaSourceRootDetector.java
+++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/LibraryJavaSourceRootDetector.java
@@ -23,8 +23,8 @@ import org.jetbrains.annotations.NotNull;
import java.util.Collection;
-public class JavaSourceRootDetector extends RootDetector {
- public JavaSourceRootDetector() {
+public class LibraryJavaSourceRootDetector extends RootDetector {
+ public LibraryJavaSourceRootDetector() {
super(OrderRootType.SOURCES, false, "sources");
}
diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/LibrarySourceRootDetectorUtil.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/LibrarySourceRootDetectorUtil.java
new file mode 100644
index 000000000000..e7b9dc016648
--- /dev/null
+++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/LibrarySourceRootDetectorUtil.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2000-2009 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.openapi.roots.ui.configuration;
+
+import com.intellij.openapi.extensions.ExtensionPointName;
+import com.intellij.openapi.extensions.Extensions;
+import com.intellij.openapi.roots.OrderRootType;
+import com.intellij.openapi.roots.libraries.ui.OrderRoot;
+import com.intellij.openapi.roots.libraries.ui.RootDetector;
+import com.intellij.openapi.roots.libraries.ui.impl.LibraryRootsDetectorImpl;
+import com.intellij.openapi.roots.libraries.ui.impl.RootDetectionUtil;
+import com.intellij.openapi.vfs.VfsUtil;
+import com.intellij.openapi.vfs.VirtualFile;
+
+import java.awt.*;
+import java.util.*;
+import java.util.List;
+
+/**
+ * This utility class contains utility methods for selecting paths.
+ *
+ * @author Constantine.Plotnikov
+ */
+public class LibrarySourceRootDetectorUtil {
+ public static ExtensionPointName JAVA_SOURCE_ROOT_DETECTOR = ExtensionPointName.create("com.intellij.library.javaSourceRootDetector");
+
+ protected LibrarySourceRootDetectorUtil() {
+ }
+
+ /**
+ * This method takes a candidates for the project root, then scans the candidates and
+ * if multiple candidates or non root source directories are found within some
+ * directories, it shows a dialog that allows selecting or deselecting them.
+ * @param parent a parent parent or project
+ * @param rootCandidates a candidates for roots
+ * @return a array of source folders or empty array if non was selected or dialog was canceled.
+ */
+ public static VirtualFile[] scanAndSelectDetectedJavaSourceRoots(Component parentComponent, final VirtualFile[] rootCandidates) {
+ final List orderRoots = RootDetectionUtil.detectRoots(Arrays.asList(rootCandidates), parentComponent, null,
+ new LibraryRootsDetectorImpl(Arrays.asList(Extensions.getExtensions(JAVA_SOURCE_ROOT_DETECTOR))),
+ new OrderRootType[] {OrderRootType.SOURCES});
+ final List result = new ArrayList();
+ for (OrderRoot root : orderRoots) {
+ result.add(root.getFile());
+ }
+ return VfsUtil.toVirtualFileArray(result);
+ }
+}
diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/PathUIUtils.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/PathUIUtils.java
index 3bcb1c45792c..27d947963e5b 100644
--- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/PathUIUtils.java
+++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/PathUIUtils.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2016 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.
@@ -15,46 +15,12 @@
*/
package com.intellij.openapi.roots.ui.configuration;
-import com.intellij.openapi.extensions.Extensions;
-import com.intellij.openapi.roots.OrderRootType;
-import com.intellij.openapi.roots.libraries.ui.OrderRoot;
import com.intellij.openapi.roots.libraries.ui.RootDetector;
-import com.intellij.openapi.roots.libraries.ui.impl.LibraryRootsDetectorImpl;
-import com.intellij.openapi.roots.libraries.ui.impl.RootDetectionUtil;
-import com.intellij.openapi.vfs.VfsUtil;
-import com.intellij.openapi.vfs.VirtualFile;
-
-import java.awt.*;
-import java.util.*;
-import java.util.List;
/**
- * This utility class contains utility methods for selecting paths.
- *
- * @author Constantine.Plotnikov
+ * @deprecated please use {@link LibrarySourceRootDetectorUtil} directly
*/
-public class PathUIUtils {
- public static final RootDetector JAVA_SOURCE_ROOT_DETECTOR = new JavaSourceRootDetector();
+public class PathUIUtils extends LibrarySourceRootDetectorUtil {
+ public static final RootDetector JAVA_SOURCE_ROOT_DETECTOR = new LibraryJavaSourceRootDetector();
- private PathUIUtils() {
- }
-
- /**
- * This method takes a candidates for the project root, then scans the candidates and
- * if multiple candidates or non root source directories are found within some
- * directories, it shows a dialog that allows selecting or deselecting them.
- * @param parent a parent parent or project
- * @param rootCandidates a candidates for roots
- * @return a array of source folders or empty array if non was selected or dialog was canceled.
- */
- public static VirtualFile[] scanAndSelectDetectedJavaSourceRoots(Component parentComponent, final VirtualFile[] rootCandidates) {
- final List orderRoots = RootDetectionUtil.detectRoots(Arrays.asList(rootCandidates), parentComponent, null,
- new LibraryRootsDetectorImpl(Arrays.asList(Extensions.getExtensions(RootDetector.JAVA_SOURCE_ROOT_DETECTOR))),
- new OrderRootType[] {OrderRootType.SOURCES});
- final List result = new ArrayList();
- for (OrderRoot root : orderRoots) {
- result.add(root.getFile());
- }
- return VfsUtil.toVirtualFileArray(result);
- }
}
diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/DefaultLibraryRootsComponentDescriptor.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/DefaultLibraryRootsComponentDescriptor.java
index 3d7f31772362..a574f956e0ba 100644
--- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/DefaultLibraryRootsComponentDescriptor.java
+++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/DefaultLibraryRootsComponentDescriptor.java
@@ -30,6 +30,7 @@ import com.intellij.openapi.roots.NativeLibraryOrderRootType;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.libraries.ui.*;
import com.intellij.openapi.roots.ui.OrderRootTypeUIFactory;
+import com.intellij.openapi.roots.ui.configuration.LibrarySourceRootDetectorUtil;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
@@ -73,7 +74,7 @@ public class DefaultLibraryRootsComponentDescriptor extends LibraryRootsComponen
List results = new ArrayList<>();
results.add(new FileTypeBasedRootFilter(OrderRootType.CLASSES, false, StdFileTypes.CLASS, "classes"));
results.add(new FileTypeBasedRootFilter(OrderRootType.CLASSES, true, StdFileTypes.CLASS, "jar directory"));
- results.addAll(Arrays.asList(Extensions.getExtensions(RootDetector.JAVA_SOURCE_ROOT_DETECTOR)));
+ results.addAll(Arrays.asList(Extensions.getExtensions(LibrarySourceRootDetectorUtil.JAVA_SOURCE_ROOT_DETECTOR)));
Collections.addAll(results,
new FileTypeBasedRootFilter(OrderRootType.SOURCES, true, StdFileTypes.JAVA, "source archive directory"),
new JavadocRootDetector(),
diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/SourcesOrderRootTypeUIFactory.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/SourcesOrderRootTypeUIFactory.java
index 7bd294d5c4b3..8ed9e5c1efac 100644
--- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/SourcesOrderRootTypeUIFactory.java
+++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/SourcesOrderRootTypeUIFactory.java
@@ -23,7 +23,7 @@ import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.ui.SdkPathEditor;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.ui.OrderRootTypeUIFactory;
-import com.intellij.openapi.roots.ui.configuration.PathUIUtils;
+import com.intellij.openapi.roots.ui.configuration.LibrarySourceRootDetectorUtil;
import com.intellij.openapi.vfs.VirtualFile;
import javax.swing.*;
@@ -61,7 +61,7 @@ public class SourcesOrderRootTypeUIFactory implements OrderRootTypeUIFactory {
@Override
protected VirtualFile[] adjustAddedFileSet(final Component component, final VirtualFile[] files) {
if (mySdk.getSdkType() instanceof JavaSdkType) {
- return PathUIUtils.scanAndSelectDetectedJavaSourceRoots(component, files);
+ return LibrarySourceRootDetectorUtil.scanAndSelectDetectedJavaSourceRoots(component, files);
}
return super.adjustAddedFileSet(component, files);
}
diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefClassImpl.java b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefClassImpl.java
index 13a18f075aa4..f8377eab6831 100644
--- a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefClassImpl.java
+++ b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefClassImpl.java
@@ -244,6 +244,16 @@ public class RefClassImpl extends RefJavaElementImpl implements RefClass {
myDefaultConstructor = defaultConstructor;
}
+ @NotNull
+ @Override
+ public String getQualifiedName() {
+ final PsiClass psiClass = getElement();
+ if (psiClass == null) return super.getQualifiedName();
+ final String qName = psiClass.getQualifiedName();
+ if (qName == null) return super.getQualifiedName();
+ return qName;
+ }
+
@Override
public void buildReferences() {
PsiClass psiClass = getElement();
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/JavaLineMarkerProvider.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/JavaLineMarkerProvider.java
index 8c7ae863eb89..bb9aab62c8b4 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/JavaLineMarkerProvider.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/JavaLineMarkerProvider.java
@@ -53,9 +53,13 @@ import java.util.Map;
import java.util.Set;
public class JavaLineMarkerProvider extends LineMarkerProviderDescriptor {
- private final DaemonCodeAnalyzerSettings myDaemonSettings;
- private final EditorColorsManager myColorsManager;
+ protected final DaemonCodeAnalyzerSettings myDaemonSettings;
+ protected final EditorColorsManager myColorsManager;
private final Option myLambdaOption = new Option("java.lambda", "Lambda", AllIcons.Gutter.ImplementingFunctionalInterface);
+ private final Option myOverriddenOption = new Option("java.overridden", "Overridden method", AllIcons.Gutter.OverridenMethod);
+ private final Option myImplementedOption = new Option("java.implemented", "Implemented method", AllIcons.Gutter.ImplementedMethod);
+ private final Option myOverridingOption = new Option("java.overriding", "Overriding method", AllIcons.Gutter.OverridingMethod);
+ private final Option myImplementingOption = new Option("java.implementing", "Implementing method", AllIcons.Gutter.ImplementingMethod);
public JavaLineMarkerProvider(DaemonCodeAnalyzerSettings daemonSettings, EditorColorsManager colorsManager) {
myDaemonSettings = daemonSettings;
@@ -67,20 +71,29 @@ public class JavaLineMarkerProvider extends LineMarkerProviderDescriptor {
public LineMarkerInfo getLineMarkerInfo(@NotNull final PsiElement element) {
PsiElement parent;
if (element instanceof PsiIdentifier && (parent = element.getParent()) instanceof PsiMethod) {
+ if (!myOverridingOption.isEnabled() && !myImplementingOption.isEnabled()) return null;
PsiMethod method = (PsiMethod)parent;
MethodSignatureBackedByPsiMethod superSignature = SuperMethodsSearch.search(method, null, true, false).findFirst();
if (superSignature != null) {
boolean overrides =
method.hasModifierProperty(PsiModifier.ABSTRACT) == superSignature.getMethod().hasModifierProperty(PsiModifier.ABSTRACT);
- final Icon icon = overrides ? AllIcons.Gutter.OverridingMethod : AllIcons.Gutter.ImplementingMethod;
+ final Icon icon;
+ if (overrides) {
+ if (!myOverridingOption.isEnabled()) return null;
+ icon = AllIcons.Gutter.OverridingMethod;
+ }
+ else {
+ if (!myImplementingOption.isEnabled()) return null;
+ icon = AllIcons.Gutter.ImplementingMethod;
+ }
return createSuperMethodLineMarkerInfo(element, icon, Pass.UPDATE_ALL);
}
}
final PsiMethod interfaceMethod = LambdaUtil.getFunctionalInterfaceMethod(element);
final PsiElement firstChild = element.getFirstChild();
- if (interfaceMethod != null && firstChild != null && LineMarkerSettings.getSettings().isEnabled(myLambdaOption)) {
+ if (interfaceMethod != null && firstChild != null && myLambdaOption.isEnabled()) {
return createSuperMethodLineMarkerInfo(firstChild, AllIcons.Gutter.ImplementingFunctionalInterface, Pass.UPDATE_ALL);
}
@@ -216,7 +229,7 @@ public class JavaLineMarkerProvider extends LineMarkerProviderDescriptor {
return range;
}
- public static void collectInheritingClasses(@NotNull PsiClass aClass,
+ protected void collectInheritingClasses(@NotNull PsiClass aClass,
@NotNull Collection result,
@NotNull Map subClassCache) {
if (aClass.hasModifierProperty(PsiModifier.FINAL)) {
@@ -226,7 +239,15 @@ public class JavaLineMarkerProvider extends LineMarkerProviderDescriptor {
PsiClass subClass = subClassCache.get(aClass);
if (subClass != null || FunctionalExpressionSearch.search(aClass).findFirst() != null) {
- final Icon icon = aClass.isInterface() ? AllIcons.Gutter.ImplementedMethod : AllIcons.Gutter.OverridenMethod;
+ final Icon icon;
+ if (aClass.isInterface()) {
+ if (!myImplementedOption.isEnabled()) return;
+ icon = AllIcons.Gutter.ImplementedMethod;
+ }
+ else {
+ if (!myOverriddenOption.isEnabled()) return;
+ icon = AllIcons.Gutter.OverridenMethod;
+ }
PsiElement range = aClass.getNameIdentifier();
if (range == null) {
range = aClass;
@@ -241,7 +262,8 @@ public class JavaLineMarkerProvider extends LineMarkerProviderDescriptor {
}
}
- private static void collectOverridingMethods(@NotNull final Collection methods, @NotNull Collection result) {
+ private void collectOverridingMethods(@NotNull final Collection methods, @NotNull Collection result) {
+ if (!myOverriddenOption.isEnabled() && !myImplementedOption.isEnabled()) return;
final Set overridden = new HashSet();
Set classes = new THashSet();
for (PsiMethod method : methods) {
@@ -281,7 +303,12 @@ public class JavaLineMarkerProvider extends LineMarkerProviderDescriptor {
for (PsiMethod method : overridden) {
ProgressManager.checkCanceled();
boolean overrides = !method.hasModifierProperty(PsiModifier.ABSTRACT);
-
+ if (overrides) {
+ if (!myOverriddenOption.isEnabled()) return;
+ }
+ else {
+ if (!myImplementedOption.isEnabled()) return;
+ }
PsiElement range = getMethodRange(method);
final MarkerType type = MarkerType.OVERRIDDEN_METHOD;
final Icon icon = overrides ? AllIcons.Gutter.OverridenMethod : AllIcons.Gutter.ImplementedMethod;
@@ -301,7 +328,7 @@ public class JavaLineMarkerProvider extends LineMarkerProviderDescriptor {
@Override
public Option[] getOptions() {
- return new Option[] {myLambdaOption};
+ return new Option[] {myLambdaOption, myOverriddenOption, myImplementedOption, myOverridingOption, myImplementingOption};
}
private static class ArrowUpLineMarkerInfo extends MergeableLineMarkerInfo {
diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/SurroundAutoCloseableAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/SurroundAutoCloseableAction.java
index 6ede7a3b710d..542119679ec6 100644
--- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/SurroundAutoCloseableAction.java
+++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/SurroundAutoCloseableAction.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2015 JetBrains s.r.o.
+ * Copyright 2000-2016 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.
@@ -16,8 +16,12 @@
package com.intellij.codeInsight.intention.impl;
import com.intellij.codeInsight.CodeInsightBundle;
+import com.intellij.codeInsight.CodeInsightUtilCore;
import com.intellij.codeInsight.FileModificationService;
import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
+import com.intellij.codeInsight.lookup.LookupElement;
+import com.intellij.codeInsight.lookup.LookupElementBuilder;
+import com.intellij.codeInsight.template.*;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
@@ -29,12 +33,16 @@ import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
+import com.intellij.refactoring.introduceVariable.IntroduceVariableBase;
+import com.intellij.refactoring.ui.TypeSelectorManagerImpl;
+import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
-import com.intellij.util.Processor;
+import com.intellij.util.ObjectUtils;
import com.intellij.util.SmartList;
import org.jetbrains.annotations.NotNull;
import java.util.List;
+import java.util.stream.Stream;
public class SurroundAutoCloseableAction extends PsiElementBaseIntentionAction {
@Override
@@ -42,16 +50,20 @@ public class SurroundAutoCloseableAction extends PsiElementBaseIntentionAction {
if (!element.getLanguage().isKindOf(JavaLanguage.INSTANCE)) return false;
if (!PsiUtil.getLanguageLevel(element).isAtLeast(LanguageLevel.JDK_1_7)) return false;
- final PsiLocalVariable variable = PsiTreeUtil.getParentOfType(element, PsiLocalVariable.class);
- if (variable == null) return false;
- final PsiExpression initializer = variable.getInitializer();
- if (initializer == null) return false;
- final PsiElement declaration = variable.getParent();
- if (!(declaration instanceof PsiDeclarationStatement)) return false;
- final PsiElement codeBlock = declaration.getParent();
- if (!(codeBlock instanceof PsiCodeBlock)) return false;
+ PsiType type = null;
- return InheritanceUtil.isInheritor(variable.getType(), CommonClassNames.JAVA_LANG_AUTO_CLOSEABLE);
+ PsiLocalVariable variable = findVariable(element);
+ if (variable != null) {
+ type = variable.getType();
+ }
+ else {
+ PsiExpression expression = findExpression(element);
+ if (expression != null) {
+ type = expression.getType();
+ }
+ }
+
+ return type != null && InheritanceUtil.isInheritor(type, CommonClassNames.JAVA_LANG_AUTO_CLOSEABLE);
}
@Override
@@ -60,35 +72,85 @@ public class SurroundAutoCloseableAction extends PsiElementBaseIntentionAction {
return;
}
- final PsiLocalVariable variable = PsiTreeUtil.getParentOfType(element, PsiLocalVariable.class);
- if (variable == null) return;
- final PsiExpression initializer = variable.getInitializer();
- if (initializer == null) return;
- final PsiElement declaration = variable.getParent();
- if (!(declaration instanceof PsiDeclarationStatement)) return;
- final PsiElement codeBlock = declaration.getParent();
- if (!(codeBlock instanceof PsiCodeBlock)) return;
+ PsiLocalVariable variable = findVariable(element);
+ if (variable != null) {
+ processVariable(project, editor, variable);
+ }
+ else {
+ PsiExpression expression = findExpression(element);
+ if (expression != null) {
+ processExpression(project, editor, expression);
+ }
+ }
+ }
- final LocalSearchScope scope = new LocalSearchScope(codeBlock);
+ private static PsiLocalVariable findVariable(PsiElement element) {
+ PsiLocalVariable variable = PsiTreeUtil.getParentOfType(element, PsiLocalVariable.class);
+
+ if (variable != null &&
+ variable.getInitializer() != null &&
+ variable.getParent() instanceof PsiDeclarationStatement &&
+ variable.getParent().getParent() instanceof PsiCodeBlock) {
+ return variable;
+ }
+
+ if (variable == null && element instanceof PsiWhiteSpace) {
+ PsiElement sibling = element.getPrevSibling();
+ if (sibling instanceof PsiDeclarationStatement) {
+ PsiElement lastVar = ArrayUtil.getLastElement(((PsiDeclarationStatement)sibling).getDeclaredElements());
+ if (lastVar instanceof PsiLocalVariable) {
+ return (PsiLocalVariable)lastVar;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ private static PsiExpression findExpression(PsiElement element) {
+ PsiExpression expression = PsiTreeUtil.getParentOfType(element, PsiExpression.class);
+
+ if (expression != null &&
+ expression.getParent() instanceof PsiExpressionStatement &&
+ expression.getParent().getParent() instanceof PsiCodeBlock) {
+ return expression;
+ }
+
+ if (expression == null && element instanceof PsiWhiteSpace) {
+ PsiElement sibling = element.getPrevSibling();
+ if (sibling instanceof PsiExpressionStatement) {
+ return ((PsiExpressionStatement)sibling).getExpression();
+ }
+ }
+
+ return null;
+ }
+
+ private static void processVariable(Project project, Editor editor, PsiLocalVariable variable) {
+ PsiExpression initializer = ObjectUtils.assertNotNull(variable.getInitializer());
+ PsiElement declaration = variable.getParent();
+ PsiElement codeBlock = declaration.getParent();
+
+ LocalSearchScope scope = new LocalSearchScope(codeBlock);
PsiElement last = null;
for (PsiReference reference : ReferencesSearch.search(variable, scope).findAll()) {
- final PsiElement usage = PsiTreeUtil.findPrevParent(codeBlock, reference.getElement());
+ PsiElement usage = PsiTreeUtil.findPrevParent(codeBlock, reference.getElement());
if ((last == null || usage.getTextOffset() > last.getTextOffset())) {
last = usage;
}
}
- final String text = "try (" + variable.getTypeElement().getText() + " " + variable.getName() + " = " + initializer.getText() + ") {}";
- final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project);
- final PsiTryStatement armStatement = (PsiTryStatement)declaration.replace(factory.createStatementFromText(text, codeBlock));
+ String text = "try (" + variable.getTypeElement().getText() + " " + variable.getName() + " = " + initializer.getText() + ") {}";
+ PsiElementFactory factory = JavaPsiFacade.getElementFactory(project);
+ PsiTryStatement armStatement = (PsiTryStatement)declaration.replace(factory.createStatementFromText(text, codeBlock));
List toFormat = null;
if (last != null) {
toFormat = moveStatements(last, armStatement);
}
- final CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(project);
- final PsiElement formattedElement = codeStyleManager.reformat(armStatement);
+ CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(project);
+ PsiElement formattedElement = codeStyleManager.reformat(armStatement);
if (toFormat != null) {
for (PsiElement psiElement : toFormat) {
codeStyleManager.reformat(psiElement);
@@ -96,9 +158,9 @@ public class SurroundAutoCloseableAction extends PsiElementBaseIntentionAction {
}
if (last == null) {
- final PsiCodeBlock tryBlock = ((PsiTryStatement)formattedElement).getTryBlock();
+ PsiCodeBlock tryBlock = ((PsiTryStatement)formattedElement).getTryBlock();
if (tryBlock != null) {
- final PsiJavaToken brace = tryBlock.getLBrace();
+ PsiJavaToken brace = tryBlock.getLBrace();
if (brace != null) {
editor.getCaretModel().moveToOffset(brace.getTextOffset() + 1);
}
@@ -110,8 +172,9 @@ public class SurroundAutoCloseableAction extends PsiElementBaseIntentionAction {
PsiCodeBlock tryBlock = statement.getTryBlock();
assert tryBlock != null : statement.getText();
PsiElement parent = statement.getParent();
+ LocalSearchScope scope = new LocalSearchScope(parent);
- List toFormat = new SmartList();
+ List toFormat = new SmartList<>();
PsiElement stopAt = last.getNextSibling();
PsiElement i = statement.getNextSibling();
@@ -125,13 +188,8 @@ public class SurroundAutoCloseableAction extends PsiElementBaseIntentionAction {
for (PsiElement declared : ((PsiDeclarationStatement)child).getDeclaredElements()) {
if (!(declared instanceof PsiLocalVariable)) continue;
- final int endOffset = last.getTextRange().getEndOffset();
- boolean contained = ReferencesSearch.search(declared, new LocalSearchScope(parent)).forEach(new Processor() {
- @Override
- public boolean process(PsiReference ref) {
- return ref.getElement().getTextOffset() <= endOffset;
- }
- });
+ int endOffset = last.getTextRange().getEndOffset();
+ boolean contained = ReferencesSearch.search(declared, scope).forEach(ref -> ref.getElement().getTextOffset() <= endOffset);
if (!contained) {
PsiLocalVariable var = (PsiLocalVariable)declared;
@@ -163,6 +221,38 @@ public class SurroundAutoCloseableAction extends PsiElementBaseIntentionAction {
return toFormat;
}
+ private static void processExpression(Project project, Editor editor, PsiExpression expression) {
+ PsiType type = ObjectUtils.assertNotNull(expression.getType());
+ PsiElement statement = expression.getParent();
+ PsiElement codeBlock = statement.getParent();
+
+ String text = "try (" + type.getCanonicalText(true) + " r = " + expression.getText() + ") {}";
+ PsiElementFactory factory = JavaPsiFacade.getElementFactory(project);
+ PsiTryStatement tryStatement = (PsiTryStatement)statement.replace(factory.createStatementFromText(text, codeBlock));
+
+ tryStatement = (PsiTryStatement)CodeStyleManager.getInstance(project).reformat(tryStatement);
+
+ tryStatement = CodeInsightUtilCore.forcePsiPostprocessAndRestoreElement(tryStatement);
+
+ PsiResourceList resourceList = tryStatement.getResourceList();
+ if (resourceList != null) {
+ PsiResourceVariable var = (PsiResourceVariable)resourceList.iterator().next();
+ PsiIdentifier id = var.getNameIdentifier();
+ PsiExpression initializer = var.getInitializer();
+ if (id != null && initializer != null) {
+ type = initializer.getType();
+ String[] names = IntroduceVariableBase.getSuggestedName(type, initializer).names;
+ PsiType[] types = Stream.of(new TypeSelectorManagerImpl(project, type, initializer, PsiExpression.EMPTY_ARRAY).getTypesForAll())
+ .filter(t -> InheritanceUtil.isInheritor(t, CommonClassNames.JAVA_LANG_AUTO_CLOSEABLE))
+ .toArray(PsiType[]::new);
+ TemplateBuilder builder = TemplateBuilderFactory.getInstance().createTemplateBuilder(var);
+ builder.replaceElement(id, new NamesExpression(names));
+ builder.replaceElement(var.getTypeElement(), new TypeExpression(project, types));
+ builder.run(editor, true);
+ }
+ }
+ }
+
@NotNull
@Override
public String getFamilyName() {
@@ -174,4 +264,27 @@ public class SurroundAutoCloseableAction extends PsiElementBaseIntentionAction {
public String getText() {
return getFamilyName();
}
-}
+
+ private static class NamesExpression extends Expression {
+ private final String[] myNames;
+
+ public NamesExpression(String[] names) {
+ myNames = names;
+ }
+
+ @Override
+ public Result calculateResult(ExpressionContext context) {
+ return calculateQuickResult(context);
+ }
+
+ @Override
+ public Result calculateQuickResult(ExpressionContext context) {
+ return new TextResult(myNames[0]);
+ }
+
+ @Override
+ public LookupElement[] calculateLookupItems(ExpressionContext context) {
+ return Stream.of(myNames).map(LookupElementBuilder::create).toArray(LookupElement[]::new);
+ }
+ }
+}
\ No newline at end of file
diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java
index 570d4d57f563..0368e04bfa49 100644
--- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java
+++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java
@@ -1728,6 +1728,22 @@ public class ExtractMethodProcessor implements MatchProvider {
myExtractedMethod = suggester.getExtractedMethod();
myMethodCall = suggester.getMethodCall();
myVariableDatum = suggester.getVariableData();
+
+ final List outputVariables = new ArrayList<>();
+ for (PsiReturnStatement statement : PsiUtil.findReturnStatements(myExtractedMethod)) {
+ final PsiExpression returnValue = statement.getReturnValue();
+ if (returnValue instanceof PsiReferenceExpression) {
+ final PsiElement resolve = ((PsiReferenceExpression)returnValue).resolve();
+ if (resolve instanceof PsiLocalVariable) {
+ outputVariables.add((PsiVariable)resolve);
+ }
+ }
+ }
+
+ if (outputVariables.size() == 1) {
+ myOutputVariable = outputVariables.get(0);
+ }
+
return null;
}
}
diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodSignatureSuggester.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodSignatureSuggester.java
index ceac680e7c47..0748b6f83351 100644
--- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodSignatureSuggester.java
+++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodSignatureSuggester.java
@@ -334,6 +334,12 @@ public class ExtractMethodSignatureSuggester {
for (PsiParameter parameter : parameters) {
uniqueNameGenerator.addExistingName(parameter.getName());
}
+
+ SyntaxTraverser.psiTraverser().withRoot(myExtractedMethod.getBody())
+ .filter(element -> element instanceof PsiVariable)
+ .forEach(element -> uniqueNameGenerator.addExistingName(((PsiVariable)element).getName()));
+
+
final THashMap unique = new THashMap(ourEquivalenceStrategy);
final Map replacement = new HashMap();
for (PsiExpression expr : exprs) {
diff --git a/java/java-impl/src/com/intellij/refactoring/safeDelete/JavaSafeDeleteProcessor.java b/java/java-impl/src/com/intellij/refactoring/safeDelete/JavaSafeDeleteProcessor.java
index b7bd9384442a..1dcf6ba48d2d 100644
--- a/java/java-impl/src/com/intellij/refactoring/safeDelete/JavaSafeDeleteProcessor.java
+++ b/java/java-impl/src/com/intellij/refactoring/safeDelete/JavaSafeDeleteProcessor.java
@@ -256,6 +256,27 @@ public class JavaSafeDeleteProcessor extends SafeDeleteProcessorDelegateBase {
return null;
}
+ @Override
+ public Collection findConflicts(PsiElement element, PsiElement[] elements, UsageInfo[] usages) {
+ String methodRefFound = null;
+ if (!ApplicationManager.getApplication().isUnitTestMode() && (element instanceof PsiMethod || element instanceof PsiParameter)) {
+ for (UsageInfo usage : usages) {
+ final PsiElement refElement = usage.getElement();
+ if (refElement instanceof PsiMethodReferenceExpression) {
+ methodRefFound = RefactoringBundle.message("expand.method.reference.warning");
+ break;
+ }
+ }
+ }
+ if (methodRefFound != null) {
+ Collection result = new ArrayList<>();
+ result.add(methodRefFound);
+ result.addAll(super.findConflicts(element, elements, usages));
+ return result;
+ }
+ return super.findConflicts(element, elements, usages);
+ }
+
public Collection findConflicts(@NotNull final PsiElement element, @NotNull final PsiElement[] allElementsToDelete) {
if (element instanceof PsiMethod) {
final PsiClass containingClass = ((PsiMethod)element).getContainingClass();
diff --git a/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java b/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java
index e6b846f33644..3aa98a200e69 100644
--- a/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java
+++ b/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java
@@ -17,6 +17,8 @@ package com.intellij.psi;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Computable;
+import com.intellij.openapi.util.RecursionGuard;
+import com.intellij.openapi.util.RecursionManager;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.infos.MethodCandidateInfo;
@@ -35,6 +37,7 @@ import java.util.*;
* Date: 7/17/12
*/
public class LambdaUtil {
+ public static final RecursionGuard ourParameterGuard = RecursionManager.createGuard("lambdaParameterGuard");
public static ThreadLocal
*
* @param roots VCS roots which should be listened to.
* @param refresher The refresher which should be notified about the need of refresh.
- * @return Disposable that unsubscribes from events on dispose.
+ * @return Disposable that unsubscribes from events on dispose.
*/
@NotNull
Disposable subscribeToRootRefreshEvents(@NotNull Collection roots, @NotNull VcsLogRefresher refresher);
@@ -102,9 +102,10 @@ public interface VcsLogProvider {
/**
* In order to tune log for it's VCS, provider may set value to one of the properties specified in {@link com.intellij.vcs.log.VcsLogProperties}.
+ *
* @param property Property instance to return value for.
* @param Type of property value.
- * @return Property value or null if unset.
+ * @return Property value or null if unset.
*/
@Nullable
T getPropertyValue(VcsLogProperties.VcsLogProperty property);
@@ -125,23 +126,27 @@ public interface VcsLogProvider {
* (of course it may return less commits if the repository is small)
*/
int getCommitCount();
-
}
/**
* Container for references and users.
*/
interface LogData {
- @NotNull Set getRefs();
- @NotNull Set getUsers();
+ @NotNull
+ Set getRefs();
+
+ @NotNull
+ Set getUsers();
}
/**
* Container for the ordered list of commits together with their details, and references.
*/
interface DetailedLogData {
- @NotNull List getCommits();
- @NotNull Set getRefs();
- }
+ @NotNull
+ List getCommits();
+ @NotNull
+ Set getRefs();
+ }
}
diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogProviderRequirementsEx.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogProviderRequirementsEx.java
index 68623a6852f9..ba72e9f14095 100644
--- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogProviderRequirementsEx.java
+++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogProviderRequirementsEx.java
@@ -39,5 +39,4 @@ public interface VcsLogProviderRequirementsEx extends Requirements {
*/
@NotNull
Set getPreviousRefs();
-
}
diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogRefManager.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogRefManager.java
index affe800ceff9..d2f507322897 100644
--- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogRefManager.java
+++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogRefManager.java
@@ -59,5 +59,4 @@ public interface VcsLogRefManager {
*/
@NotNull
List group(Collection refs);
-
}
diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogSettings.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogSettings.java
index 05849361a4a7..c8f892cf12ed 100644
--- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogSettings.java
+++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogSettings.java
@@ -18,7 +18,7 @@ package com.intellij.vcs.log;
/**
* TODO remove in IDEA 17
- *
+ *
*
Vcs Log user settings, which may have a UI representation, or be implicitly selected based on user actions.
*
Most of the settings are workspace-specific, i. e. they are stored in {@link com.intellij.openapi.components.StoragePathMacros#WORKSPACE_FILE workspace.xml}.
Returns files which are affected by matching commits, and folders containing such files.
- *
+ *
*
That is: the commit A (made in the given VCS root) modifying file f.txt matches this filter,
- * if this method returns a set which includes a folder containing f.txt, or the file f.txt itself.
+ * if this method returns a set which includes a folder containing f.txt, or the file f.txt itself.
*/
@NotNull
Collection getFiles();
diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogTextFilter.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogTextFilter.java
index 2ae3ac389bf8..e6270b973869 100644
--- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogTextFilter.java
+++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogTextFilter.java
@@ -27,5 +27,4 @@ public interface VcsLogTextFilter extends VcsLogDetailsFilter {
*/
@NotNull
String getText();
-
}
diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogUserFilter.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogUserFilter.java
index 449b08708769..e0cb3a586d40 100644
--- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogUserFilter.java
+++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogUserFilter.java
@@ -12,6 +12,7 @@ public interface VcsLogUserFilter extends VcsLogDetailsFilter {
/**
* Returns user names selected in the filter, concerning the passed VCS root.
+ *
* @param root has no effect if user chooses some user name;
* it is needed if user selects the predefined value "me" which means the current user.
* Since current user name can be defined differently for different roots, we pass the root for which this value is
@@ -19,5 +20,4 @@ public interface VcsLogUserFilter extends VcsLogDetailsFilter {
*/
@NotNull
Collection getUserNames(@NotNull VirtualFile root);
-
}
diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsRef.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsRef.java
index 95031ff1c2d8..2f89ba6bb5f0 100644
--- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsRef.java
+++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsRef.java
@@ -48,5 +48,4 @@ public interface VcsRef {
*/
@NotNull
VirtualFile getRoot();
-
}
diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsRefType.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsRefType.java
index 9952003f6eed..a8acae6592da 100644
--- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsRefType.java
+++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsRefType.java
@@ -11,18 +11,18 @@ public interface VcsRefType {
/**
*
Tells if this reference type should be considered a branch.
- *
+ *
*
Although there are different ref types across different VCSs, generally they can be divided into development branches producing
- * separate branches in the graph, and tags which are just handy labels to specific repository states.
- * This difference is not clear enough for Git branches or Mercurial bookmarks, which internally have no differences with tags,
- * but they are still considered as branches due to their purpose, rather than to their internal structure.
- *
+ * separate branches in the graph, and tags which are just handy labels to specific repository states.
+ * This difference is not clear enough for Git branches or Mercurial bookmarks, which internally have no differences with tags,
+ * but they are still considered as branches due to their purpose, rather than to their internal structure.
+ *
*
Although this is implementation specific and may change, here are some examples of the difference between branches and not-branches
- * considering the VCS Log:
- *
- *
branch references stop collapsing of long linear branches, while tags don't.
- *
branches try to keep their color through time, while tags don't affect colors of branches.
- *
+ * considering the VCS Log:
+ *
+ *
branch references stop collapsing of long linear branches, while tags don't.
+ *
branches try to keep their color through time, while tags don't affect colors of branches.
+ *
*/
boolean isBranch();
@@ -32,5 +32,4 @@ public interface VcsRefType {
*/
@NotNull
Color getBackgroundColor();
-
}
diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsUser.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsUser.java
index fb2ea21927a9..5e8b13d8bf86 100644
--- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsUser.java
+++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsUser.java
@@ -27,5 +27,4 @@ public interface VcsUser {
@NotNull
String getEmail();
-
}
diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/graph/GraphColorManager.java b/platform/vcs-log/api/src/com/intellij/vcs/log/graph/GraphColorManager.java
index aa51a9e336d1..686bfb4fa462 100644
--- a/platform/vcs-log/api/src/com/intellij/vcs/log/graph/GraphColorManager.java
+++ b/platform/vcs-log/api/src/com/intellij/vcs/log/graph/GraphColorManager.java
@@ -21,6 +21,7 @@ public interface GraphColorManager {
/**
* Returns the color which should be used to draw the given branch.
+ *
* @param headCommit branch head commit index.
*/
int getColorOfBranch(CommitId headCommit);
@@ -55,5 +56,4 @@ public interface GraphColorManager {
* @see VcsLogRefManager#getBranchLayoutComparator()
*/
int compareHeads(CommitId head1, CommitId head2);
-
}
diff --git a/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/EdgePrintElement.java b/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/EdgePrintElement.java
index 8c20356fb754..8844b1fb3062 100644
--- a/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/EdgePrintElement.java
+++ b/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/EdgePrintElement.java
@@ -39,5 +39,4 @@ public interface EdgePrintElement extends PrintElement {
DASHED,
DOTTED
}
-
}
diff --git a/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/GraphCommit.java b/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/GraphCommit.java
index 5ac49d28da9d..eb1ed7f7e4f5 100644
--- a/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/GraphCommit.java
+++ b/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/GraphCommit.java
@@ -32,9 +32,8 @@ public interface GraphCommit {
/**
*
Returns the timestamp indicating the date & time when this commit was made.
*
This time is displayed in the table by default;
- * it is used for joining commits from different repositories;
- * it is used for ordering commits in a single repository (keeping the preference of the topological ordering of course).
+ * it is used for joining commits from different repositories;
+ * it is used for ordering commits in a single repository (keeping the preference of the topological ordering of course).
*/
long getTimestamp();
-
}
diff --git a/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/PermanentGraphBuilder.java b/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/PermanentGraphBuilder.java
index dbbf73ff5cba..0c4492c4a5f7 100644
--- a/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/PermanentGraphBuilder.java
+++ b/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/PermanentGraphBuilder.java
@@ -25,5 +25,4 @@ public interface PermanentGraphBuilder {
@NotNull
PermanentGraph build(@NotNull List> commits);
-
}
diff --git a/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/PrintElement.java b/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/PrintElement.java
index d9e4b8c83822..84c35c84f593 100644
--- a/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/PrintElement.java
+++ b/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/PrintElement.java
@@ -26,5 +26,4 @@ public interface PrintElement {
int getColorId();
boolean isSelected();
-
}
diff --git a/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/RowInfo.java b/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/RowInfo.java
index a5248b2834ea..efa5a8445d95 100644
--- a/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/RowInfo.java
+++ b/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/RowInfo.java
@@ -34,5 +34,4 @@ public interface RowInfo {
@NotNull
RowType getRowType();
-
}
diff --git a/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/VisibleGraph.java b/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/VisibleGraph.java
index 76c590dbee50..fe78dee97348 100644
--- a/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/VisibleGraph.java
+++ b/platform/vcs-log/graph-api/src/com/intellij/vcs/log/graph/VisibleGraph.java
@@ -36,5 +36,4 @@ public interface VisibleGraph {
@NotNull
ActionController getActionController();
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/PermanentGraphBuilderImpl.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/PermanentGraphBuilderImpl.java
index ab353e5335f4..757081c4b7bd 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/PermanentGraphBuilderImpl.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/PermanentGraphBuilderImpl.java
@@ -45,5 +45,4 @@ public class PermanentGraphBuilderImpl implements PermanentGraphBuilde
public PermanentGraph build(@NotNull List> commits) {
return PermanentGraphImpl.newInstance(commits, STUB_COLOR_MANAGER, Collections.emptySet());
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/api/elements/GraphNode.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/api/elements/GraphNode.java
index 2f8118fc63c2..bcc0b0f6138e 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/api/elements/GraphNode.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/api/elements/GraphNode.java
@@ -59,5 +59,4 @@ public final class GraphNode implements GraphElement {
result = 31 * result + myType.hashCode();
return result;
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/api/permanent/PermanentGraphInfo.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/api/permanent/PermanentGraphInfo.java
index 0b3975aee144..34388b22aa43 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/api/permanent/PermanentGraphInfo.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/api/permanent/PermanentGraphInfo.java
@@ -34,5 +34,4 @@ public interface PermanentGraphInfo {
@NotNull
Set getBranchNodeIds();
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/CollapsedActionManager.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/CollapsedActionManager.java
index 05bd86de772e..1e452cbfb0cf 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/CollapsedActionManager.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/CollapsedActionManager.java
@@ -157,7 +157,6 @@ class CollapsedActionManager {
return new GraphEdge(upNodeIndex, downNodeIndex, compiledEdge.getTargetId(), compiledEdge.getType());
}
-
}
private static class FragmentGenerators {
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/DottedFilterEdgesGenerator.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/DottedFilterEdgesGenerator.java
index 6f31ad03fe02..6aab79489baa 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/DottedFilterEdgesGenerator.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/DottedFilterEdgesGenerator.java
@@ -214,5 +214,4 @@ public class DottedFilterEdgesGenerator {
}
}
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/EdgeStorage.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/EdgeStorage.java
index 4be3809357fe..31f1af180a69 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/EdgeStorage.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/EdgeStorage.java
@@ -99,5 +99,4 @@ public class EdgeStorage {
public void removeAll() {
myEdges.clear();
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/EdgeStorageWrapper.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/EdgeStorageWrapper.java
index fa551398f52d..fc47c894981e 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/EdgeStorageWrapper.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/EdgeStorageWrapper.java
@@ -146,6 +146,6 @@ public class EdgeStorageWrapper {
}
public static EdgeStorageWrapper createSimpleEdgeStorage() {
- return new EdgeStorageWrapper(new EdgeStorage(), Functions.id() , Functions.id());
+ return new EdgeStorageWrapper(new EdgeStorage(), Functions.id(), Functions.id());
}
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/FragmentGenerator.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/FragmentGenerator.java
index 8bb161ea71dd..7fe3080c6839 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/FragmentGenerator.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/collapsing/FragmentGenerator.java
@@ -157,5 +157,4 @@ public class FragmentGenerator {
}
};
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/CascadeController.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/CascadeController.java
index 438d1d0b8ef0..e95e0099d26d 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/CascadeController.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/CascadeController.java
@@ -74,5 +74,4 @@ public abstract class CascadeController implements LinearGraphController {
// null mean that this action must be performed by delegateGraphController
@Nullable
protected abstract LinearGraphAnswer performAction(@NotNull LinearGraphAction action);
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/PermanentGraphImpl.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/PermanentGraphImpl.java
index a54cf611131a..2560a41cecc2 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/PermanentGraphImpl.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/PermanentGraphImpl.java
@@ -207,11 +207,6 @@ public class PermanentGraphImpl implements PermanentGraph, P
return myPermanentGraphLayout;
}
- @NotNull
- public GraphColorManager getGraphColorManager() {
- return myGraphColorManager;
- }
-
@NotNull
public Set getBranchNodeIds() {
return myBranchNodeIds;
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/ReachableNodes.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/ReachableNodes.java
index 0f67c3c73897..dbeefd534ed2 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/ReachableNodes.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/ReachableNodes.java
@@ -104,7 +104,6 @@ public class ReachableNodes {
}
});
}
-
}
}
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/SimpleGraphInfo.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/SimpleGraphInfo.java
index 4943ef6a9820..d6b11f4ef5c3 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/SimpleGraphInfo.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/SimpleGraphInfo.java
@@ -18,7 +18,6 @@ package com.intellij.vcs.log.graph.impl.facade;
import com.intellij.util.Function;
import com.intellij.util.NotNullFunction;
import com.intellij.util.containers.ContainerUtil;
-import com.intellij.vcs.log.graph.GraphColorManager;
import com.intellij.vcs.log.graph.GraphCommit;
import com.intellij.vcs.log.graph.GraphCommitImpl;
import com.intellij.vcs.log.graph.api.GraphLayout;
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/VisibleGraphImpl.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/VisibleGraphImpl.java
index 9f2f517de78c..b05fcba42334 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/VisibleGraphImpl.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/VisibleGraphImpl.java
@@ -46,7 +46,9 @@ public class VisibleGraphImpl implements VisibleGraph {
private PrintElementGenerator myPrintElementGenerator;
private boolean myShowLongEdges = false;
- public VisibleGraphImpl(@NotNull LinearGraphController graphController, @NotNull PermanentGraphInfo permanentGraph, @NotNull GraphColorManager colorManager) {
+ public VisibleGraphImpl(@NotNull LinearGraphController graphController,
+ @NotNull PermanentGraphInfo permanentGraph,
+ @NotNull GraphColorManager colorManager) {
myGraphController = graphController;
myPermanentGraph = permanentGraph;
myColorManager = colorManager;
@@ -161,11 +163,13 @@ public class VisibleGraphImpl implements VisibleGraph {
if (action.getType() == GraphAction.Type.MOUSE_OVER) {
myPrintElementManager.setSelectedElement(affectedElement);
- return new GraphAnswerImpl(getCursor(true), myPermanentGraph.getPermanentCommitsInfo().getCommitId(targetId), null, false);
+ return new GraphAnswerImpl(getCursor(true), myPermanentGraph.getPermanentCommitsInfo().getCommitId(targetId), null,
+ false);
}
if (action.getType() == GraphAction.Type.MOUSE_CLICK) {
- return new GraphAnswerImpl(getCursor(false), myPermanentGraph.getPermanentCommitsInfo().getCommitId(targetId), null, true);
+ return new GraphAnswerImpl(getCursor(false), myPermanentGraph.getPermanentCommitsInfo().getCommitId(targetId), null,
+ true);
}
return null;
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/bek/BekBranchCreator.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/bek/BekBranchCreator.java
index df2d13e14c0c..47bd5c863c83 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/bek/BekBranchCreator.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/bek/BekBranchCreator.java
@@ -98,5 +98,4 @@ class BekBranchCreator {
return nodeIndexes;
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/bek/BekChecker.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/bek/BekChecker.java
index 6e6cd7e0316a..e211e0ebbb7b 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/bek/BekChecker.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/bek/BekChecker.java
@@ -51,5 +51,4 @@ public class BekChecker {
}
return null;
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/bek/BekEdgeRestrictions.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/bek/BekEdgeRestrictions.java
index ad1e1b85f8e8..803894112868 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/bek/BekEdgeRestrictions.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/bek/BekEdgeRestrictions.java
@@ -37,5 +37,4 @@ class BekEdgeRestrictions {
boolean hasRestriction(int upNode) {
return myUpToEdge.containsKey(upNode);
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/bek/BekSorter.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/bek/BekSorter.java
index 72b323ce6926..3d3567af1f6d 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/bek/BekSorter.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/facade/bek/BekSorter.java
@@ -94,5 +94,4 @@ public class BekSorter {
BekBranchMerger bekBranchMerger = new BekBranchMerger(branches.first, branches.second, myTimestampGetter);
return bekBranchMerger.getResult();
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/permanent/GraphLayoutBuilder.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/permanent/GraphLayoutBuilder.java
index 920c0b6f66c9..4e649281b221 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/permanent/GraphLayoutBuilder.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/permanent/GraphLayoutBuilder.java
@@ -35,7 +35,7 @@ public class GraphLayoutBuilder {
private static final Logger LOG = Logger.getInstance(GraphLayoutBuilder.class);
@NotNull
- public static GraphLayoutImpl build(@NotNull LinearGraph graph, @NotNull Comparator headerNodeIndexComparator) {
+ public static GraphLayoutImpl build(@NotNull LinearGraph graph, @NotNull Comparator headNodeIndexComparator) {
List heads = new ArrayList();
for (int i = 0; i < graph.nodesCount(); i++) {
if (getUpNodes(graph, i).size() == 0) {
@@ -43,7 +43,7 @@ public class GraphLayoutBuilder {
}
}
try {
- heads = ContainerUtil.sorted(heads, headerNodeIndexComparator);
+ heads = ContainerUtil.sorted(heads, headNodeIndexComparator);
}
catch (ProcessCanceledException pce) {
throw pce;
@@ -52,7 +52,7 @@ public class GraphLayoutBuilder {
// protection against possible comparator flaws
LOG.error(e);
}
- GraphLayoutBuilder builder = new GraphLayoutBuilder(graph, heads, new DfsUtil());
+ GraphLayoutBuilder builder = new GraphLayoutBuilder(graph, heads);
return builder.build();
}
@@ -62,18 +62,16 @@ public class GraphLayoutBuilder {
@NotNull private final List myHeadNodeIndex;
@NotNull private final int[] myStartLayoutIndexForHead;
- @NotNull private final DfsUtil myDfsUtil;
+ @NotNull private final DfsUtil myDfsUtil = new DfsUtil();
private int currentLayoutIndex = 1;
- private GraphLayoutBuilder(@NotNull LinearGraph graph, @NotNull List headNodeIndex, @NotNull DfsUtil dfsUtil) {
+ private GraphLayoutBuilder(@NotNull LinearGraph graph, @NotNull List headNodeIndex) {
myGraph = graph;
- myDfsUtil = dfsUtil;
myLayoutIndex = new int[graph.nodesCount()];
myHeadNodeIndex = headNodeIndex;
myStartLayoutIndexForHead = new int[headNodeIndex.size()];
-
}
private void dfs(int nodeIndex) {
@@ -114,5 +112,4 @@ public class GraphLayoutBuilder {
return new GraphLayoutImpl(myLayoutIndex, myHeadNodeIndex, myStartLayoutIndexForHead);
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/permanent/PermanentCommitsInfoImpl.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/permanent/PermanentCommitsInfoImpl.java
index e713341b4c03..c1b5644c9df5 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/permanent/PermanentCommitsInfoImpl.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/permanent/PermanentCommitsInfoImpl.java
@@ -25,7 +25,6 @@ import com.intellij.vcs.log.graph.utils.IntList;
import com.intellij.vcs.log.graph.utils.TimestampGetter;
import com.intellij.vcs.log.graph.utils.impl.CompressedIntList;
import com.intellij.vcs.log.graph.utils.impl.IntTimestampGetter;
-import gnu.trove.TObjectIntHashMap;
import org.jetbrains.annotations.NotNull;
import java.util.*;
@@ -35,7 +34,7 @@ public class PermanentCommitsInfoImpl implements PermanentCommitsInfo<
@NotNull
public static PermanentCommitsInfoImpl newInstance(@NotNull final List extends GraphCommit> graphCommits,
- @NotNull Map notLoadedCommits) {
+ @NotNull Map notLoadedCommits) {
TimestampGetter timestampGetter = createTimestampGetter(graphCommits);
boolean isIntegerCase = !graphCommits.isEmpty() && graphCommits.get(0).getId().getClass() == Integer.class;
@@ -192,5 +191,4 @@ public class PermanentCommitsInfoImpl implements PermanentCommitsInfo<
}
return result;
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/print/ColorGetterByLayoutIndex.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/print/ColorGetterByLayoutIndex.java
index 7c37d9ae5c08..824d01bc924c 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/print/ColorGetterByLayoutIndex.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/print/ColorGetterByLayoutIndex.java
@@ -71,7 +71,6 @@ public class ColorGetterByLayoutIndex {
else {
return myColorManager.getColorOfFragment(headCommitId, upLayoutIndex);
}
-
}
private int getHeadNodeId(int upNodeIndex) {
@@ -93,5 +92,4 @@ public class ColorGetterByLayoutIndex {
private int getNodeId(int upNodeIndex) {
return myLinearGraph.getNodeId(upNodeIndex);
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/print/PrintElementGeneratorImpl.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/print/PrintElementGeneratorImpl.java
index 751949e37031..92dcd18e8895 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/print/PrintElementGeneratorImpl.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/print/PrintElementGeneratorImpl.java
@@ -163,7 +163,6 @@ public class PrintElementGeneratorImpl extends AbstractPrintElementGenerator {
if (edgeSize >= myLongEdgeSize) addArrowIfNeeded(result, edge, position, upOffset, downOffset, myVisiblePartSize);
if (edgeSize >= myEdgeWithArrowSize) addArrowIfNeeded(result, edge, position, upOffset, downOffset, 1);
-
}
else { // special edges
switch (edge.getType()) {
@@ -248,5 +247,4 @@ public class PrintElementGeneratorImpl extends AbstractPrintElementGenerator {
cache.put(rowIndex, result);
return result;
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/print/elements/EdgePrintElementImpl.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/print/elements/EdgePrintElementImpl.java
index 1eae3c586f74..5aefa2cce4ae 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/print/elements/EdgePrintElementImpl.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/print/elements/EdgePrintElementImpl.java
@@ -105,5 +105,4 @@ public class EdgePrintElementImpl extends PrintElementWithGraphElement implement
result = 31 * result + (myHasArrow ? 1 : 0);
return result;
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/print/elements/SimplePrintElementImpl.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/print/elements/SimplePrintElementImpl.java
index ed28cf196f08..826ef87b1948 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/print/elements/SimplePrintElementImpl.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/impl/print/elements/SimplePrintElementImpl.java
@@ -49,5 +49,4 @@ public class SimplePrintElementImpl extends PrintElementWithGraphElement impleme
result = 31 * result + myPositionInCurrentRow;
return result;
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/linearBek/LinearBekController.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/linearBek/LinearBekController.java
index 634c72c62d5a..e6a4cc83f846 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/linearBek/LinearBekController.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/linearBek/LinearBekController.java
@@ -269,5 +269,4 @@ public class LinearBekController extends CascadeController {
return bekIndexes;
}
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/linearBek/LinearBekGraphBuilder.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/linearBek/LinearBekGraphBuilder.java
index e982ce652b4f..c013d042a71d 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/linearBek/LinearBekGraphBuilder.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/linearBek/LinearBekGraphBuilder.java
@@ -133,7 +133,6 @@ class LinearBekGraphBuilder {
else {
return null;
}
-
}
else {
if ((li > leftLi && li < rightLi) || (li == leftLi)) {
@@ -162,7 +161,6 @@ class LinearBekGraphBuilder {
}
}
}
-
}
if (blockSize >= MAX_BLOCK_SIZE) {
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/LinearGraphUtils.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/LinearGraphUtils.java
index 713af61cc8a6..456d23567731 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/LinearGraphUtils.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/LinearGraphUtils.java
@@ -182,5 +182,4 @@ public class LinearGraphUtils {
});
return ContainerUtil.newHashSet(result);
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/TimestampGetter.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/TimestampGetter.java
index 5433318bfb06..42350cde46e0 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/TimestampGetter.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/TimestampGetter.java
@@ -23,5 +23,4 @@ public interface TimestampGetter {
int size();
long getTimestamp(int index);
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/BitSetFlags.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/BitSetFlags.java
index 6ba77764aebc..933a0dbeb4e7 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/BitSetFlags.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/BitSetFlags.java
@@ -65,6 +65,4 @@ public class BitSetFlags implements Flags {
if (index < 0) throw new IndexOutOfBoundsException("index is " + index + " which is less then zero");
if (index >= mySize) throw new IndexOutOfBoundsException("index is " + index + " and set size is " + mySize);
}
-
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/CompressedIntList.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/CompressedIntList.java
index 778d123cbdb2..8dd48f9ea33a 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/CompressedIntList.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/CompressedIntList.java
@@ -90,5 +90,4 @@ public class CompressedIntList implements IntList {
int strongIndex = index / myBlockSize;
return myStrongValues[strongIndex] + myCompressedDeltas.get(index);
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/IntDeltaCompressor.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/IntDeltaCompressor.java
index 16ae06be67ff..bddf8aab2605 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/IntDeltaCompressor.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/IntDeltaCompressor.java
@@ -93,5 +93,4 @@ import org.jetbrains.annotations.NotNull;
}
return myStartedDeltaIndex.size();
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/ListIntToIntMap.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/ListIntToIntMap.java
index 692335b30888..49fb698ad6b7 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/ListIntToIntMap.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/ListIntToIntMap.java
@@ -160,6 +160,4 @@ public class ListIntToIntMap extends AbstractIntToIntMap implements UpdatableInt
mySubSumOfBlocks[blockIndex] += sumDelta;
}
}
-
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/PermanentListIntToIntMap.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/PermanentListIntToIntMap.java
index 8b5d4595a735..28145af7de7f 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/PermanentListIntToIntMap.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/PermanentListIntToIntMap.java
@@ -112,5 +112,4 @@ public class PermanentListIntToIntMap extends AbstractIntToIntMap implements Int
throw new IllegalStateException(
"Not found long index for short index: " + shortIndex + ". Long & short size is: " + myLongSize + ", " + myShortSize + ".");
}
-
}
diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/TreeIntToIntMap.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/TreeIntToIntMap.java
index f016be045bca..fe61bd704073 100644
--- a/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/TreeIntToIntMap.java
+++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/graph/utils/impl/TreeIntToIntMap.java
@@ -139,5 +139,4 @@ public class TreeIntToIntMap extends AbstractIntToIntMap implements UpdatableInt
return myTree[node];
}
}
-
}
diff --git a/platform/vcs-log/impl/src/META-INF/vcs-log.xml b/platform/vcs-log/impl/src/META-INF/vcs-log.xml
index c9fc0d0f0ca6..fe0edad81a20 100644
--- a/platform/vcs-log/impl/src/META-INF/vcs-log.xml
+++ b/platform/vcs-log/impl/src/META-INF/vcs-log.xml
@@ -30,7 +30,8 @@
-
+
@@ -46,6 +47,10 @@
+
+
+
+
@@ -63,6 +68,7 @@
+
@@ -73,14 +79,27 @@
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/UserNameRegex.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/UserNameRegex.java
index f3a2fe4f4845..b2c61a690fa3 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/UserNameRegex.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/UserNameRegex.java
@@ -20,7 +20,8 @@ import com.intellij.util.Function;
public class UserNameRegex implements Function {
public static final UserNameRegex INSTANCE = new UserNameRegex();
- private UserNameRegex(){}
+ private UserNameRegex() {
+ }
@Override
public String fun(String s) {
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/VcsLogHashMap.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/VcsLogHashMap.java
index b72dae236d0a..1b571e06e98b 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/VcsLogHashMap.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/VcsLogHashMap.java
@@ -15,8 +15,8 @@
*/
package com.intellij.vcs.log;
-import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.util.Condition;
+import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -27,7 +27,7 @@ public interface VcsLogHashMap {
int getCommitIndex(@NotNull Hash hash, @NotNull VirtualFile root);
- @NotNull
+ @Nullable
CommitId getCommitId(int commitIndex);
/**
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/AbstractDataGetter.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/AbstractDataGetter.java
index 99edd7ce9fde..10246abd9977 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/AbstractDataGetter.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/AbstractDataGetter.java
@@ -16,10 +16,7 @@ import com.intellij.util.ThrowableConsumer;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.MultiMap;
import com.intellij.util.ui.UIUtil;
-import com.intellij.vcs.log.CommitId;
-import com.intellij.vcs.log.VcsLogHashMap;
-import com.intellij.vcs.log.VcsLogProvider;
-import com.intellij.vcs.log.VcsShortCommitDetails;
+import com.intellij.vcs.log.*;
import com.intellij.vcs.log.util.SequentialLimitedLifoExecutor;
import gnu.trove.TIntHashSet;
import gnu.trove.TIntIntHashMap;
@@ -252,7 +249,9 @@ abstract class AbstractDataGetter implements Di
@Override
public boolean execute(int commit) {
CommitId commitId = myHashMap.getCommitId(commit);
- rootsAndHashes.putValue(commitId.getRoot(), commitId.getHash().asString());
+ if (commitId != null) {
+ rootsAndHashes.putValue(commitId.getRoot(), commitId.getHash().asString());
+ }
return true;
}
});
@@ -263,7 +262,8 @@ abstract class AbstractDataGetter implements Di
List extends T> details = readDetails(logProvider, entry.getKey(), ContainerUtil.newArrayList(entry.getValue()));
result.addAll(details);
saveInCache(details);
- } else {
+ }
+ else {
LOG.error("No log provider for root " + entry.getKey().getPath() + ". All known log providers " + myLogProviders);
}
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/CommitDetailsGetter.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/CommitDetailsGetter.java
index e2a331f07805..49a6bd6a0a6c 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/CommitDetailsGetter.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/CommitDetailsGetter.java
@@ -32,8 +32,7 @@ public class CommitDetailsGetter extends AbstractDataGetter readDetails(@NotNull VcsLogProvider logProvider, @NotNull VirtualFile root,
- @NotNull List hashes) throws VcsException {
+ @NotNull List hashes) throws VcsException {
return logProvider.readFullDetails(root, hashes);
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/DataPack.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/DataPack.java
index a4fb4cfcf819..681097dda8ad 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/DataPack.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/DataPack.java
@@ -16,7 +16,7 @@
package com.intellij.vcs.log.data;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.util.NotNullFunction;
+import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.vcs.log.*;
import com.intellij.vcs.log.graph.GraphColorManagerImpl;
@@ -26,6 +26,7 @@ import com.intellij.vcs.log.graph.impl.facade.PermanentGraphImpl;
import com.intellij.vcs.log.util.StopWatch;
import gnu.trove.TIntHashSet;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import java.util.*;
@@ -56,26 +57,27 @@ public class DataPack extends DataPackBase {
}
else {
refsModel = new RefsModel(refs, getHeads(commits), hashMap);
- NotNullFunction hashGetter = createHashGetter(hashMap);
+ Function hashGetter = createHashGetter(hashMap);
GraphColorManagerImpl colorManager = new GraphColorManagerImpl(refsModel, hashGetter, getRefManagerMap(providers));
Set branches = getBranchCommitHashIndexes(refsModel.getBranches(), hashMap);
StopWatch sw = StopWatch.start("building graph");
permanentGraph = PermanentGraphImpl.newInstance(commits, colorManager, branches);
sw.report();
-
}
return new DataPack(refsModel, permanentGraph, providers, full);
}
@NotNull
- public static NotNullFunction createHashGetter(@NotNull final VcsLogHashMap hashMap) {
- return new NotNullFunction() {
- @NotNull
+ public static Function createHashGetter(@NotNull final VcsLogHashMap hashMap) {
+ return new Function() {
+ @Nullable
@Override
public Hash fun(Integer commitIndex) {
- return hashMap.getCommitId(commitIndex).getHash();
+ CommitId commitId = hashMap.getCommitId(commitIndex);
+ if (commitId == null) return null;
+ return commitId.getHash();
}
};
}
@@ -118,7 +120,8 @@ public class DataPack extends DataPackBase {
@NotNull
private static DataPack createEmptyInstance() {
- RefsModel emptyModel = new RefsModel(Collections.>emptyMap(), ContainerUtil.newHashSet(), VcsLogHashMapImpl.EMPTY);
+ RefsModel emptyModel =
+ new RefsModel(Collections.>emptyMap(), ContainerUtil.newHashSet(), VcsLogHashMapImpl.EMPTY);
return new DataPack(emptyModel, EmptyPermanentGraph.getInstance(), Collections.emptyMap(), false);
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/DataPackChangeListener.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/DataPackChangeListener.java
index 6ec81fda8762..7c1869434b7c 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/DataPackChangeListener.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/DataPackChangeListener.java
@@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull;
public interface DataPackChangeListener {
/**
* Is called after a new data pack is calculated.
+ *
* @param newDataPack new data pack
*/
@CalledInAwt
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/EmptyPermanentGraph.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/EmptyPermanentGraph.java
index 170dcda0025c..3bc0a305da7e 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/EmptyPermanentGraph.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/EmptyPermanentGraph.java
@@ -67,5 +67,4 @@ public class EmptyPermanentGraph implements PermanentGraph {
public Condition getContainedInBranchCondition(@NotNull Collection currentBranchHead) {
return Conditions.alwaysFalse();
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/EmptyVisibleGraph.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/EmptyVisibleGraph.java
index a0b3ea7e6b80..db5ade1b4e46 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/EmptyVisibleGraph.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/EmptyVisibleGraph.java
@@ -20,8 +20,8 @@ import com.intellij.vcs.log.graph.RowInfo;
import com.intellij.vcs.log.graph.RowType;
import com.intellij.vcs.log.graph.VisibleGraph;
import com.intellij.vcs.log.graph.actions.ActionController;
-import com.intellij.vcs.log.graph.actions.GraphAnswer;
import com.intellij.vcs.log.graph.actions.GraphAction;
+import com.intellij.vcs.log.graph.actions.GraphAnswer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/FakeVisiblePackBuilder.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/FakeVisiblePackBuilder.java
index 7de7a0ea53b8..02eb202b6588 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/FakeVisiblePackBuilder.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/FakeVisiblePackBuilder.java
@@ -32,7 +32,6 @@ import com.intellij.vcs.log.impl.VcsLogUtil;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
-import java.util.Map;
import java.util.Set;
public class FakeVisiblePackBuilder {
@@ -55,7 +54,9 @@ public class FakeVisiblePackBuilder {
}
@NotNull
- private VisiblePack build(@NotNull DataPackBase oldPack, @NotNull VisibleGraphImpl oldGraph, @NotNull VcsLogFilterCollection filters) {
+ private VisiblePack build(@NotNull DataPackBase oldPack,
+ @NotNull VisibleGraphImpl oldGraph,
+ @NotNull VcsLogFilterCollection filters) {
final PermanentGraphInfo info = oldGraph.buildSimpleGraphInfo();
Set heads = ContainerUtil.map2Set(info.getPermanentGraphLayout().getHeadNodeIndex(), new Function() {
@Override
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/InMemoryHashMap.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/InMemoryHashMap.java
index e1791964a9ee..5e607c4b0686 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/InMemoryHashMap.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/InMemoryHashMap.java
@@ -18,11 +18,9 @@ package com.intellij.vcs.log.data;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.BiDirectionalEnumerator;
-import com.intellij.util.containers.Enumerator;
import com.intellij.vcs.log.CommitId;
import com.intellij.vcs.log.Hash;
import com.intellij.vcs.log.VcsLogHashMap;
-import gnu.trove.TIntObjectHashMap;
import gnu.trove.TObjectHashingStrategy;
import gnu.trove.TObjectProcedure;
import org.jetbrains.annotations.NotNull;
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/MiniDetailsGetter.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/MiniDetailsGetter.java
index 1c63f4c762a7..a9d5fd2f3162 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/MiniDetailsGetter.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/MiniDetailsGetter.java
@@ -34,8 +34,7 @@ public class MiniDetailsGetter extends AbstractDataGetter
@NotNull
@Override
protected List extends VcsShortCommitDetails> readDetails(@NotNull VcsLogProvider logProvider, @NotNull VirtualFile root,
- @NotNull List hashes) throws VcsException {
+ @NotNull List hashes) throws VcsException {
return logProvider.readShortDetails(root, hashes);
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/SingleTaskController.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/SingleTaskController.java
index 0b9c0b540df0..3f7df1ddc9f5 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/SingleTaskController.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/SingleTaskController.java
@@ -108,5 +108,4 @@ public abstract class SingleTaskController {
}
}
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsCommitCache.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsCommitCache.java
index 4330006a296d..66ea9caddef7 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsCommitCache.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsCommitCache.java
@@ -25,8 +25,8 @@ import java.awt.*;
/**
*
The cache of commit details.
*
It is not actually a cache, but rather a limited map, because there is intentionally no way to get the non-cached value if it was not
- * found in the cache: such functionality is implemented by the {@link DataGetter} which is able to receive
- * non-cached details more efficiently, in a batch.
+ * found in the cache: such functionality is implemented by the {@link DataGetter} which is able to receive
+ * non-cached details more efficiently, in a batch.
*
Any access to the Cache MUST be performed from the EDT thread.
*/
class VcsCommitCache {
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogDataManager.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogDataManager.java
index 64d0d13bf31e..1e62c1bbc3b6 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogDataManager.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogDataManager.java
@@ -33,6 +33,7 @@ import com.intellij.util.containers.ContainerUtil;
import com.intellij.vcs.log.*;
import com.intellij.vcs.log.util.StopWatch;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import java.io.IOException;
import java.util.Collection;
@@ -69,11 +70,14 @@ public class VcsLogDataManager implements Disposable, VcsLogDataProvider {
@NotNull private final VcsLogRefresherImpl myRefresher;
@NotNull private final List myDataPackChangeListeners = ContainerUtil.createLockFreeCopyOnWriteList();
- public VcsLogDataManager(@NotNull Project project, @NotNull Map logProviders) {
+ @NotNull private final Consumer myFatalErrorsConsumer;
+
+ public VcsLogDataManager(@NotNull Project project, @NotNull Map logProviders, @NotNull Consumer fatalErrorsConsumer) {
myProject = project;
myLogProviders = logProviders;
myDataLoaderQueue = new BackgroundTaskQueue(project, "Loading history...");
myUserRegistry = (VcsUserRegistryImpl)ServiceManager.getService(project, VcsUserRegistry.class);
+ myFatalErrorsConsumer = fatalErrorsConsumer;
myHashMap = createLogHashMap();
myMiniDetailsGetter = new MiniDetailsGetter(myHashMap, logProviders, myTopCommitsDetailsCache, this);
@@ -101,7 +105,7 @@ public class VcsLogDataManager implements Disposable, VcsLogDataProvider {
private VcsLogHashMap createLogHashMap() {
VcsLogHashMap hashMap;
try {
- hashMap = new VcsLogHashMapImpl(myProject, myLogProviders);
+ hashMap = new VcsLogHashMapImpl(myProject, myLogProviders, myFatalErrorsConsumer);
}
catch (IOException e) {
hashMap = new InMemoryHashMap();
@@ -140,7 +144,7 @@ public class VcsLogDataManager implements Disposable, VcsLogDataProvider {
}
@Override
- @NotNull
+ @Nullable
public CommitId getCommitId(int commitIndex) {
return myHashMap.getCommitId(commitIndex);
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogDateFilterImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogDateFilterImpl.java
index 1173016e2c15..e4165c804742 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogDateFilterImpl.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogDateFilterImpl.java
@@ -57,5 +57,4 @@ public class VcsLogDateFilterImpl implements VcsLogDateFilter, VcsLogDetailsFilt
public Date getBefore() {
return myBefore;
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFilterer.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFilterer.java
index ad3ba41056b7..9428beb4dfad 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFilterer.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFilterer.java
@@ -17,7 +17,6 @@ package com.intellij.vcs.log.data;
import com.intellij.vcs.log.VcsLogFilterCollection;
import com.intellij.vcs.log.graph.PermanentGraph;
-import org.jetbrains.annotations.CalledInAwt;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFiltererImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFiltererImpl.java
index da1b814bc501..d40989caeddc 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFiltererImpl.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFiltererImpl.java
@@ -23,7 +23,6 @@ import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.progress.impl.ProgressManagerImpl;
import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Pair;
import com.intellij.util.Consumer;
import com.intellij.util.containers.ContainerUtil;
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogHashMapImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogHashMapImpl.java
index 0a86045ed5e1..6ee80098aec8 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogHashMapImpl.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogHashMapImpl.java
@@ -24,6 +24,7 @@ import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.CommonProcessors;
+import com.intellij.util.Consumer;
import com.intellij.util.io.KeyDescriptor;
import com.intellij.util.io.PersistentEnumerator;
import com.intellij.vcs.log.CommitId;
@@ -72,10 +73,13 @@ public class VcsLogHashMapImpl implements Disposable, VcsLogHashMap {
@NotNull private static final Logger LOG = Logger.getInstance(VcsLogHashMap.class);
@NotNull private static final String LOG_KIND = "hashes";
private static final int VERSION = 2;
+ private static final int NO_INDEX = -1;
@NotNull private final PersistentEnumerator myPersistentEnumerator;
+ @NotNull private final Consumer myExceptionReporter;
- public VcsLogHashMapImpl(@NotNull final Project project, @NotNull Map logProviders) throws IOException {
+ public VcsLogHashMapImpl(@NotNull final Project project, @NotNull Map logProviders, @NotNull Consumer exceptionReporter) throws IOException {
+ myExceptionReporter = exceptionReporter;
myPersistentEnumerator =
PersistentUtil.createPersistentEnumerator(new MyCommitIdKeyDescriptor(project), LOG_KIND,
PersistentUtil.calcLogId(project, logProviders), VERSION);
@@ -97,23 +101,25 @@ public class VcsLogHashMapImpl implements Disposable, VcsLogHashMap {
return getOrPut(hash, root);
}
catch (IOException e) {
- throw new RuntimeException(e); // TODO the map is corrupted => need to rebuild
+ myExceptionReporter.consume(e);
}
+ return NO_INDEX;
}
@Override
- @NotNull
+ @Nullable
public CommitId getCommitId(int commitIndex) {
try {
CommitId commitId = doGetCommitId(commitIndex);
if (commitId == null) {
- throw new RuntimeException("Unknown commit index: " + commitIndex); // TODO this shouldn't happen => need to recreate the map
+ myExceptionReporter.consume(new RuntimeException("Unknown commit index: " + commitIndex));
}
return commitId;
}
catch (IOException e) {
- throw new RuntimeException(e); // TODO map is corrupted => need to recreate it
+ myExceptionReporter.consume(e);
}
+ return null;
}
@Override
@@ -134,7 +140,7 @@ public class VcsLogHashMapImpl implements Disposable, VcsLogHashMap {
return hashRef.get();
}
catch (IOException e) {
- LOG.error(e);
+ myExceptionReporter.consume(e);
return null;
}
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogJoiner.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogJoiner.java
index d221970d1874..06973a90144a 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogJoiner.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogJoiner.java
@@ -36,17 +36,17 @@ public class VcsLogJoiner> {
/**
* Attaches the block of latest commits, which was read from the VCS, to the existing log structure.
*
- * @param savedLog currently available part of the log.
- * @param previousRefs references saved from the previous refresh.
- * @param firstBlock the first n commits read from the VCS.
- * @param newRefs all references (branches) of the repository.
+ * @param savedLog currently available part of the log.
+ * @param previousRefs references saved from the previous refresh.
+ * @param firstBlock the first n commits read from the VCS.
+ * @param newRefs all references (branches) of the repository.
* @return Total saved log with new commits properly attached to it + number of new commits attached to the log.
*/
@NotNull
public Pair, Integer> addCommits(@NotNull List extends Commit> savedLog,
- @NotNull Collection previousRefs,
- @NotNull List extends Commit> firstBlock,
- @NotNull Collection newRefs) {
+ @NotNull Collection previousRefs,
+ @NotNull List extends Commit> firstBlock,
+ @NotNull Collection newRefs) {
Pair> newCommitsAndSavedGreenIndex =
getNewCommitsAndSavedGreenIndex(savedLog, previousRefs, firstBlock, newRefs);
Pair> redCommitsAndSavedRedIndex =
@@ -69,12 +69,11 @@ public class VcsLogJoiner> {
}
-
@NotNull
private Pair> getNewCommitsAndSavedGreenIndex(@NotNull List extends Commit> savedLog,
- @NotNull Collection previousRefs,
- @NotNull List extends Commit> firstBlock,
- @NotNull Collection newRefs) {
+ @NotNull Collection previousRefs,
+ @NotNull List extends Commit> firstBlock,
+ @NotNull Collection newRefs) {
Set allUnresolvedLinkedHashes = new THashSet(newRefs);
allUnresolvedLinkedHashes.removeAll(previousRefs);
// at this moment allUnresolvedLinkedHashes contains only NEW refs
@@ -96,17 +95,19 @@ public class VcsLogJoiner> {
int lastIndex;
for (lastIndex = 0; lastIndex < commits.size(); lastIndex++) {
Commit commit = commits.get(lastIndex);
- if (searchHashes.size() == 0)
+ if (searchHashes.size() == 0) {
return lastIndex;
+ }
searchHashes.remove(commit.getId());
}
- if (searchHashes.size() != 0)
+ if (searchHashes.size() != 0) {
throw new VcsLogRefreshNotEnoughDataException();
+ }
return lastIndex;
}
private Set getAllNewCommits(@NotNull List extends Commit> unsafeGreenPartSavedLog,
- @NotNull List extends Commit> firstBlock) {
+ @NotNull List extends Commit> firstBlock) {
Set existedCommitHashes = ContainerUtil.newHashSet();
for (Commit commit : unsafeGreenPartSavedLog) {
existedCommitHashes.add(commit.getId());
@@ -152,8 +153,9 @@ public class VcsLogJoiner> {
}
private void markRealRedNode(@NotNull CommitId node) {
- if (!currentRed.remove(node))
+ if (!currentRed.remove(node)) {
throw new IllegalStateException(ILLEGAL_DATA_RELOAD_ALL); // see VcsLogJoinerTest#illegalStateExceptionTest2
+ }
allRedCommit.add(node);
}
@@ -170,8 +172,9 @@ public class VcsLogJoiner> {
currentRed.addAll(commit.getParents());
}
- if (currentRed.isEmpty())
+ if (currentRed.isEmpty()) {
return lastIndex + 1;
+ }
}
throw new IllegalStateException(ILLEGAL_DATA_RELOAD_ALL); // see VcsLogJoinerTest#illegalStateExceptionTest
}
@@ -212,17 +215,20 @@ public class VcsLogJoiner> {
}
}
- if (!allParentsWereAdded)
+ if (!allParentsWereAdded) {
continue;
+ }
int insertIndex;
Set parents = new THashSet(currentCommit.getParents());
for (insertIndex = 0; insertIndex < list.size(); insertIndex++) {
Commit someCommit = list.get(insertIndex);
- if (parents.contains(someCommit.getId()))
+ if (parents.contains(someCommit.getId())) {
break;
- if (someCommit.getTimestamp() < currentCommit.getTimestamp())
+ }
+ if (someCommit.getTimestamp() < currentCommit.getTimestamp()) {
break;
+ }
}
list.add(insertIndex, currentCommit);
@@ -238,6 +244,4 @@ public class VcsLogJoiner> {
return list;
}
}
-
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogMultiRepoJoiner.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogMultiRepoJoiner.java
index f36b26a74d94..ac95e7214c84 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogMultiRepoJoiner.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogMultiRepoJoiner.java
@@ -55,5 +55,4 @@ public class VcsLogMultiRepoJoiner rootsToRefresh);
-
}
\ No newline at end of file
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogRefresherImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogRefresherImpl.java
index c6c7c05f4a2c..4a03713edcaf 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogRefresherImpl.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogRefresherImpl.java
@@ -41,7 +41,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.*;
public class VcsLogRefresherImpl implements VcsLogRefresher {
-
+
private static final Logger LOG = Logger.getInstance(VcsLogRefresherImpl.class);
@NotNull private final Project myProject;
@@ -459,6 +459,5 @@ public class VcsLogRefresherImpl implements VcsLogRefresher {
public Set getRefs(@NotNull VirtualFile root) {
return myRefs.get(root);
}
-
}
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogSorter.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogSorter.java
index 3f9d742eef34..5c4306cd50fc 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogSorter.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogSorter.java
@@ -29,5 +29,4 @@ public class VcsLogSorter {
public static List sortByDateTopoOrder(@NotNull Collection commits) {
return new VcsLogJoiner.NewCommitIntegrator(new ArrayList(), commits).getResultList();
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogUiPropertiesImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogUiPropertiesImpl.java
index c2a52f9f3c20..5bb2f6a1cc17 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogUiPropertiesImpl.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogUiPropertiesImpl.java
@@ -20,7 +20,6 @@ import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.vcs.log.VcsLogSettings;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
import java.util.*;
@@ -173,5 +172,4 @@ public abstract class VcsLogUiPropertiesImpl implements PersistentStateComponent
return users.hashCode();
}
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VisiblePack.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VisiblePack.java
index 0a32c37ad79d..130575489606 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VisiblePack.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VisiblePack.java
@@ -28,14 +28,18 @@ import java.util.Map;
public class VisiblePack implements VcsLogDataPack {
@NotNull
- public static final VisiblePack EMPTY = new VisiblePack(DataPack.EMPTY, EmptyVisibleGraph.getInstance(), false, VcsLogFilterCollectionImpl.EMPTY);
+ public static final VisiblePack EMPTY =
+ new VisiblePack(DataPack.EMPTY, EmptyVisibleGraph.getInstance(), false, VcsLogFilterCollectionImpl.EMPTY);
@NotNull private final DataPackBase myDataPack;
@NotNull private final VisibleGraph myVisibleGraph;
private final boolean myCanRequestMore;
@NotNull private final VcsLogFilterCollection myFilters;
- VisiblePack(@NotNull DataPackBase dataPack, @NotNull VisibleGraph graph, boolean canRequestMore, @NotNull VcsLogFilterCollection filters) {
+ VisiblePack(@NotNull DataPackBase dataPack,
+ @NotNull VisibleGraph graph,
+ boolean canRequestMore,
+ @NotNull VcsLogFilterCollection filters) {
myDataPack = dataPack;
myVisibleGraph = graph;
myCanRequestMore = canRequestMore;
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VisiblePackBuilder.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VisiblePackBuilder.java
index 78e8f534f090..201a6ebafb0f 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VisiblePackBuilder.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VisiblePackBuilder.java
@@ -119,11 +119,14 @@ class VisiblePackBuilder {
}
});
VisibleGraph visibleGraph = dataPack.getPermanentGraph().createVisibleGraph(sortType, null, indices);
- return new VisiblePack(dataPack, visibleGraph, false, new VcsLogFilterCollectionImpl(null, null, new VcsLogHashFilterImpl(hashes), null, null, null, null));
+ return new VisiblePack(dataPack, visibleGraph, false,
+ new VcsLogFilterCollectionImpl(null, null, new VcsLogHashFilterImpl(hashes), null, null, null, null));
}
@Nullable
- private Set getMatchingHeads(@NotNull VcsLogRefs refs, @NotNull Set roots, @NotNull VcsLogFilterCollection filters) {
+ private Set getMatchingHeads(@NotNull VcsLogRefs refs,
+ @NotNull Set roots,
+ @NotNull VcsLogFilterCollection filters) {
VcsLogBranchFilter branchFilter = filters.getBranchFilter();
VcsLogRootFilter rootFilter = filters.getRootFilter();
VcsLogStructureFilter structureFilter = filters.getStructureFilter();
@@ -167,8 +170,8 @@ class VisiblePackBuilder {
@NotNull
private Collection filterInMemory(@NotNull PermanentGraph permanentGraph,
- @NotNull List detailsFilters,
- @Nullable Set matchingHeads) {
+ @NotNull List detailsFilters,
+ @Nullable Set matchingHeads) {
Collection result = ContainerUtil.newArrayList();
for (GraphCommit commit : permanentGraph.getAllCommits()) {
VcsCommitMetadata data = getDetailsFromCache(commit.getId());
@@ -223,8 +226,8 @@ class VisiblePackBuilder {
@NotNull
private static Collection getFilteredDetailsFromTheVcs(@NotNull Map providers,
- @NotNull VcsLogFilterCollection filterCollection,
- int maxCount) throws VcsException {
+ @NotNull VcsLogFilterCollection filterCollection,
+ int maxCount) throws VcsException {
Set visibleRoots =
VcsLogUtil.getAllVisibleRoots(providers.keySet(), filterCollection.getRootFilter(), filterCollection.getStructureFilter());
@@ -240,7 +243,8 @@ class VisiblePackBuilder {
VcsLogFilterCollection rootSpecificCollection = filterCollection;
if (rootSpecificCollection.getStructureFilter() != null) {
- rootSpecificCollection = replaceStructureFilter(filterCollection, ContainerUtil.newHashSet(VcsLogUtil.getFilteredFilesForRoot(root, filterCollection)));
+ rootSpecificCollection =
+ replaceStructureFilter(filterCollection, ContainerUtil.newHashSet(VcsLogUtil.getFilteredFilesForRoot(root, filterCollection)));
}
List matchingCommits = entry.getValue().getCommitsMatchingFilter(root, rootSpecificCollection, maxCount);
@@ -277,5 +281,4 @@ class VisiblePackBuilder {
}
});
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/graph/GraphColorManagerImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/graph/GraphColorManagerImpl.java
index c62e93d43588..174009c3a14b 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/graph/GraphColorManagerImpl.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/graph/GraphColorManagerImpl.java
@@ -17,14 +17,13 @@ package com.intellij.vcs.log.graph;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.util.NotNullFunction;
+import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.hash.LinkedHashMap;
import com.intellij.vcs.log.Hash;
import com.intellij.vcs.log.VcsLogRefManager;
import com.intellij.vcs.log.VcsRef;
import com.intellij.vcs.log.data.RefsModel;
-import com.intellij.vcs.log.impl.VcsLogUtil;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
@@ -42,7 +41,7 @@ public class GraphColorManagerImpl implements GraphColorManager {
@NotNull private final Map myRefManagers;
public GraphColorManagerImpl(@NotNull RefsModel refsModel,
- @NotNull NotNullFunction hashGetter,
+ @NotNull Function hashGetter,
@NotNull Map refManagers) {
myRefsModel = refsModel;
myRefManagers = refManagers;
@@ -79,7 +78,7 @@ public class GraphColorManagerImpl implements GraphColorManager {
public static class HeadsComparator implements Comparator {
@NotNull private final RefsModel myRefsModel;
@NotNull private final Map myRefManagers;
- @NotNull private final NotNullFunction myHashGetter;
+ @NotNull private final Function myHashGetter;
@NotNull private final LinkedHashMap myErrorWasReported = new LinkedHashMap(10) {
@Override
@@ -90,7 +89,7 @@ public class GraphColorManagerImpl implements GraphColorManager {
public HeadsComparator(@NotNull RefsModel refsModel,
@NotNull Map refManagers,
- @NotNull NotNullFunction hashGetter) {
+ @NotNull Function hashGetter) {
myRefsModel = refsModel;
myRefManagers = refManagers;
myHashGetter = hashGetter;
@@ -132,7 +131,7 @@ public class GraphColorManagerImpl implements GraphColorManager {
VcsLogRefManager refManager1 = myRefManagers.get(root1);
VcsLogRefManager refManager2 = myRefManagers.get(root2);
if (!refManager1.equals(refManager2)) {
- return VcsLogUtil.compareRoots(root1, root2);
+ return refManager1.toString().compareTo(refManager2.toString());
}
VcsRef bestRef = ContainerUtil.sorted(ContainerUtil.concat(refs1, refs2), refManager1.getBranchLayoutComparator()).get(0);
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/TimedVcsCommitImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/TimedVcsCommitImpl.java
index d09ab814b0a3..6b6ceca622a9 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/TimedVcsCommitImpl.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/TimedVcsCommitImpl.java
@@ -11,9 +11,9 @@ import java.util.List;
/**
*
We suppose that the Hash is the unique identifier of the Commit,
- * i. e. it is the only value that should be checked in equals() and hashCode().
+ * i. e. it is the only value that should be checked in equals() and hashCode().
*
equals() and hashCode() are made final to ensure that any descendants of this class are considered equal
- * if and only if their hashes are equals.
+ * if and only if their hashes are equals.
*
It is highly recommended to use this standard implementation of the VcsCommit because of the above reasons.
*
* @author erokhins
@@ -73,5 +73,4 @@ public class TimedVcsCommitImpl implements TimedVcsCommit {
public final long getTimestamp() {
return myTime;
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsChangesLazilyParsedDetails.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsChangesLazilyParsedDetails.java
index 0dba920a0d23..1685d1ff2754 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsChangesLazilyParsedDetails.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsChangesLazilyParsedDetails.java
@@ -58,5 +58,4 @@ public class VcsChangesLazilyParsedDetails extends VcsCommitMetadataImpl impleme
return Collections.emptyList();
}
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentProvider.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentProvider.java
index 621b391e4177..980a9a0601f0 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentProvider.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentProvider.java
@@ -51,6 +51,12 @@ public class VcsLogContentProvider implements ChangesViewContentProvider {
public VcsLogContentProvider(@NotNull Project project, @NotNull VcsLogManager logManager) {
myProject = project;
myLogManager = logManager;
+ myLogManager.setRecreateMainLogHandler(new Runnable() {
+ @Override
+ public void run() {
+ recreateLog();
+ }
+ });
}
@Override
@@ -89,20 +95,25 @@ public class VcsLogContentProvider implements ChangesViewContentProvider {
@NotNull String shortName) {
logManager.watchTab(ContentUtilEx.getFullName(TAB_NAME, shortName), logUi);
logUi.requestFocus();
- ContentUtilEx.addTabbedContent(toolWindow.getContentManager(), logUi.getMainFrame().getMainComponent(), TAB_NAME, shortName, true, logUi);
+ ContentUtilEx
+ .addTabbedContent(toolWindow.getContentManager(), logUi.getMainFrame().getMainComponent(), TAB_NAME, shortName, true, logUi);
toolWindow.activate(null);
}
+ private void recreateLog() {
+ myContainer.removeAll();
+ myLogManager.disposeLog();
+
+ initContentInternal();
+ }
+
private class MyVcsListener implements VcsListener {
@Override
public void directoryMappingChanged() {
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
- myContainer.removeAll();
- myLogManager.disposeLog();
-
- initContentInternal();
+ recreateLog();
}
});
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogFilterCollectionImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogFilterCollectionImpl.java
index 4d6fe2cfe8b2..39ef50b66335 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogFilterCollectionImpl.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogFilterCollectionImpl.java
@@ -103,5 +103,4 @@ public class VcsLogFilterCollectionImpl implements VcsLogFilterCollection {
public List getDetailsFilters() {
return ContainerUtil.skipNulls(Arrays.asList(myUserFilter, myDateFilter, myTextFilter, myStructureFilter));
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogImpl.java
index 698e40882af4..0cd51d547fe0 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogImpl.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogImpl.java
@@ -28,7 +28,8 @@ import com.intellij.vcs.log.ui.frame.VcsLogGraphTable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.*;
+import java.util.AbstractList;
+import java.util.Collection;
import java.util.List;
import java.util.concurrent.Future;
@@ -46,7 +47,7 @@ public class VcsLogImpl implements VcsLog {
public List getSelectedCommits() {
final int[] rows = myUi.getTable().getSelectedRows();
return new AbstractList() {
- @NotNull
+ @Nullable
@Override
public CommitId get(int index) {
return getTable().getGraphTableModel().getCommitIdAtRow(rows[index]);
@@ -84,7 +85,8 @@ public class VcsLogImpl implements VcsLog {
@Override
public void requestSelectedDetails(@NotNull Consumer> consumer, @Nullable ProgressIndicator indicator) {
List rowsList = Ints.asList(myUi.getTable().getSelectedRows());
- myDataManager.getCommitDetailsGetter().loadCommitsData(getTable().getGraphTableModel().convertToHashesAndRoots(rowsList), consumer, indicator);
+ myDataManager.getCommitDetailsGetter()
+ .loadCommitsData(getTable().getGraphTableModel().convertToHashesAndRoots(rowsList), consumer, indicator);
}
@Nullable
@@ -122,5 +124,4 @@ public class VcsLogImpl implements VcsLog {
public Collection getLogProviders() {
return myDataManager.getLogProviders();
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogManager.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogManager.java
index 07ff58997350..784b54cda055 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogManager.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogManager.java
@@ -22,15 +22,17 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.ui.MessageType;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.vcs.AbstractVcs;
import com.intellij.openapi.vcs.ProjectLevelVcsManager;
import com.intellij.openapi.vcs.VcsRoot;
+import com.intellij.openapi.vcs.ui.VcsBalloonProblemNotifier;
import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.util.Consumer;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.MultiMap;
import com.intellij.vcs.log.VcsLogProvider;
-import com.intellij.vcs.log.VcsLogRefresher;
import com.intellij.vcs.log.data.*;
import com.intellij.vcs.log.graph.PermanentGraph;
import com.intellij.vcs.log.ui.VcsLogColorManagerImpl;
@@ -51,6 +53,8 @@ public class VcsLogManager implements Disposable {
@NotNull private final Project myProject;
@NotNull private final VcsLogTabsProperties myUiProperties;
+ @Nullable private Runnable myRecreateMainLogHandler;
+
private volatile VcsLogUiImpl myUi;
private VcsLogDataManager myDataManager;
private VcsLogColorManagerImpl myColorManager;
@@ -135,7 +139,7 @@ public class VcsLogManager implements Disposable {
if (myDataManager != null) return true;
Map logProviders = findLogProviders(getVcsRoots(), myProject);
- myDataManager = new VcsLogDataManager(myProject, logProviders);
+ myDataManager = new VcsLogDataManager(myProject, logProviders, new MyFatalErrorsConsumer());
myTabsLogRefresher = new VcsLogTabsRefresher(myProject, myDataManager);
refreshLogOnVcsEvents(logProviders, myTabsLogRefresher);
@@ -146,7 +150,8 @@ public class VcsLogManager implements Disposable {
return false;
}
- private static void refreshLogOnVcsEvents(@NotNull Map logProviders, @NotNull VcsLogTabsRefresher refresher) {
+ private static void refreshLogOnVcsEvents(@NotNull Map logProviders,
+ @NotNull VcsLogTabsRefresher refresher) {
MultiMap providers2roots = MultiMap.create();
for (Map.Entry entry : logProviders.entrySet()) {
providers2roots.putValue(entry.getValue(), entry.getKey());
@@ -180,6 +185,10 @@ public class VcsLogManager implements Disposable {
return logProviders;
}
+ public void setRecreateMainLogHandler(@Nullable Runnable recreateMainLogHandler) {
+ myRecreateMainLogHandler = recreateMainLogHandler;
+ }
+
/**
* The instance of the {@link VcsLogUiImpl} or null if the log was not initialized yet.
*/
@@ -205,4 +214,35 @@ public class VcsLogManager implements Disposable {
public void dispose() {
disposeLog();
}
+
+ private class MyFatalErrorsConsumer implements Consumer {
+ private boolean myIsBroken = false;
+
+ @Override
+ public void consume(@NotNull final Exception e) {
+ ApplicationManager.getApplication().invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ if (!myIsBroken) {
+ myIsBroken = true;
+ processErrorFirstTime(e);
+ }
+ else {
+ LOG.debug(e);
+ }
+ }
+ });
+ }
+
+ protected void processErrorFirstTime(@NotNull Exception e) {
+ if (myRecreateMainLogHandler != null) {
+ LOG.info(e);
+ VcsBalloonProblemNotifier.showOverChangesView(myProject, "Fatal error, VCS Log recreated: " + e.getMessage(), MessageType.ERROR);
+ myRecreateMainLogHandler.run();
+ }
+ else {
+ LOG.error(e);
+ }
+ }
+ }
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogObjectsFactoryImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogObjectsFactoryImpl.java
index 881530d732ad..d268293bac45 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogObjectsFactoryImpl.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogObjectsFactoryImpl.java
@@ -4,7 +4,6 @@ import com.intellij.openapi.util.ThrowableComputable;
import com.intellij.openapi.vcs.changes.Change;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.WeakInterner;
-import com.intellij.util.containers.WeakStringInterner;
import com.intellij.vcs.log.*;
import org.jetbrains.annotations.NotNull;
@@ -65,7 +64,8 @@ public class VcsLogObjectsFactoryImpl implements VcsLogObjectsFactory {
@NotNull ThrowableComputable, ? extends Exception> changesGetter) {
VcsUser author = createUser(authorName, authorEmail);
VcsUser committer = createUser(committerName, committerEmail);
- return new VcsChangesLazilyParsedDetails(hash, parents, commitTime, root, subject, author, message, committer, authorTime, changesGetter);
+ return new VcsChangesLazilyParsedDetails(hash, parents, commitTime, root, subject, author, message, committer, authorTime,
+ changesGetter);
}
@NotNull
@@ -79,5 +79,4 @@ public class VcsLogObjectsFactoryImpl implements VcsLogObjectsFactory {
public VcsRef createRef(@NotNull Hash commitHash, @NotNull String name, @NotNull VcsRefType type, @NotNull VirtualFile root) {
return myRefsInterner.intern(new VcsRefImpl(commitHash, name, type, root));
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogUtil.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogUtil.java
index 89d402f136dc..c90f4c729c38 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogUtil.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogUtil.java
@@ -18,12 +18,10 @@ package com.intellij.vcs.log.impl;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vcs.FilePath;
-import com.intellij.openapi.vcs.changes.ChangesUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
-import com.intellij.util.containers.MultiMap;
import com.intellij.vcs.log.*;
import com.intellij.vcs.log.data.LoadingDetails;
import com.intellij.vcs.log.graph.VisibleGraph;
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsRefImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsRefImpl.java
index 5a4bb10c0568..9398f8c64bbc 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsRefImpl.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsRefImpl.java
@@ -78,5 +78,4 @@ public final class VcsRefImpl implements VcsRef {
result = 31 * result + (myType.hashCode());
return result;
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsRootsRegistry.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsRootsRegistry.java
index 4018ec9de92a..dd083047d067 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsRootsRegistry.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsRootsRegistry.java
@@ -19,9 +19,11 @@ import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.io.IOException;
+
public interface VcsRootsRegistry {
- int getId(@NotNull VirtualFile root);
+ int getId(@NotNull VirtualFile root) throws IOException;
@Nullable
- VirtualFile getRootById(int id);
+ VirtualFile getRootById(int id) throws IOException;
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsRootsRegistryImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsRootsRegistryImpl.java
index c130efc44dd7..0f00dc29840f 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsRootsRegistryImpl.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsRootsRegistryImpl.java
@@ -61,32 +61,20 @@ public class VcsRootsRegistryImpl implements VcsRootsRegistry, Disposable {
}
@Override
- public int getId(@NotNull VirtualFile root) {
- try {
- return myEnumerator.enumerate(root.getPath());
- }
- catch (IOException e) {
- LOG.error(e);
- throw new RuntimeException(e); // to be dealt with in rr/julia/persistenthashmap branch
- }
+ public int getId(@NotNull VirtualFile root) throws IOException {
+ return myEnumerator.enumerate(root.getPath());
}
@Override
@Nullable
- public VirtualFile getRootById(int id) {
- try {
- String path = myEnumerator.valueOf(id);
- if (path == null) throw new RuntimeException("Can not find path by id " + id);
- VirtualFile file = LocalFileSystem.getInstance().findFileByPath(path);
- if (file == null) {
- LOG.info("Can not find file by path " + path);
- return null;
- }
- return file;
- }
- catch (IOException e) {
- LOG.error(e);
- throw new RuntimeException(e); // to be dealt with in rr/julia/persistenthashmap branch
+ public VirtualFile getRootById(int id) throws IOException {
+ String path = myEnumerator.valueOf(id);
+ if (path == null) throw new RuntimeException("Can not find path by id " + id);
+ VirtualFile file = LocalFileSystem.getInstance().findFileByPath(path);
+ if (file == null) {
+ LOG.info("Can not find file by path " + path);
+ return null;
}
+ return file;
}
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsShortCommitDetailsImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsShortCommitDetailsImpl.java
index 695045414bbc..30a77d6a2fe2 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsShortCommitDetailsImpl.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsShortCommitDetailsImpl.java
@@ -64,5 +64,4 @@ public class VcsShortCommitDetailsImpl extends TimedVcsCommitImpl implements Vcs
public String toString() {
return getId().toShortString() + "(" + getSubject() + ")";
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsUserImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsUserImpl.java
index 4fb1a3a77be5..e3d6ec53ae70 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsUserImpl.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsUserImpl.java
@@ -16,12 +16,10 @@
package com.intellij.vcs.log.impl;
import com.intellij.openapi.util.Pair;
-import com.intellij.util.containers.ContainerUtil;
import com.intellij.vcs.log.VcsUser;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/paint/GraphCellPainter.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/paint/GraphCellPainter.java
index 917bb7ebee07..fe44fb1ed7c5 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/paint/GraphCellPainter.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/paint/GraphCellPainter.java
@@ -31,6 +31,5 @@ public interface GraphCellPainter {
@Nullable
PrintElement getElementUnderCursor(@NotNull Collection extends PrintElement> printElements, int x, int y);
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogActionPlaces.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogActionPlaces.java
index 3e40084743c3..805e89e5eadc 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogActionPlaces.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogActionPlaces.java
@@ -22,4 +22,5 @@ public class VcsLogActionPlaces {
public static final String VCS_LOG_TABLE_PLACE = "Vcs.Log.ContextMenu";
public static final String VCS_LOG_INTELLI_SORT_ACTION = "Vcs.Log.IntelliSortChooser";
public static final String VCS_LOG_QUICK_SETTINGS_ACTION = "Vcs.Log.QuickSettings";
+ public static final String VCS_LOG_FOCUS_TEXT_FILTER = "Vcs.Log.FocusTextFilter";
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogColorManager.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogColorManager.java
index 6999f9a0f2ba..eebcdcb4e869 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogColorManager.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogColorManager.java
@@ -22,5 +22,4 @@ public interface VcsLogColorManager {
* Tells if there are several repositories currently shown in the log.
*/
boolean isMultipleRoots();
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogUiImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogUiImpl.java
index 15d592cd7c02..9717573af084 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogUiImpl.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogUiImpl.java
@@ -11,8 +11,8 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.MessageType;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.vcs.ui.VcsBalloonProblemNotifier;
-import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.util.PairFunction;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.UIUtil;
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/CollapseGraphAction.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/CollapseGraphAction.java
index fc2b267d23b4..5e747e168037 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/CollapseGraphAction.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/CollapseGraphAction.java
@@ -22,6 +22,12 @@ import org.jetbrains.annotations.NotNull;
import javax.swing.*;
public class CollapseGraphAction extends CollapseOrExpandGraphAction {
+ @NotNull private static final String COLLAPSE = "Collapse";
+
+ public CollapseGraphAction() {
+ super(COLLAPSE);
+ }
+
@Override
protected void executeAction(@NotNull VcsLogUiImpl vcsLogUi) {
vcsLogUi.collapseAll();
@@ -42,6 +48,6 @@ public class CollapseGraphAction extends CollapseOrExpandGraphAction {
@NotNull
@Override
protected String getPrefix() {
- return "Collapse ";
+ return COLLAPSE + " ";
}
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/CollapseOrExpandGraphAction.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/CollapseOrExpandGraphAction.java
index 53d1f3bf4254..15558b48b35c 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/CollapseOrExpandGraphAction.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/CollapseOrExpandGraphAction.java
@@ -32,8 +32,8 @@ abstract class CollapseOrExpandGraphAction extends DumbAwareAction {
private static final String MERGES = "Merges";
private static final String MERGES_DESCRIPTION = "merges";
- public CollapseOrExpandGraphAction() {
- super("Collapse or Expand " + LINEAR_BRANCHES, "Collapse or Expand " + LINEAR_BRANCHES_DESCRIPTION, null);
+ public CollapseOrExpandGraphAction(@NotNull String action) {
+ super(action + " " + LINEAR_BRANCHES, action + " " + LINEAR_BRANCHES_DESCRIPTION, null);
}
@Override
@@ -89,5 +89,4 @@ abstract class CollapseOrExpandGraphAction extends DumbAwareAction {
private static boolean isIconHidden(@NotNull AnActionEvent e) {
return e.getPlace().equals(ToolWindowContentUi.POPUP_PLACE);
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/ExpandGraphAction.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/ExpandGraphAction.java
index 199468f7e3f7..a219989abddb 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/ExpandGraphAction.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/ExpandGraphAction.java
@@ -22,6 +22,12 @@ import org.jetbrains.annotations.NotNull;
import javax.swing.*;
public class ExpandGraphAction extends CollapseOrExpandGraphAction {
+ @NotNull private static final String EXPAND = "Expand";
+
+ public ExpandGraphAction() {
+ super(EXPAND);
+ }
+
@Override
protected void executeAction(@NotNull VcsLogUiImpl vcsLogUi) {
vcsLogUi.expandAll();
@@ -42,6 +48,6 @@ public class ExpandGraphAction extends CollapseOrExpandGraphAction {
@NotNull
@Override
protected String getPrefix() {
- return "Expand ";
+ return EXPAND + " ";
}
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/FocusTextFilterAction.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/FocusTextFilterAction.java
new file mode 100644
index 000000000000..7358e0d7501a
--- /dev/null
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/FocusTextFilterAction.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2000-2016 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.vcs.log.ui.actions;
+
+import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.actionSystem.CommonDataKeys;
+import com.intellij.openapi.project.DumbAwareAction;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.wm.IdeFocusManager;
+import com.intellij.vcs.log.VcsLogDataKeys;
+import com.intellij.vcs.log.VcsLogUi;
+import com.intellij.vcs.log.ui.VcsLogUiImpl;
+import com.intellij.vcs.log.ui.frame.MainFrame;
+import org.jetbrains.annotations.NotNull;
+
+public class FocusTextFilterAction extends DumbAwareAction {
+ public FocusTextFilterAction() {
+ super("Focus Text Filter", "Focus text filter or move focus back to the commits list", null);
+ }
+
+ @Override
+ public void update(@NotNull AnActionEvent e) {
+ Project project = e.getProject();
+ VcsLogUi ui = e.getData(VcsLogDataKeys.VCS_LOG_UI);
+ e.getPresentation().setEnabledAndVisible(project != null && ui != null && ui instanceof VcsLogUiImpl);
+ }
+
+ @Override
+ public void actionPerformed(@NotNull AnActionEvent e) {
+ Project project = e.getRequiredData(CommonDataKeys.PROJECT);
+ MainFrame mainFrame = ((VcsLogUiImpl)e.getRequiredData(VcsLogDataKeys.VCS_LOG_UI)).getMainFrame();
+ if (mainFrame.getTextFilter().getTextEditor().hasFocus()) {
+ IdeFocusManager.getInstance(project).requestFocus(mainFrame.getGraphTable(), true);
+ }
+ else {
+ IdeFocusManager.getInstance(project).requestFocus(mainFrame.getTextFilter(), true);
+ }
+ }
+}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/GoToHashOrRefAction.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/GoToHashOrRefAction.java
index 2f4943b3a3f8..c4b040444966 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/GoToHashOrRefAction.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/GoToHashOrRefAction.java
@@ -25,7 +25,10 @@ import com.intellij.vcs.log.impl.VcsLogUtil;
import com.intellij.vcs.log.ui.VcsLogUiImpl;
import org.jetbrains.annotations.NotNull;
-import java.util.*;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Map;
+import java.util.Set;
import java.util.concurrent.Future;
public class GoToHashOrRefAction extends DumbAwareAction {
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/RefreshLogAction.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/RefreshLogAction.java
index 90d27af5f2ea..9ebdc0bf043b 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/RefreshLogAction.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/RefreshLogAction.java
@@ -40,7 +40,8 @@ public class RefreshLogAction extends RefreshAction {
Project project = e.getProject();
if (project == null) {
e.getPresentation().setEnabledAndVisible(false);
- } else {
+ }
+ else {
VcsLogDataManager dataManager = VcsLogManager.getInstance(project).getDataManager();
e.getPresentation().setEnabledAndVisible(dataManager != null && e.getData(VcsLogDataKeys.VCS_LOG_UI) != null);
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/TextFieldWithProgress.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/TextFieldWithProgress.java
index 49ceb65b254d..ae7a3e9c6c4d 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/TextFieldWithProgress.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/TextFieldWithProgress.java
@@ -41,32 +41,32 @@ public abstract class TextFieldWithProgress extends JPanel {
myProgressIcon = new AsyncProcessIcon("Loading commits");
myTextField = new TextFieldWithAutoCompletion(project, completionProvider, false, null) {
- @Override
- public void setBackground(Color bg) {
- super.setBackground(bg);
- myProgressIcon.setBackground(bg);
- }
+ @Override
+ public void setBackground(Color bg) {
+ super.setBackground(bg);
+ myProgressIcon.setBackground(bg);
+ }
- @Override
- protected EditorEx createEditor() {
- EditorEx editor = super.createEditor();
- editor.putUserData(AutoPopupController.ALWAYS_AUTO_POPUP, true);
- EditorCustomization customization = SpellCheckingEditorCustomizationProvider.getInstance().getDisabledCustomization();
- if (customization != null) {
- customization.customize(editor);
- }
- return editor;
+ @Override
+ protected EditorEx createEditor() {
+ EditorEx editor = super.createEditor();
+ editor.putUserData(AutoPopupController.ALWAYS_AUTO_POPUP, true);
+ EditorCustomization customization = SpellCheckingEditorCustomizationProvider.getInstance().getDisabledCustomization();
+ if (customization != null) {
+ customization.customize(editor);
}
+ return editor;
+ }
- @Override
- protected boolean processKeyBinding(KeyStroke ks, final KeyEvent e, int condition, boolean pressed) {
- if (e.getKeyCode() == KeyEvent.VK_ENTER) {
- onOk();
- return true;
- }
- return false;
+ @Override
+ protected boolean processKeyBinding(KeyStroke ks, final KeyEvent e, int condition, boolean pressed) {
+ if (e.getKeyCode() == KeyEvent.VK_ENTER) {
+ onOk();
+ return true;
}
- };
+ return false;
+ }
+ };
myTextField.setBorder(IdeBorderFactory.createEmptyBorder());
myProgressIcon.setOpaque(true);
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/VcsLogCreatePatchAction.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/VcsLogCreatePatchAction.java
index f0c4e837d1bc..d49e2bbbf45e 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/VcsLogCreatePatchAction.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/actions/VcsLogCreatePatchAction.java
@@ -27,5 +27,4 @@ public class VcsLogCreatePatchAction extends CreatePatchFromChangesAction {
Change[] changes;
e.getPresentation().setEnabled((changes = e.getData(VcsDataKeys.CHANGES)) != null && changes.length > 0);
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/FilterModel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/FilterModel.java
index 4d32ceaa6897..ed5b784897e2 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/FilterModel.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/FilterModel.java
@@ -55,5 +55,4 @@ class FilterModel {
void addSetFilterListener(@NotNull Runnable runnable) {
mySetFilterListeners.add(runnable);
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/MultilinePopupBuilder.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/MultilinePopupBuilder.java
index ea57622cb17c..728bd2fc9045 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/MultilinePopupBuilder.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/MultilinePopupBuilder.java
@@ -47,7 +47,7 @@ import java.util.Collection;
class MultilinePopupBuilder {
- private static final char[] SEPARATORS = { ',', '|', '\n' };
+ private static final char[] SEPARATORS = {',', '|', '\n'};
@NotNull private final EditorTextField myTextField;
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/MultipleValueFilterPopupComponent.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/MultipleValueFilterPopupComponent.java
index c8590170f70e..00de611c7551 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/MultipleValueFilterPopupComponent.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/MultipleValueFilterPopupComponent.java
@@ -15,7 +15,10 @@
*/
package com.intellij.vcs.log.ui.filter;
-import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.actionSystem.ActionGroup;
+import com.intellij.openapi.actionSystem.AnAction;
+import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.popup.JBPopup;
@@ -157,10 +160,10 @@ abstract class MultipleValueFilterPopupComponent ex
});
popup.showUnderneathOf(MultipleValueFilterPopupComponent.this);
}
+
@NotNull
private String getPopupText(@Nullable Collection selectedValues) {
return selectedValues == null || selectedValues.isEmpty() ? "" : StringUtil.join(selectedValues, "\n");
}
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/StructureFilterPopupComponent.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/StructureFilterPopupComponent.java
index 94a4e58a9b0d..7efdb6a6be55 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/StructureFilterPopupComponent.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/StructureFilterPopupComponent.java
@@ -92,7 +92,7 @@ class StructureFilterPopupComponent extends FilterPopupComponent(myLogDataManager.getRoots()), myStructureFilterModel.getFilter());
+ myBranchFilterModel
+ .onStructureFilterChanged(new HashSet(myLogDataManager.getRoots()), myStructureFilterModel.getFilter());
}
});
}
@@ -115,7 +119,7 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi {
}
@NotNull
- public JComponent createTextFilter() {
+ public SearchTextField createTextFilter() {
final SearchTextFieldWithStoredHistory textFilter = new SearchTextFieldWithStoredHistory(VCS_LOG_TEXT_FILTER_HISTORY) {
@Override
protected void onFieldCleared() {
@@ -141,6 +145,10 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi {
}
}
});
+ String shortcutText = KeymapUtil.getFirstKeyboardShortcutText(VcsLogActionPlaces.VCS_LOG_FOCUS_TEXT_FILTER);
+ if (!shortcutText.isEmpty()) {
+ textFilter.getTextEditor().setToolTipText("Use " + shortcutText + " to switch between text filter and commits list");
+ }
return textFilter;
}
@@ -187,8 +195,12 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi {
filtersFromText.second,
myDateFilterModel.getFilter(),
filtersFromText.first,
- myStructureFilterModel.getFilter() == null ? null : myStructureFilterModel.getFilter().getStructureFilter(),
- myStructureFilterModel.getFilter() == null ? null : myStructureFilterModel.getFilter().getRootFilter());
+ myStructureFilterModel.getFilter() == null
+ ? null
+ : myStructureFilterModel.getFilter().getStructureFilter(),
+ myStructureFilterModel.getFilter() == null
+ ? null
+ : myStructureFilterModel.getFilter().getRootFilter());
}
@NotNull
@@ -268,7 +280,8 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi {
public void onStructureFilterChanged(@NotNull Set roots, @Nullable VcsLogFileFilter filter) {
if (filter == null) {
myVisibleRoots = null;
- } else {
+ }
+ else {
myVisibleRoots = VcsLogUtil.getAllVisibleRoots(roots, filter.getRootFilter(), filter.getStructureFilter());
}
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogTextFilterImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogTextFilterImpl.java
index 80a0989c2c7f..bd3f93a72b34 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogTextFilterImpl.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsLogTextFilterImpl.java
@@ -16,8 +16,8 @@
package com.intellij.vcs.log.ui.filter;
import com.intellij.vcs.log.VcsCommitMetadata;
-import com.intellij.vcs.log.VcsLogTextFilter;
import com.intellij.vcs.log.VcsLogDetailsFilter;
+import com.intellij.vcs.log.VcsLogTextFilter;
import org.jetbrains.annotations.NotNull;
public class VcsLogTextFilterImpl implements VcsLogDetailsFilter, VcsLogTextFilter {
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsStructureChooser.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsStructureChooser.java
index 4d4a48ecbbba..43daaa3ded84 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsStructureChooser.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/VcsStructureChooser.java
@@ -27,7 +27,6 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.util.Computable;
-import com.intellij.openapi.util.Condition;
import com.intellij.openapi.vcs.FilePath;
import com.intellij.openapi.vcs.changes.ChangeListManager;
import com.intellij.openapi.vcs.changes.ui.VirtualFileListCellRenderer;
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/BranchesPanel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/BranchesPanel.java
index 75e33d95c226..19bebe9287a6 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/BranchesPanel.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/BranchesPanel.java
@@ -4,8 +4,10 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.components.JBScrollPane;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
-import com.intellij.vcs.log.*;
-import com.intellij.vcs.log.data.RefsModel;
+import com.intellij.vcs.log.RefGroup;
+import com.intellij.vcs.log.VcsLogFilterCollection;
+import com.intellij.vcs.log.VcsLogRefs;
+import com.intellij.vcs.log.VcsRef;
import com.intellij.vcs.log.data.VcsLogDataManager;
import com.intellij.vcs.log.data.VisiblePack;
import com.intellij.vcs.log.impl.SingletonRefGroup;
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/DetailsPanel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/DetailsPanel.java
index b2d76aa8d301..4f6facb7f54c 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/DetailsPanel.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/DetailsPanel.java
@@ -336,7 +336,7 @@ class DetailsPanel extends JPanel implements ListSelectionListener {
int[] means = new int[BRANCHES_TABLE_COLUMN_COUNT - 1];
int[] max = new int[BRANCHES_TABLE_COLUMN_COUNT - 1];
- for (int i = 0; i < rowCount; i++){
+ for (int i = 0; i < rowCount; i++) {
for (int j = 0; j < BRANCHES_TABLE_COLUMN_COUNT - 1; j++) {
int index = rowCount * j + i;
if (index < myBranches.size()) {
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java
index d4e7c5a607f9..38044fb66905 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java
@@ -16,10 +16,7 @@ import com.intellij.openapi.vcs.changes.committed.RepositoryChangesBrowser;
import com.intellij.openapi.vcs.changes.ui.ChangesBrowser;
import com.intellij.openapi.vcs.history.VcsRevisionNumber;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.ui.IdeBorderFactory;
-import com.intellij.ui.OnePixelSplitter;
-import com.intellij.ui.ScrollPaneFactory;
-import com.intellij.ui.SideBorder;
+import com.intellij.ui.*;
import com.intellij.ui.components.JBLoadingPanel;
import com.intellij.ui.components.panels.Wrapper;
import com.intellij.util.ArrayUtil;
@@ -58,7 +55,7 @@ import static com.intellij.util.containers.ContainerUtil.getFirstItem;
public class MainFrame extends JPanel implements DataProvider, Disposable {
@NotNull private final VcsLogDataManager myLogDataManager;
- @NotNull private final VcsLogUiImpl myUI;
+ @NotNull private final VcsLogUiImpl myUi;
@NotNull private final VcsLog myLog;
@NotNull private final VcsLogClassicFilterUi myFilterUi;
@@ -69,29 +66,31 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
@NotNull private final Splitter myDetailsSplitter;
@NotNull private final JComponent myToolbar;
@NotNull private final RepositoryChangesBrowser myChangesBrowser;
+ @NotNull private final Splitter myChangesBrowserSplitter;
+ @NotNull private final SearchTextField myTextFilter;
+
@NotNull private Runnable myTaskCompletedListener;
@NotNull private Runnable myFullDetailsLoadedListener;
@NotNull private Runnable myMiniDetailsLoadedListener;
- private Splitter myChangesBrowserSplitter;
public MainFrame(@NotNull VcsLogDataManager logDataManager,
- @NotNull VcsLogUiImpl vcsLogUI,
+ @NotNull VcsLogUiImpl ui,
@NotNull Project project,
@NotNull VcsLogUiProperties uiProperties,
@NotNull VcsLog log,
@NotNull VisiblePack initialDataPack) {
// collect info
myLogDataManager = logDataManager;
- myUI = vcsLogUI;
+ myUi = ui;
myLog = log;
- myFilterUi = new VcsLogClassicFilterUi(myUI, logDataManager, uiProperties, initialDataPack);
+ myFilterUi = new VcsLogClassicFilterUi(myUi, logDataManager, uiProperties, initialDataPack);
// initialize components
- myGraphTable = new VcsLogGraphTable(vcsLogUI, logDataManager, initialDataPack);
- myBranchesPanel = new BranchesPanel(logDataManager, vcsLogUI, initialDataPack.getRefs());
+ myGraphTable = new VcsLogGraphTable(ui, logDataManager, initialDataPack);
+ myBranchesPanel = new BranchesPanel(logDataManager, ui, initialDataPack.getRefs());
JComponent branchScrollPane = myBranchesPanel.createScrollPane();
branchScrollPane.setVisible(uiProperties.isShowBranchesPanel());
- myDetailsPanel = new DetailsPanel(logDataManager, myGraphTable, vcsLogUI.getColorManager(), initialDataPack);
+ myDetailsPanel = new DetailsPanel(logDataManager, myGraphTable, ui.getColorManager(), initialDataPack);
myChangesBrowser = new RepositoryChangesBrowser(project, null, Collections.emptyList(), null);
myChangesBrowser.getViewer().setScrollPaneBorder(IdeBorderFactory.createBorder(SideBorder.TOP));
@@ -106,7 +105,7 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
myGraphTable.getSelectionModel().addListSelectionListener(myDetailsPanel);
updateWhenDetailsAreLoaded();
- // layout
+ myTextFilter = myFilterUi.createTextFilter();
myToolbar = createActionsToolbar();
myDetailsSplitter = new OnePixelSplitter(true, 0.7f);
@@ -217,7 +216,7 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
mainGroup.add(toolbarGroup);
ActionToolbar toolbar = createActionsToolbar(mainGroup);
- Wrapper textFilter = new Wrapper(myFilterUi.createTextFilter());
+ Wrapper textFilter = new Wrapper(myTextFilter);
textFilter.setVerticalSizeReferent(toolbar.getComponent());
textFilter.setBorder(JBUI.Borders.emptyLeft(5));
@@ -261,7 +260,7 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
return myLog;
}
else if (VcsLogDataKeys.VCS_LOG_UI.is(dataId)) {
- return myUI;
+ return myUi;
}
else if (VcsLogDataKeys.VCS_LOG_DATA_PROVIDER.is(dataId)) {
return myLogDataManager;
@@ -321,6 +320,11 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
return myToolbar;
}
+ @NotNull
+ public SearchTextField getTextFilter() {
+ return myTextFilter;
+ }
+
public boolean areGraphActionsEnabled() {
return myGraphTable.getRowCount() > 0;
}
@@ -400,8 +404,7 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
@NotNull
@Override
protected List getOrderedComponents() {
- return Arrays.asList(myGraphTable, myChangesBrowser.getPreferredFocusedComponent());
+ return Arrays.asList(myGraphTable, myChangesBrowser.getPreferredFocusedComponent(), myTextFilter.getTextEditor());
}
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/ReferencePopupBuilder.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/ReferencePopupBuilder.java
index 5bcacc245df2..89f235940190 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/ReferencePopupBuilder.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/ReferencePopupBuilder.java
@@ -97,18 +97,18 @@ class ReferencePopupBuilder {
private JBPopup createPopup() {
return JBPopupFactory.getInstance()
.createComponentPopupBuilder(ListWithFilter.wrap(myList, ScrollPaneFactory.createScrollPane(myList), new Function() {
- @Override
- public String fun(VcsRef vcsRef) {
- return vcsRef.getName();
- }
- }), myList).
- setCancelOnClickOutside(true).
- setCancelOnWindowDeactivation(true).
- setFocusable(true).
- setRequestFocus(true).
- setResizable(true).
- setDimensionServiceKey(myUi.getProject(), "Vcs.Log.Branch.Panel.RefGroup.Popup", false).
- createPopup();
+ @Override
+ public String fun(VcsRef vcsRef) {
+ return vcsRef.getName();
+ }
+ }), myList).
+ setCancelOnClickOutside(true).
+ setCancelOnWindowDeactivation(true).
+ setFocusable(true).
+ setRequestFocus(true).
+ setResizable(true).
+ setDimensionServiceKey(myUi.getProject(), "Vcs.Log.Branch.Panel.RefGroup.Popup", false).
+ createPopup();
}
private static DefaultListModel createListModel(RefGroup group) {
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java
index 778fd6abd5ed..e3d806a9e047 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java
@@ -71,7 +71,9 @@ import java.awt.*;
import java.awt.datatransfer.StringSelection;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
-import java.util.*;
+import java.util.Collection;
+import java.util.Date;
+import java.util.EventObject;
import java.util.List;
public class VcsLogGraphTable extends JBTable implements DataProvider, CopyProvider {
@@ -569,7 +571,6 @@ public class VcsLogGraphTable extends JBTable implements DataProvider, CopyProvi
}
return Pair.create(rowsToSelect, rowToScroll);
}
-
}
private class MyMouseAdapter extends MouseAdapter {
@@ -634,7 +635,6 @@ public class VcsLogGraphTable extends JBTable implements DataProvider, CopyProvi
public void mouseExited(MouseEvent e) {
// Do nothing
}
-
}
@NotNull
@@ -751,7 +751,6 @@ public class VcsLogGraphTable extends JBTable implements DataProvider, CopyProvi
append(value.toString(), applyHighlighters(this, row, column, value.toString(), hasFocus, selected));
setBorder(null);
}
-
}
private class MyDummyTableCellEditor implements TableCellEditor {
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/GraphCommitCell.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/GraphCommitCell.java
index 2a9f49390906..8e08e4ddc492 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/GraphCommitCell.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/GraphCommitCell.java
@@ -24,5 +24,4 @@ public class GraphCommitCell {
public Collection getRefsToThisCommit() {
return myRefsToThisCommit;
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/GraphTableModel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/GraphTableModel.java
index a8afdde01995..f8cc0da0b4c6 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/GraphTableModel.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/GraphTableModel.java
@@ -1,22 +1,16 @@
package com.intellij.vcs.log.ui.tables;
-import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.EmptyRunnable;
-import com.intellij.openapi.util.Pair;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.NotNullFunction;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.text.DateFormatUtil;
import com.intellij.vcs.log.*;
import com.intellij.vcs.log.data.CommitIdByStringCondition;
-import com.intellij.vcs.log.Hash;
-import com.intellij.vcs.log.VcsFullCommitDetails;
-import com.intellij.vcs.log.VcsRef;
-import com.intellij.vcs.log.VcsShortCommitDetails;
+import com.intellij.vcs.log.data.DataGetter;
import com.intellij.vcs.log.data.VcsLogDataManager;
import com.intellij.vcs.log.data.VisiblePack;
-import com.intellij.vcs.log.data.*;
import com.intellij.vcs.log.impl.VcsLogUtil;
import com.intellij.vcs.log.ui.VcsLogUiImpl;
import com.intellij.vcs.log.ui.render.GraphCommitCell;
@@ -78,7 +72,7 @@ public class GraphTableModel extends AbstractTableModel {
return myDataPack.getVisibleGraph().getRowInfo(row).getCommit();
}
- @NotNull
+ @Nullable
public CommitId getCommitIdAtRow(int row) {
return myLogDataManager.getCommitId(getIdAtRow(row));
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/util/SequentialLimitedLifoExecutor.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/util/SequentialLimitedLifoExecutor.java
index d0eeea575980..f483892c0a2a 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/util/SequentialLimitedLifoExecutor.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/util/SequentialLimitedLifoExecutor.java
@@ -64,5 +64,4 @@ public class SequentialLimitedLifoExecutor implements Disposable {
}
}
}
-
}
diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/util/StopWatch.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/util/StopWatch.java
index c90e2cc66125..ff55bda9a5bc 100644
--- a/platform/vcs-log/impl/src/com/intellij/vcs/log/util/StopWatch.java
+++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/util/StopWatch.java
@@ -62,13 +62,12 @@ public class StopWatch {
String message = myOperation + " took " + (System.currentTimeMillis() - myStartTime) + " ms";
if (myDurationPerRoot.size() > 1) {
message += "\n" + StringUtil.join(myDurationPerRoot.entrySet(), new Function, String>() {
- @Override
- public String fun(Map.Entry entry) {
- return " " + entry.getKey().getName() + ": " + entry.getValue() + " ms";
- }
- }, "\n");
+ @Override
+ public String fun(Map.Entry entry) {
+ return " " + entry.getKey().getName() + ": " + entry.getValue() + " ms";
+ }
+ }, "\n");
}
LOG.debug(message);
}
-
}
diff --git a/platform/vcs-log/impl/test/com/intellij/vcs/log/data/VcsLogRefresherTest.java b/platform/vcs-log/impl/test/com/intellij/vcs/log/data/VcsLogRefresherTest.java
index 031479719a01..5f1928521ba4 100644
--- a/platform/vcs-log/impl/test/com/intellij/vcs/log/data/VcsLogRefresherTest.java
+++ b/platform/vcs-log/impl/test/com/intellij/vcs/log/data/VcsLogRefresherTest.java
@@ -201,7 +201,12 @@ public class VcsLogRefresherTest extends VcsLogPlatformTest {
}
private VcsLogRefresherImpl createLoader(Consumer dataPackConsumer) {
- myDataManager = new VcsLogDataManager(myProject, myLogProviders);
+ myDataManager = new VcsLogDataManager(myProject, myLogProviders, new Consumer() {
+ @Override
+ public void consume(Exception e) {
+ LOG.error(e);
+ }
+ });
Disposer.register(myProject, myDataManager);
return new VcsLogRefresherImpl(myProject, myDataManager.getHashMap(), myLogProviders, myDataManager.getUserRegistry(),
myTopDetailsCache, dataPackConsumer, FAILING_EXCEPTION_HANDLER, RECENT_COMMITS_COUNT) {
diff --git a/platform/vcs-log/impl/test/com/intellij/vcs/log/data/VisiblePackBuilderTest.kt b/platform/vcs-log/impl/test/com/intellij/vcs/log/data/VisiblePackBuilderTest.kt
index d1914114063b..80668da1ffc3 100644
--- a/platform/vcs-log/impl/test/com/intellij/vcs/log/data/VisiblePackBuilderTest.kt
+++ b/platform/vcs-log/impl/test/com/intellij/vcs/log/data/VisiblePackBuilderTest.kt
@@ -117,7 +117,7 @@ class VisiblePackBuilderTest {
assertDoesNotContain(visibleGraph, 1)
}
- private fun GraphCommit.toVcsCommit(map: VcsLogHashMap) = TimedVcsCommitImpl(map.getCommitId(this.id).hash, map.getHashes(this.parents), 1)
+ private fun GraphCommit.toVcsCommit(map: VcsLogHashMap) = TimedVcsCommitImpl(map.getCommitId(this.id)!!.hash, map.getHashes(this.parents), 1)
fun assertDoesNotContain(graph: VisibleGraph, id: Int) {
assertTrue(null == (1..graph.visibleCommitCount).firstOrNull { graph.getRowInfo(it - 1).commit == id })
@@ -135,12 +135,12 @@ class VisiblePackBuilderTest {
fun build(filters: VcsLogFilterCollection): VisiblePack {
val refs = refs.mapTo(HashSet(), {
- VcsRefImpl(hashMap.getCommitId(it.commit).hash, it.name, BRANCH_TYPE, root)
+ VcsRefImpl(hashMap.getCommitId(it.commit)!!.hash, it.name, BRANCH_TYPE, root)
})
val dataPack = DataPack.build(commits, mapOf(root to refs), providers, hashMap, true)
val detailsCache = data.entries.map {
- val hash = hashMap.getCommitId(it.key.id).hash
+ val hash = hashMap.getCommitId(it.key.id)!!.hash
val metadata = if (it.value.user == null)
null
else VcsCommitMetadataImpl(hash, hashMap.getHashes(it.key.parents), 1L, root, it.value.subject,
@@ -175,7 +175,7 @@ class VisiblePackBuilderTest {
}
- fun VcsLogHashMap.getHashes(ids: List) = ids.map { getCommitId(it).hash }
+ fun VcsLogHashMap.getHashes(ids: List) = ids.map { getCommitId(it)!!.hash }
fun noFilters(): VcsLogFilterCollection = VcsLogFilterCollectionImpl(null, null, null, null, null, null, null)
diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/XDebugProcess.java b/platform/xdebugger-api/src/com/intellij/xdebugger/XDebugProcess.java
index e1aa69cc08cc..0bd309f8b87c 100644
--- a/platform/xdebugger-api/src/com/intellij/xdebugger/XDebugProcess.java
+++ b/platform/xdebugger-api/src/com/intellij/xdebugger/XDebugProcess.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2015 JetBrains s.r.o.
+ * Copyright 2000-2016 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.
@@ -24,6 +24,7 @@ import com.intellij.xdebugger.breakpoints.XBreakpointHandler;
import com.intellij.xdebugger.evaluation.XDebuggerEditorsProvider;
import com.intellij.xdebugger.evaluation.XDebuggerEvaluator;
import com.intellij.xdebugger.frame.XStackFrame;
+import com.intellij.xdebugger.frame.XSuspendContext;
import com.intellij.xdebugger.frame.XValueMarkerProvider;
import com.intellij.xdebugger.stepping.XSmartStepIntoHandler;
import com.intellij.xdebugger.ui.XDebugTabLayouter;
@@ -92,7 +93,13 @@ public abstract class XDebugProcess {
* when next line in current method/function is reached.
* Do not call this method directly. Use {@link XDebugSession#stepOver} instead
*/
- public abstract void startStepOver();
+ public void startStepOver() {
+ throw new AbstractMethodError();
+ }
+
+ public void startStepOver(@Nullable XSuspendContext context) {
+ startStepOver();
+ }
/**
* Steps into suppressed call
@@ -104,19 +111,36 @@ public abstract class XDebugProcess {
public void startForceStepInto(){
startStepInto();
}
+
+ public void startForceStepInto(@Nullable XSuspendContext context) {
+ startForceStepInto();
+ }
+
/**
* Resume execution and call {@link XDebugSession#positionReached}
* when next line is reached.
* Do not call this method directly. Use {@link XDebugSession#stepInto} instead
*/
- public abstract void startStepInto();
+ public void startStepInto() {
+ throw new AbstractMethodError();
+ }
+
+ public void startStepInto(@Nullable XSuspendContext context) {
+ startStepInto();
+ }
/**
* Resume execution and call {@link XDebugSession#positionReached}
* after returning from current method/function.
* Do not call this method directly. Use {@link XDebugSession#stepOut} instead
*/
- public abstract void startStepOut();
+ public void startStepOut() {
+ throw new AbstractMethodError();
+ }
+
+ public void startStepOut(@Nullable XSuspendContext context) {
+ startStepOut();
+ }
/**
* Implement {@link com.intellij.xdebugger.stepping.XSmartStepIntoHandler} and return its instance from this method to enable Smart Step Into action
@@ -145,7 +169,13 @@ public abstract class XDebugProcess {
* Resume execution.
* Do not call this method directly. Use {@link XDebugSession#resume} instead
*/
- public abstract void resume();
+ public void resume() {
+ throw new AbstractMethodError();
+ }
+
+ public void resume(@Nullable XSuspendContext context) {
+ resume();
+ }
/**
* Resume execution and call {@link XDebugSession#positionReached(com.intellij.xdebugger.frame.XSuspendContext)}
@@ -153,7 +183,13 @@ public abstract class XDebugProcess {
* Do not call this method directly. Use {@link XDebugSession#runToPosition} instead
* @param position position in source code
*/
- public abstract void runToPosition(@NotNull XSourcePosition position);
+ public void runToPosition(@NotNull XSourcePosition position) {
+ throw new AbstractMethodError();
+ }
+
+ public void runToPosition(@NotNull XSourcePosition position, @Nullable XSuspendContext context) {
+ runToPosition(position);
+ }
/**
* Check is it is possible to perform commands such as resume, step etc. And notify user if necessary
diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/stepping/XSmartStepIntoHandler.java b/platform/xdebugger-api/src/com/intellij/xdebugger/stepping/XSmartStepIntoHandler.java
index 56b098de99f0..f0643b776c3f 100644
--- a/platform/xdebugger-api/src/com/intellij/xdebugger/stepping/XSmartStepIntoHandler.java
+++ b/platform/xdebugger-api/src/com/intellij/xdebugger/stepping/XSmartStepIntoHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2016 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.
@@ -16,7 +16,9 @@
package com.intellij.xdebugger.stepping;
import com.intellij.xdebugger.XSourcePosition;
+import com.intellij.xdebugger.frame.XSuspendContext;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import java.util.List;
@@ -40,7 +42,13 @@ public abstract class XSmartStepIntoHandlervariant function/method is reached
* @param variant selected variant
*/
- public abstract void startStepInto(@NotNull Variant variant);
+ public void startStepInto(@NotNull Variant variant) {
+ throw new AbstractMethodError();
+ }
+
+ public void startStepInto(@NotNull Variant variant, @Nullable XSuspendContext context) {
+ startStepInto(variant);
+ }
/**
* @return title for popup which will be shown to select method/function
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java
index 0500a4400f83..33fd6d1ddb37 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java
@@ -476,24 +476,21 @@ public class XDebugSessionImpl implements XDebugSession {
if (ignoreBreakpoints) {
disableBreakpoints();
}
- doResume();
- myDebugProcess.startStepOver();
+ myDebugProcess.startStepOver(doResume());
}
@Override
public void stepInto() {
if (!myDebugProcess.checkCanPerformCommands()) return;
- doResume();
- myDebugProcess.startStepInto();
+ myDebugProcess.startStepInto(doResume());
}
@Override
public void stepOut() {
if (!myDebugProcess.checkCanPerformCommands()) return;
- doResume();
- myDebugProcess.startStepOut();
+ myDebugProcess.startStepOut(doResume());
}
@Override
@@ -508,8 +505,7 @@ public class XDebugSessionImpl implements XDebugSession {
public void forceStepInto() {
if (!myDebugProcess.checkCanPerformCommands()) return;
- doResume();
- myDebugProcess.startForceStepInto();
+ myDebugProcess.startForceStepInto(doResume());
}
@Override
@@ -519,8 +515,7 @@ public class XDebugSessionImpl implements XDebugSession {
if (ignoreBreakpoints) {
disableBreakpoints();
}
- doResume();
- myDebugProcess.runToPosition(position);
+ myDebugProcess.runToPosition(position, doResume());
}
@Override
@@ -545,14 +540,17 @@ public class XDebugSessionImpl implements XDebugSession {
public void resume() {
if (!myDebugProcess.checkCanPerformCommands()) return;
- doResume();
- myDebugProcess.resume();
+ myDebugProcess.resume(doResume());
}
- public void doResume() {
- if (!myPaused.getAndSet(false)) return;
+ @Nullable
+ private XSuspendContext doResume() {
+ if (!myPaused.getAndSet(false)) {
+ return null;
+ }
myDispatcher.getMulticaster().beforeSessionResume();
+ XSuspendContext context = mySuspendContext;
mySuspendContext = null;
myCurrentExecutionStack = null;
myCurrentStackFrame = null;
@@ -565,6 +563,7 @@ public class XDebugSessionImpl implements XDebugSession {
}
});
myDispatcher.getMulticaster().sessionResumed();
+ return context;
}
@Override
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/NullArgumentToVariableArgMethodInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/NullArgumentToVariableArgMethodInspection.java
index 22b7f87f6673..fed0b16e503a 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/NullArgumentToVariableArgMethodInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/NullArgumentToVariableArgMethodInspection.java
@@ -121,7 +121,7 @@ public class NullArgumentToVariableArgMethodInspection extends BaseInspection {
final PsiEllipsisType ellipsisType = (PsiEllipsisType)type1;
final PsiType arrayType = ellipsisType.toArrayType();
if (checkArray) {
- if (arrayType.equals(type) || !arrayType.isAssignableFrom(type)) {
+ if (type.isAssignableFrom(arrayType) || !arrayType.isAssignableFrom(type)) {
return;
}
}
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/visibility/InnerClassVariableHidesOuterClassVariableInspectionBase.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/visibility/InnerClassVariableHidesOuterClassVariableInspectionBase.java
index d9329a0a1b79..f1ee4bd802a0 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/visibility/InnerClassVariableHidesOuterClassVariableInspectionBase.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/visibility/InnerClassVariableHidesOuterClassVariableInspectionBase.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2007 Dave Griffith, Bas Leijdekkers
+ * Copyright 2003-2016 Dave Griffith, Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -28,8 +28,7 @@ import org.jetbrains.annotations.NotNull;
import javax.swing.*;
-public class InnerClassVariableHidesOuterClassVariableInspectionBase
- extends BaseInspection {
+public class InnerClassVariableHidesOuterClassVariableInspectionBase extends BaseInspection {
/**
* @noinspection PublicField
@@ -73,8 +72,7 @@ public class InnerClassVariableHidesOuterClassVariableInspectionBase
return new InnerClassVariableHidesOuterClassVariableVisitor();
}
- private class InnerClassVariableHidesOuterClassVariableVisitor
- extends BaseInspectionVisitor {
+ private class InnerClassVariableHidesOuterClassVariableVisitor extends BaseInspectionVisitor {
@Override
public void visitField(@NotNull PsiField field) {
@@ -86,22 +84,18 @@ public class InnerClassVariableHidesOuterClassVariableInspectionBase
if (HardcodedMethodConstants.SERIAL_VERSION_UID.equals(fieldName)) {
return; //special case
}
- boolean reportStaticsOnly = false;
- if (aClass.hasModifierProperty(PsiModifier.STATIC)) {
- reportStaticsOnly = true;
- }
- PsiClass ancestorClass =
- ClassUtils.getContainingClass(aClass);
+ boolean reportStaticsOnly = aClass.hasModifierProperty(PsiModifier.STATIC);
+ PsiClass ancestorClass = ClassUtils.getContainingClass(aClass);
while (ancestorClass != null) {
- final PsiField ancestorField =
- ancestorClass.findFieldByName(fieldName, false);
+ final PsiField ancestorField = ancestorClass.findFieldByName(fieldName, false);
if (ancestorField != null) {
- if (!m_ignoreInvisibleFields ||
- !reportStaticsOnly ||
- field.hasModifierProperty(PsiModifier.STATIC)) {
+ if (!m_ignoreInvisibleFields || !reportStaticsOnly || ancestorField.hasModifierProperty(PsiModifier.STATIC)) {
registerFieldError(field);
}
}
+ if (ancestorClass.hasModifierProperty(PsiModifier.STATIC)) {
+ reportStaticsOnly = true;
+ }
ancestorClass = ClassUtils.getContainingClass(ancestorClass);
}
}
diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/MethodCallInLoopCondition.html b/plugins/InspectionGadgets/src/inspectionDescriptions/MethodCallInLoopCondition.html
index ce1409fc4026..557814dfd46b 100644
--- a/plugins/InspectionGadgets/src/inspectionDescriptions/MethodCallInLoopCondition.html
+++ b/plugins/InspectionGadgets/src/inspectionDescriptions/MethodCallInLoopCondition.html
@@ -5,9 +5,11 @@ Applying the results of this inspection without consideration might have negativ
Reports method calls in the condition part of a
loop statement. In highly resource constrained environments, such calls may
-have adverse performance implications
+have adverse performance implications.
+Use the checkbox below to ignore method calls to common java iteration methods like Iterator.hasNext().
+