diff --git a/.idea/libraries/batik.xml b/.idea/libraries/batik.xml
index f07ae3953e93..1ff43d3d695c 100644
--- a/.idea/libraries/batik.xml
+++ b/.idea/libraries/batik.xml
@@ -3,7 +3,7 @@
-
+
diff --git a/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/GoToClassFocusTest.kt b/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/GoToClassFocusTest.kt
index 6bc6149aaff1..62b4b57eae7a 100644
--- a/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/GoToClassFocusTest.kt
+++ b/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/GoToClassFocusTest.kt
@@ -86,7 +86,7 @@ class GoToClassFocusTest : GuiTestCase() {
}
with(guiTestCase) {
val textfield = textfield("", searchWindow, guiTestCase.defaultTimeout)
- Assert.assertEquals(textfield.target().text, typedString)
+ Assert.assertEquals(typedString, textfield.target().text)
}
}
diff --git a/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/GoToClassTwiceFocusTest.kt b/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/GoToClassTwiceFocusTest.kt
index dc9530492d32..627a1d220a5b 100644
--- a/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/GoToClassTwiceFocusTest.kt
+++ b/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/GoToClassTwiceFocusTest.kt
@@ -91,7 +91,7 @@ class GoToClassTwiceFocusTest : GuiTestCase() {
}
with(guiTestCase) {
val textfield = textfield("", searchWindow, guiTestCase.defaultTimeout)
- Assert.assertEquals(textfield.target().text, typedString)
+ Assert.assertEquals(typedString, textfield.target().text)
}
}
diff --git a/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/KeyMapSettingsTestFocusTest.kt b/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/KeyMapSettingsTestFocusTest.kt
index b694b165d5fa..2feed1f85a72 100644
--- a/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/KeyMapSettingsTestFocusTest.kt
+++ b/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/KeyMapSettingsTestFocusTest.kt
@@ -19,7 +19,7 @@ import java.awt.Container
class KeyMapSettingsTestFocusTest : GuiTestCase() {
@Test
- fun testInlineVariableFocus() {
+ fun testKeyMapSettingsTestFocus() {
CommunityProjectCreator.createCommandLineProject()
Pause.pause(1000)
ideFrame {
diff --git a/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/SearchEverywhereFocusTest.kt b/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/SearchEverywhereFocusTest.kt
index 5db741b8b614..10434c9327a5 100644
--- a/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/SearchEverywhereFocusTest.kt
+++ b/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/SearchEverywhereFocusTest.kt
@@ -23,7 +23,7 @@ class SearchEverywhereFocusTest : GuiTestCase() {
private val searchWindowLabelText = "Search Everywhere:"
@Test
- fun testGoToClassFocus() {
+ fun testSearchEverywhereFocus() {
CommunityProjectCreator.createCommandLineProject()
Pause.pause(1000)
ideFrame {
@@ -55,7 +55,7 @@ class SearchEverywhereFocusTest : GuiTestCase() {
private fun GuiTestCase.checkTextInSearchWindow(searchWindow: Container, expectedText: String) {
with(this) {
val textfield = textfield("", searchWindow, this.defaultTimeout)
- Assert.assertEquals(textfield.target().text, expectedText)
+ Assert.assertEquals(expectedText, textfield.target().text)
}
}
diff --git a/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/TypeAheadTest.kt b/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/TypeAheadTest.kt
index 64de40220533..fd9e02d8403d 100644
--- a/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/TypeAheadTest.kt
+++ b/community-guitests/testSrc/com/intellij/testGuiFramework/tests/community/focus/TypeAheadTest.kt
@@ -14,7 +14,7 @@ import org.junit.Test
class TypeAheadTest : GuiTestCase() {
@Test
- fun testProjectCreate() {
+ fun testTypeAhead() {
CommunityProjectCreator.createCommandLineProject("type-ahead-problem")
ideFrame {
waitForBackgroundTasksToFinish()
diff --git a/java/execution/impl/src/com/intellij/execution/testDiscovery/actions/ShowDiscoveredTestsAction.java b/java/execution/impl/src/com/intellij/execution/testDiscovery/actions/ShowDiscoveredTestsAction.java
index 81549e9f4c29..a2900ea22af9 100644
--- a/java/execution/impl/src/com/intellij/execution/testDiscovery/actions/ShowDiscoveredTestsAction.java
+++ b/java/execution/impl/src/com/intellij/execution/testDiscovery/actions/ShowDiscoveredTestsAction.java
@@ -1,6 +1,7 @@
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.execution.testDiscovery.actions;
+import com.intellij.codeInsight.actions.FormatChangedTextUtil;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.Executor;
import com.intellij.execution.JavaTestConfigurationBase;
@@ -17,12 +18,15 @@ import com.intellij.find.FindUtil;
import com.intellij.find.actions.CompositeActiveComponent;
import com.intellij.icons.AllIcons;
import com.intellij.ide.DataManager;
+import com.intellij.lang.Language;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.actionSystem.impl.ActionButton;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ReadAction;
+import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
+import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.keymap.KeymapUtil;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
@@ -32,10 +36,14 @@ import com.intellij.openapi.util.Couple;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.registry.Registry;
+import com.intellij.openapi.vcs.VcsDataKeys;
+import com.intellij.openapi.vcs.changes.Change;
import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.util.ClassUtil;
import com.intellij.psi.util.PsiTreeUtil;
+import com.intellij.psi.util.PsiUtilCore;
+import com.intellij.uast.UastMetaLanguage;
import com.intellij.ui.ActiveComponent;
import com.intellij.usages.UsageView;
import com.intellij.util.ArrayUtil;
@@ -47,14 +55,18 @@ import com.intellij.util.ui.tree.TreeModelAdapter;
import one.util.streamex.StreamEx;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.uast.UFile;
import org.jetbrains.uast.UMethod;
import org.jetbrains.uast.UastContextKt;
+import org.jetbrains.uast.visitor.AbstractUastVisitor;
import javax.swing.*;
import javax.swing.event.TreeModelEvent;
import javax.swing.tree.TreeModel;
import java.awt.event.ActionEvent;
+import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
import java.util.stream.Collectors;
import static com.intellij.openapi.actionSystem.CommonDataKeys.EDITOR;
@@ -65,7 +77,10 @@ public class ShowDiscoveredTestsAction extends AnAction {
@Override
public void update(AnActionEvent e) {
- e.getPresentation().setEnabledAndVisible(isEnabledForProject(e) && findMethodAtCaret(e) != null);
+ e.getPresentation().setEnabledAndVisible(
+ isEnabledForProject(e) &&
+ (findMethodAtCaret(e) != null || e.getData(VcsDataKeys.CHANGES) != null)
+ );
}
@Override
@@ -74,8 +89,16 @@ public class ShowDiscoveredTestsAction extends AnAction {
assert project != null;
PsiMethod method = findMethodAtCaret(e);
- assert method != null;
+ if (method != null) {
+ showDiscoveredTestsByPsi(e, project, method);
+ }
+ else {
+ showDiscoveredTestsByChanges(e);
+ }
+ }
+
+ private static void showDiscoveredTestsByPsi(AnActionEvent e, Project project, PsiMethod method) {
Couple couple = getMethodQualifiedName(method);
PsiClass c = method.getContainingClass();
String fqn = couple != null ? couple.first : null;
@@ -88,6 +111,44 @@ public class ShowDiscoveredTestsAction extends AnAction {
showDiscoveredTests(project, dataContext, methodPresentationName, method);
}
+ private static void showDiscoveredTestsByChanges(AnActionEvent e) {
+ Change[] changes = e.getRequiredData(VcsDataKeys.CHANGES);
+ Project project = e.getProject();
+ assert project != null;
+ UastMetaLanguage jvmLanguage = Language.findInstance(UastMetaLanguage.class);
+
+ List methods = FormatChangedTextUtil.getInstance().getChangedElements(project, changes, file -> {
+ PsiFile psiFile = PsiUtilCore.getPsiFile(project, file);
+ if (!jvmLanguage.matchesLanguage(psiFile.getLanguage())) {
+ return null;
+ }
+ Document document = FileDocumentManager.getInstance().getDocument(file);
+ if (document == null) return null;
+ UFile uFile = UastContextKt.toUElement(psiFile, UFile.class);
+ if (uFile == null) return null;
+
+ PsiDocumentManager.getInstance(project).commitDocument(document);
+ List physicalMethods = new ArrayList<>();
+ uFile.accept(new AbstractUastVisitor() {
+ @Override
+ public boolean visitMethod(@NotNull UMethod node) {
+ physicalMethods.add(node.getSourcePsi());
+ return true;
+ }
+ });
+
+ return physicalMethods;
+ });
+
+ PsiMethod[] asJavaMethods = methods
+ .stream()
+ .map(m -> ObjectUtils.tryCast(Objects.requireNonNull(UastContextKt.toUElement(m)).getJavaPsi(), PsiMethod.class))
+ .filter(Objects::nonNull)
+ .toArray(PsiMethod.ARRAY_FACTORY::create);
+ FeatureUsageTracker.getInstance().triggerFeatureUsed("test.discovery.selected.changes");
+ showDiscoveredTests(project, e.getDataContext(), "Selected Changes", asJavaMethods);
+ }
+
static boolean isEnabledForProject(AnActionEvent e) {
return (Registry.is(TestDiscoveryExtension.TEST_DISCOVERY_REGISTRY_KEY) || ApplicationManager.getApplication().isInternal()) && e.getProject() != null;
}
diff --git a/java/execution/impl/src/com/intellij/execution/testDiscovery/actions/ShowDiscoveredTestsFromChangesAction.java b/java/execution/impl/src/com/intellij/execution/testDiscovery/actions/ShowDiscoveredTestsFromChangesAction.java
deleted file mode 100644
index dc4de79ebedc..000000000000
--- a/java/execution/impl/src/com/intellij/execution/testDiscovery/actions/ShowDiscoveredTestsFromChangesAction.java
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package com.intellij.execution.testDiscovery.actions;
-
-import com.intellij.codeInsight.actions.FormatChangedTextUtil;
-import com.intellij.featureStatistics.FeatureUsageTracker;
-import com.intellij.lang.Language;
-import com.intellij.openapi.actionSystem.AnAction;
-import com.intellij.openapi.actionSystem.AnActionEvent;
-import com.intellij.openapi.editor.Document;
-import com.intellij.openapi.fileEditor.FileDocumentManager;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.vcs.VcsDataKeys;
-import com.intellij.openapi.vcs.changes.Change;
-import com.intellij.psi.PsiDocumentManager;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiFile;
-import com.intellij.psi.PsiMethod;
-import com.intellij.psi.util.PsiUtilCore;
-import com.intellij.uast.UastMetaLanguage;
-import com.intellij.util.ObjectUtils;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.uast.UFile;
-import org.jetbrains.uast.UMethod;
-import org.jetbrains.uast.UastContextKt;
-import org.jetbrains.uast.visitor.AbstractUastVisitor;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-public class ShowDiscoveredTestsFromChangesAction extends AnAction {
- @Override
- public void update(AnActionEvent e) {
- e.getPresentation().setEnabledAndVisible(ShowDiscoveredTestsAction.isEnabledForProject(e) && e.getData(VcsDataKeys.CHANGES) != null);
- }
-
- @Override
- public void actionPerformed(AnActionEvent e) {
- Change[] changes = e.getRequiredData(VcsDataKeys.CHANGES);
- Project project = e.getProject();
- assert project != null;
- UastMetaLanguage jvmLanguage = Language.findInstance(UastMetaLanguage.class);
-
-
- List methods = FormatChangedTextUtil.getInstance().getChangedElements(project, changes, file -> {
- PsiFile psiFile = PsiUtilCore.getPsiFile(project, file);
- if (!jvmLanguage.matchesLanguage(psiFile.getLanguage())) {
- return null;
- }
- Document document = FileDocumentManager.getInstance().getDocument(file);
- if (document == null) return null;
- UFile uFile = UastContextKt.toUElement(psiFile, UFile.class);
- if (uFile == null) return null;
-
-
- PsiDocumentManager.getInstance(project).commitDocument(document);
- List physicalMethods = new ArrayList<>();
- uFile.accept(new AbstractUastVisitor() {
- @Override
- public boolean visitMethod(@NotNull UMethod node) {
- physicalMethods.add(node.getSourcePsi());
- return true;
- }
- });
-
- return physicalMethods;
- });
-
- PsiMethod[] asJavaMethods = methods
- .stream()
- .map(m -> ObjectUtils.tryCast(Objects.requireNonNull(UastContextKt.toUElement(m)).getJavaPsi(), PsiMethod.class))
- .filter(Objects::nonNull)
- .toArray(PsiMethod.ARRAY_FACTORY::create);
- FeatureUsageTracker.getInstance().triggerFeatureUsed("test.discovery.selected.changes");
- ShowDiscoveredTestsAction.showDiscoveredTests(project, e.getDataContext(), "Selected Changes", asJavaMethods);
- }
-}
diff --git a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaCompletionContributor.java b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaCompletionContributor.java
index ec9d1448b800..bb8d2ef82105 100644
--- a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaCompletionContributor.java
+++ b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaCompletionContributor.java
@@ -7,7 +7,9 @@ import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.ide.DataManager;
import com.intellij.internal.statistic.UsageTrigger;
+import com.intellij.json.psi.JsonProperty;
import com.intellij.json.psi.JsonStringLiteral;
+import com.intellij.json.psi.JsonValue;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.Editor;
@@ -20,7 +22,9 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
+import com.intellij.psi.TokenType;
import com.intellij.psi.codeStyle.CodeStyleManager;
+import com.intellij.psi.impl.source.tree.LeafPsiElement;
import com.intellij.psi.util.PsiUtilCore;
import com.intellij.util.Consumer;
import com.intellij.util.ObjectUtils;
@@ -322,13 +326,14 @@ public class JsonSchemaCompletionContributor extends CompletionContributor {
};
}
- private boolean handleInsideQuotesInsertion(InsertionContext context, Editor editor, boolean hasValue) {
+ private boolean handleInsideQuotesInsertion(@NotNull InsertionContext context, @NotNull Editor editor, boolean hasValue) {
if (myInsideStringLiteral) {
int offset = editor.getCaretModel().getOffset();
PsiElement element = context.getFile().findElementAt(offset);
int tailOffset = context.getTailOffset();
int guessEndOffset = tailOffset + 1;
- if (element != null) {
+ if (element instanceof LeafPsiElement) {
+ if (handleIncompleteString(editor, element)) return false;
int endOffset = element.getTextRange().getEndOffset();
if (endOffset > tailOffset) {
context.getDocument().deleteString(tailOffset, endOffset - 1);
@@ -342,6 +347,21 @@ public class JsonSchemaCompletionContributor extends CompletionContributor {
return false;
}
+ private static boolean handleIncompleteString(@NotNull Editor editor, @NotNull PsiElement element) {
+ if (((LeafPsiElement)element).getElementType() == TokenType.WHITE_SPACE) {
+ PsiElement prevSibling = element.getPrevSibling();
+ if (prevSibling instanceof JsonProperty) {
+ JsonValue nameElement = ((JsonProperty)prevSibling).getNameElement();
+ if (!nameElement.getText().endsWith("\"")) {
+ editor.getCaretModel().moveToOffset(nameElement.getTextRange().getEndOffset());
+ EditorModificationUtil.insertStringAtCaret(editor, "\"", false, true, 1);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
@Nullable
private static JsonSchemaType detectType(List