diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/CaptureConfigurable.java b/java/debugger/impl/src/com/intellij/debugger/settings/CaptureConfigurable.java index 771900896656..3b4247ccbf3e 100644 --- a/java/debugger/impl/src/com/intellij/debugger/settings/CaptureConfigurable.java +++ b/java/debugger/impl/src/com/intellij/debugger/settings/CaptureConfigurable.java @@ -15,6 +15,7 @@ */ package com.intellij.debugger.settings; +import com.intellij.debugger.DebuggerBundle; import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.diagnostic.Logger; @@ -204,7 +205,7 @@ public class CaptureConfigurable implements SearchableConfigurable { public static final int INSERT_KEY_EXPR = 6; static final String[] COLUMN_NAMES = - new String[]{"", "Class name", "Method name", "Key expression", "Insert class name", "Insert method name", "Insert key expression"}; + new String[]{"", "Capture class name", "Capture method name", "Capture key expression", "Insert class name", "Insert method name", "Insert key expression"}; List myCapturePoints = DebuggerSettings.getInstance().cloneCapturePoints(); public String getColumnName(int column) { @@ -319,7 +320,7 @@ public class CaptureConfigurable implements SearchableConfigurable { @Nls @Override public String getDisplayName() { - return "Capture"; + return DebuggerBundle.message("async.stacktraces.configurable.display.name"); } @Nullable diff --git a/json/src/com/jetbrains/jsonSchema/impl/JsonOriginalPsiWalker.java b/json/src/com/jetbrains/jsonSchema/impl/JsonOriginalPsiWalker.java index 139c25b802e0..ece32b536416 100644 --- a/json/src/com/jetbrains/jsonSchema/impl/JsonOriginalPsiWalker.java +++ b/json/src/com/jetbrains/jsonSchema/impl/JsonOriginalPsiWalker.java @@ -137,7 +137,7 @@ public class JsonOriginalPsiWalker implements JsonLikePsiWalker { final JsonObject object = PsiTreeUtil.getParentOfType(element, JsonObject.class); if (object != null) { return object.getPropertyList().stream() - .filter(p -> StringUtil.isQuotedString(p.getName())) + .filter(p -> p.getNameElement() instanceof JsonStringLiteral) .map(p -> StringUtil.unquoteString(p.getName())).collect(Collectors.toSet()); } return Collections.emptySet(); diff --git a/platform/external-system-api/src/com/intellij/openapi/externalSystem/service/project/IdeModelsProviderImpl.java b/platform/external-system-api/src/com/intellij/openapi/externalSystem/service/project/IdeModelsProviderImpl.java index 61b206ad9d51..33cf374b1236 100644 --- a/platform/external-system-api/src/com/intellij/openapi/externalSystem/service/project/IdeModelsProviderImpl.java +++ b/platform/external-system-api/src/com/intellij/openapi/externalSystem/service/project/IdeModelsProviderImpl.java @@ -17,6 +17,7 @@ package com.intellij.openapi.externalSystem.service.project; import com.intellij.openapi.externalSystem.model.project.*; import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleGrouperKt; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.project.Project; @@ -87,16 +88,17 @@ public class IdeModelsProviderImpl implements IdeModelsProvider { protected String[] suggestModuleNameCandidates(@NotNull ModuleData module) { String prefix = module.getGroup(); File modulePath = new File(module.getLinkedExternalProjectPath()); - if(modulePath.isFile()) { + if (modulePath.isFile()) { modulePath = modulePath.getParentFile(); } if (modulePath.getParentFile() != null) { prefix = modulePath.getParentFile().getName(); } + char delimiter = ModuleGrouperKt.isQualifiedModuleNamesEnabled() ? '.' : '_'; return new String[]{ module.getInternalName(), - prefix + '-' + module.getInternalName(), - prefix + '-' + module.getInternalName() + "~1"}; + prefix + delimiter + module.getInternalName(), + prefix + delimiter + module.getInternalName() + "~1"}; } private static boolean isApplicableIdeModule(@NotNull ModuleData moduleData, @NotNull Module ideModule) { diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/ShowUpdateInfoDialogAction.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/ShowUpdateInfoDialogAction.java index 0e16b1d193f6..33cd97a470e6 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/ShowUpdateInfoDialogAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/ShowUpdateInfoDialogAction.java @@ -17,31 +17,78 @@ package com.intellij.openapi.updateSettings.impl; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.application.ApplicationInfo; +import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.Messages; +import com.intellij.openapi.ui.popup.JBPopupFactory; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.ui.components.JBList; +import com.intellij.ui.components.JBTextField; import com.intellij.util.JdomKt; +import com.intellij.util.ObjectUtils; +import com.intellij.util.containers.ContainerUtil; +import org.jdom.Element; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import javax.swing.*; import java.util.Collections; public class ShowUpdateInfoDialogAction extends AnAction { - private boolean myShowBigData = false; public ShowUpdateInfoDialogAction() { } @Override public void actionPerformed(AnActionEvent e) { + Project project = ObjectUtils.notNull(e.getProject()); + JComponent component = ObjectUtils.notNull((JComponent)e.getData(PlatformDataKeys.CONTEXT_COMPONENT)); + String title = "Updates.xml Text"; + JBList list = new JBList("Manual Text", "Default Text (short)", "Default Text (long)"); + JBPopupFactory.getInstance().createListPopupBuilder(list) + .setTitle(title) + .setFilteringEnabled(o -> (String)o) + .setItemChoosenCallback(() -> { + int index = list.getSelectedIndex(); + showDialog(index == 0 ? getUserText(project, component, title) : getXML(index == 2)); + }) + .createPopup() + .showCenteredInCurrentWindow(project); + } + + @Nullable + private static String getUserText(@NotNull Project project, @NotNull JComponent component, @NotNull String title) { + JBTextField field = new JBTextField(); + field.setVisible(false); + component.getRootPane().add(field); try { - myShowBigData = ! myShowBigData; - UpdateChannel channel = new UpdateChannel(JdomKt.loadElement(getXML(myShowBigData))); - BuildInfo newBuild = channel.getBuilds().get(0); - PatchInfo patchInfo = new PatchInfo( - JdomKt.loadElement("")); - new UpdateInfoDialog(channel, newBuild, patchInfo, true, UpdateSettings.getInstance().canUseSecureConnection(), - Collections.emptyList(), Collections.emptyList()).show(); + Messages.showTextAreaDialog(field, title, null); } - catch (Exception ignored) { - ignored.printStackTrace(); + finally { + component.getRootPane().remove(field); } + return field.getText(); + } + + protected void showDialog(@Nullable String text) { + String trim = StringUtil.trim(text); + if (StringUtil.isEmpty(trim)) return; + + Element element; + try { + element = JdomKt.loadElement(trim); + if (!"channel".equals(element.getName())) return; + } + catch (Exception ex) { + Logger.getInstance(ShowUpdateInfoDialogAction.class).error(ex); + return; + } + UpdateChannel channel = new UpdateChannel(element); + BuildInfo newBuild = ContainerUtil.getFirstItem(channel.getBuilds()); + PatchInfo patch = ContainerUtil.getFirstItem(newBuild.getPatches()); + new UpdateInfoDialog(channel, newBuild, patch, true, UpdateSettings.getInstance().canUseSecureConnection(), + Collections.emptyList(), Collections.emptyList()).show(); } @@ -118,10 +165,13 @@ public class ShowUpdateInfoDialogAction extends AnAction { " \n" + " \n" + " \n"; + private static String getXML(boolean bigData) { StringBuilder sb = new StringBuilder(CHANNEL_XML_START); int count = bigData ? 4 : 1; - for (int i = 0; i < count; i++) { sb.append(PARAGRAPH); } + for (int i = 0; i < count; i++) { + sb.append(PARAGRAPH); + } sb.append(CHANNEL_XML_END); return sb.toString(); } diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/fileEditor/NonProjectFileAccessTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/fileEditor/NonProjectFileAccessTest.java index d2445814c027..f1db24261714 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/fileEditor/NonProjectFileAccessTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/fileEditor/NonProjectFileAccessTest.java @@ -25,6 +25,7 @@ import com.intellij.openapi.components.impl.ComponentManagerImpl; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.actionSystem.EditorActionManager; import com.intellij.openapi.extensions.Extensions; +import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx; import com.intellij.openapi.fileEditor.impl.NonProjectFileWritingAccessExtension; import com.intellij.openapi.fileEditor.impl.NonProjectFileWritingAccessProvider; import com.intellij.openapi.module.EmptyModuleType; @@ -52,7 +53,6 @@ import java.io.IOException; import java.util.*; public class NonProjectFileAccessTest extends HeavyFileEditorManagerTestCase { - private final Set myOpenedFiles = new THashSet<>(); private final Set myCreatedFiles = new THashSet<>(); @Override @@ -68,7 +68,7 @@ public class NonProjectFileAccessTest extends HeavyFileEditorManagerTestCase { protected void tearDown() throws Exception { try { NonProjectFileWritingAccessProvider.setCustomUnlocker(null); - closeOpenFiles(); + FileEditorManagerEx.getInstanceEx(getProject()).closeAllFiles(); ApplicationManager.getApplication().runWriteAction(() -> { for (VirtualFile each : myCreatedFiles) { try { @@ -86,13 +86,6 @@ public class NonProjectFileAccessTest extends HeavyFileEditorManagerTestCase { } } - private void closeOpenFiles() { - FileEditorManager editorManager = FileEditorManager.getInstance(getProject()); - for (VirtualFile file : myOpenedFiles) { - editorManager.closeFile(file); - } - } - public void testBasicAccessCheck() throws Exception { VirtualFile projectFile = createProjectFile(); typeAndCheck(projectFile, true); @@ -396,7 +389,6 @@ public class NonProjectFileAccessTest extends HeavyFileEditorManagerTestCase { } private Editor getEditor(VirtualFile file) { - myOpenedFiles.add(file); Editor editor = FileEditorManager.getInstance(getProject()).openTextEditor(new OpenFileDescriptor(getProject(), file, 0), false); EditorTestUtil.waitForLoading(editor); return editor; diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BaseGradleProjectResolverExtension.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BaseGradleProjectResolverExtension.java index 480b4b1a8e85..3ae2ccc39832 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BaseGradleProjectResolverExtension.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BaseGradleProjectResolverExtension.java @@ -34,10 +34,7 @@ import com.intellij.openapi.externalSystem.service.notification.NotificationData import com.intellij.openapi.externalSystem.service.notification.NotificationSource; import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; import com.intellij.openapi.externalSystem.util.Order; -import com.intellij.openapi.module.EmptyModuleType; -import com.intellij.openapi.module.JavaModuleType; -import com.intellij.openapi.module.ModuleType; -import com.intellij.openapi.module.StdModuleTypes; +import com.intellij.openapi.module.*; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.DependencyScope; import com.intellij.openapi.util.Pair; @@ -175,21 +172,18 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver ExternalProject externalProject = resolverCtx.getExtraProject(gradleModule, ExternalProject.class); if (resolverCtx.isResolveModulePerSourceSet() && externalProject != null) { - String gradlePath = gradleModule.getGradleProject().getPath(); - final boolean isRootModule = StringUtil.isEmpty(gradlePath) || ":".equals(gradlePath); - final String[] moduleGroup; - if (isRootModule) { - moduleGroup = new String[]{mainModuleData.getInternalName()}; + String[] moduleGroup = null; + if (!ModuleGrouperKt.isQualifiedModuleNamesEnabled()) { + String gradlePath = gradleModule.getGradleProject().getPath(); + final boolean isRootModule = StringUtil.isEmpty(gradlePath) || ":".equals(gradlePath); + moduleGroup = isRootModule ? new String[]{mainModuleData.getInternalName()} : ArrayUtil.remove(gradlePath.split(":"), 0); + mainModuleData.setIdeModuleGroup(isRootModule ? null : moduleGroup); } - else { - moduleGroup = ArrayUtil.remove(gradlePath.split(":"), 0); - } - mainModuleData.setIdeModuleGroup(isRootModule ? null : moduleGroup); for (ExternalSourceSet sourceSet : externalProject.getSourceSets().values()) { final String moduleId = getModuleId(resolverCtx, gradleModule, sourceSet); final String moduleExternalName = gradleModule.getName() + ":" + sourceSet.getName(); - final String moduleInternalName = getInternalModuleName(gradleModule, sourceSet.getName()); + final String moduleInternalName = getInternalModuleName(gradleModule, externalProject, sourceSet.getName()); GradleSourceSetData sourceSetData = new GradleSourceSetData( moduleId, moduleExternalName, moduleInternalName, mainModuleFileDirectoryPath, mainModuleConfigPath); @@ -218,7 +212,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver } else { if ("test".equals(sourceSet.getName())) { - sourceSetData.setProductionModuleId(getInternalModuleName(gradleModule, "main")); + sourceSetData.setProductionModuleId(getInternalModuleName(gradleModule, externalProject, "main")); final Set testsArtifacts = externalProject.getArtifactsByConfiguration().get("tests"); if (testsArtifacts != null) { artifacts.addAll(testsArtifacts); @@ -260,11 +254,6 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver return mainModuleNode; } - @NotNull - private static String getInternalModuleName(@NotNull IdeaModule gradleModule, @NotNull String sourceSetName) { - return PathUtilRt.suggestFileName(gradleModule.getName() + "_" + sourceSetName, true, false); - } - @Override public void populateModuleExtraModels(@NotNull IdeaModule gradleModule, @NotNull DataNode ideModule) { final BuildScriptClasspathModel buildScriptClasspathModel = resolverCtx.getExtraProject(gradleModule, BuildScriptClasspathModel.class); diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java index 78daf36171c5..f349d69ba763 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java @@ -29,6 +29,7 @@ import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotifica import com.intellij.openapi.externalSystem.service.project.ExternalSystemProjectResolver; import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; import com.intellij.openapi.externalSystem.util.ExternalSystemDebugEnvironment; +import com.intellij.openapi.module.ModuleGrouperKt; import com.intellij.openapi.module.StdModuleTypes; import com.intellij.openapi.roots.DependencyScope; import com.intellij.openapi.util.Factory; @@ -866,15 +867,16 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver sourceSetNode : ExternalSystemApiUtil.getChildren(moduleNode, GradleSourceSetData.KEY)) { - sourceSetNode.getData().setIdeModuleGroup(moduleGroup); + for (DataNode sourceSetNode : ExternalSystemApiUtil.getChildren(moduleNode, GradleSourceSetData.KEY)) { + sourceSetNode.getData().setIdeModuleGroup(moduleGroup); + } } } } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverUtil.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverUtil.java index e4e167eae3fa..ab53501c2810 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverUtil.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverUtil.java @@ -25,11 +25,13 @@ import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; import com.intellij.openapi.externalSystem.util.ExternalSystemConstants; import com.intellij.openapi.externalSystem.util.ExternalSystemDebugEnvironment; import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleGrouperKt; import com.intellij.openapi.module.StdModuleTypes; import com.intellij.openapi.roots.DependencyScope; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.util.PathUtilRt; import com.intellij.util.containers.ContainerUtil; import org.gradle.api.artifacts.Dependency; import org.gradle.tooling.model.GradleProject; @@ -100,6 +102,7 @@ public class GradleProjectResolverUtil { ExternalProject externalProject = resolverCtx.getExtraProject(gradleModule, ExternalProject.class); if (externalProject != null) { + moduleData.setInternalName(getInternalModuleName(gradleModule, externalProject)); moduleData.setGroup(externalProject.getGroup()); moduleData.setVersion(externalProject.getVersion()); moduleData.setDescription(externalProject.getDescription()); @@ -111,6 +114,36 @@ public class GradleProjectResolverUtil { return projectDataNode.createChild(ProjectKeys.MODULE, moduleData); } + @NotNull + static String getInternalModuleName(@NotNull IdeaModule gradleModule, @NotNull ExternalProject externalProject) { + return getInternalModuleName(gradleModule, externalProject, null); + } + + @NotNull + static String getInternalModuleName(@NotNull IdeaModule gradleModule, + @NotNull ExternalProject externalProject, + @Nullable String sourceSetName) { + String delimiter; + StringBuilder moduleName = new StringBuilder(); + if (ModuleGrouperKt.isQualifiedModuleNamesEnabled()) { + delimiter = "."; + if (StringUtil.isNotEmpty(externalProject.getGroup())) { + moduleName.append(externalProject.getGroup()).append(delimiter); + } + moduleName.append(externalProject.getName()); + } + else { + delimiter = "_"; + moduleName.append(gradleModule.getName()); + } + if (sourceSetName != null) { + assert !sourceSetName.isEmpty(); + moduleName.append(delimiter); + moduleName.append(sourceSetName); + } + return PathUtilRt.suggestFileName(moduleName.toString(), true, false); + } + @NotNull public static String getModuleConfigPath(@NotNull ProjectResolverContext resolverCtx, @NotNull IdeaModule gradleModule, diff --git a/resources-en/src/messages/DebuggerBundle.properties b/resources-en/src/messages/DebuggerBundle.properties index 6f67be8b7192..20b9a7fea456 100644 --- a/resources-en/src/messages/DebuggerBundle.properties +++ b/resources-en/src/messages/DebuggerBundle.properties @@ -256,6 +256,7 @@ label.threads.view.configurable.show.stack.frames.for.synthetic.methods=Show sta label.threads.view.configurable.show.thread.groups=Show thread &groups threads.view.configurable.display.name=Customize Threads View user.renderers.configurable.display.name=Java Type Renderers +async.stacktraces.configurable.display.name=Async Stacktraces label.user.renderers.configurable.renderer.name=Renderer name: text.user.renderers.configurable.no.renderers=No renderers button.copy=Copy