From f956eb51625df9caf1cb486f6a1f55113a4da9b2 Mon Sep 17 00:00:00 2001 From: Egor Ushakov Date: Tue, 5 Mar 2019 19:14:12 +0300 Subject: [PATCH 1/8] IDEA-208435 Smart step into method in anonymous class does not work --- .../impl/src/com/intellij/debugger/engine/JVMNameUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JVMNameUtil.java b/java/debugger/impl/src/com/intellij/debugger/engine/JVMNameUtil.java index 6986a796cfdf..558f3ac73817 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JVMNameUtil.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JVMNameUtil.java @@ -1,4 +1,4 @@ -// 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. +// Copyright 2000-2019 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.debugger.engine; import com.intellij.debugger.DebuggerBundle; @@ -253,7 +253,7 @@ public class JVMNameUtil { @NotNull public static JVMName getJVMQualifiedName(@NotNull PsiClass psiClass) { - final String name = getNonAnonymousClassName(psiClass); + final String name = getClassVMName(psiClass); if (name != null) { return getJVMRawText(name); } From 8da0b3f4925dc7a5aa7b490d70af736ee499edc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Tue, 5 Mar 2019 17:44:28 +0100 Subject: [PATCH 2/8] IDEA-208428 plugin.xml: should include "Jetbrains" as one of vendors false positives (Android-*) --- .../src/inspections/PluginXmlDomInspection.java | 7 +++++++ .../testData/codeInsight/pluginWithAndroidIdVendor.xml | 5 +++++ .../idea/devkit/codeInsight/PluginXmlFunctionalTest.groovy | 4 ++++ 3 files changed, 16 insertions(+) create mode 100644 plugins/devkit/devkit-java-tests/testData/codeInsight/pluginWithAndroidIdVendor.xml diff --git a/plugins/devkit/devkit-core/src/inspections/PluginXmlDomInspection.java b/plugins/devkit/devkit-core/src/inspections/PluginXmlDomInspection.java index 0956d90833d7..793cdb83ddbf 100644 --- a/plugins/devkit/devkit-core/src/inspections/PluginXmlDomInspection.java +++ b/plugins/devkit/devkit-core/src/inspections/PluginXmlDomInspection.java @@ -208,6 +208,13 @@ public class PluginXmlDomInspection extends BasicDomElementsInspection + com.android.something + 1 + JB is not required due to ID + diff --git a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/codeInsight/PluginXmlFunctionalTest.groovy b/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/codeInsight/PluginXmlFunctionalTest.groovy index cd6c8cfb6af3..b8c3da04f37f 100644 --- a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/codeInsight/PluginXmlFunctionalTest.groovy +++ b/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/codeInsight/PluginXmlFunctionalTest.groovy @@ -397,6 +397,10 @@ class PluginXmlFunctionalTest extends JavaCodeInsightFixtureTestCase { testHighlightingInIdeaProject("pluginWithJetBrainsAndMeAsVendor.xml") } + void testPluginXmlInIdeaProjectWithAndroidId() { + testHighlightingInIdeaProject("pluginWithAndroidIdVendor.xml") + } + void testSpecifyJetBrainsAsVendorQuickFix() { PsiUtil.markAsIdeaProject(project, true) try { From cd6b395fbddc8d930e500ac253f5905f06f0a35a Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Tue, 5 Mar 2019 19:49:17 +0300 Subject: [PATCH 3/8] ES tests: system dependant paths fix --- .../openapi/externalSystem/test/ExternalSystemTestCase.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/test/ExternalSystemTestCase.java b/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/test/ExternalSystemTestCase.java index 46928a6dd1cb..73fb2bab9836 100644 --- a/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/test/ExternalSystemTestCase.java +++ b/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/test/ExternalSystemTestCase.java @@ -38,6 +38,7 @@ import com.intellij.testFramework.fixtures.IdeaTestFixtureFactory; import com.intellij.util.ArrayUtil; import com.intellij.util.ExceptionUtil; import com.intellij.util.ExceptionUtilRt; +import com.intellij.util.PathUtil; import com.intellij.util.concurrency.Semaphore; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.io.PathKt; @@ -268,7 +269,7 @@ public abstract class ExternalSystemTestCase extends UsefulTestCase { @SystemIndependent protected String path(@NotNull String relativePath) { - return file(relativePath).getPath(); + return PathUtil.toSystemIndependentName(file(relativePath).getPath()); } protected File file(@NotNull String relativePath) { From 4487abf34ef5f177c13b4e4b958ab9d190dccfba Mon Sep 17 00:00:00 2001 From: "Vladimir.Orlov" Date: Tue, 5 Mar 2019 20:20:44 +0300 Subject: [PATCH 4/8] IDEA-208430 [jbr 11] Uninstall doesn't work after patching IDEA --- build/conf/nsis/idea.nsi | 2 -- 1 file changed, 2 deletions(-) diff --git a/build/conf/nsis/idea.nsi b/build/conf/nsis/idea.nsi index e8ba9ed46080..2a280e933e05 100644 --- a/build/conf/nsis/idea.nsi +++ b/build/conf/nsis/idea.nsi @@ -1536,10 +1536,8 @@ Function un.onInit Call un.UninstallFeedback ; Uninstallation was run from installation dir? - IfFileExists "$INSTDIR\IdeaWin32.dll" 0 end_of_uninstall IfFileExists "$INSTDIR\IdeaWin64.dll" 0 end_of_uninstall IfFileExists "$INSTDIR\${PRODUCT_EXE_FILE_64}" 0 end_of_uninstall - IfFileExists "$INSTDIR\${PRODUCT_EXE_FILE}" 0 end_of_uninstall get_reg_key: SetRegView 32 From 2b014e088354fe5e4ac43ebd84b56e6be05239bf Mon Sep 17 00:00:00 2001 From: Sergey Patrikeev Date: Tue, 5 Mar 2019 20:30:54 +0300 Subject: [PATCH 5/8] Missing recent API inspection: make it possible to run tests using Kotlin plugin. --- .../missingApi/JavaMissingRecentApiInspectionTests.kt | 8 ++++---- .../missingApi/KotlinMissingRecentApiInspectionTests.kt | 5 ++--- .../missingApi/MissingRecentApiInspectionTestBase.kt | 8 +++++--- .../project/PluginProjectWithIdeaJdkDescriptor.kt | 2 +- .../project/PluginProjectWithIdeaLibraryDescriptor.kt | 2 +- 5 files changed, 13 insertions(+), 12 deletions(-) rename plugins/devkit/{devkit-java-tests/testSrc/org/jetbrains/idea/devkit => devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin}/inspections/missingApi/JavaMissingRecentApiInspectionTests.kt (77%) rename plugins/devkit/{devkit-java-tests/testSrc/org/jetbrains/idea/devkit => devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin}/inspections/missingApi/MissingRecentApiInspectionTestBase.kt (86%) rename plugins/devkit/{devkit-java-tests/testSrc/org/jetbrains/idea/devkit => devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin}/inspections/missingApi/project/PluginProjectWithIdeaJdkDescriptor.kt (97%) rename plugins/devkit/{devkit-java-tests/testSrc/org/jetbrains/idea/devkit => devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin}/inspections/missingApi/project/PluginProjectWithIdeaLibraryDescriptor.kt (97%) diff --git a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/inspections/missingApi/JavaMissingRecentApiInspectionTests.kt b/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/JavaMissingRecentApiInspectionTests.kt similarity index 77% rename from plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/inspections/missingApi/JavaMissingRecentApiInspectionTests.kt rename to plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/JavaMissingRecentApiInspectionTests.kt index 05ae314f6d1b..a23ed73ab220 100644 --- a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/inspections/missingApi/JavaMissingRecentApiInspectionTests.kt +++ b/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/JavaMissingRecentApiInspectionTests.kt @@ -1,9 +1,9 @@ -// 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 org.jetbrains.idea.devkit.inspections.missingApi +// Copyright 2000-2019 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 org.jetbrains.idea.devkit.kotlin.inspections.missingApi import com.intellij.testFramework.TestDataPath -import org.jetbrains.idea.devkit.inspections.missingApi.project.PluginProjectWithIdeaJdkDescriptor -import org.jetbrains.idea.devkit.inspections.missingApi.project.PluginProjectWithIdeaLibraryDescriptor +import org.jetbrains.idea.devkit.kotlin.inspections.missingApi.project.PluginProjectWithIdeaJdkDescriptor +import org.jetbrains.idea.devkit.kotlin.inspections.missingApi.project.PluginProjectWithIdeaLibraryDescriptor @TestDataPath("\$CONTENT_ROOT/testData/inspections/missingApi") abstract class JavaMissingRecentApiInspectionTestBase : MissingRecentApiInspectionTestBase() { diff --git a/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/KotlinMissingRecentApiInspectionTests.kt b/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/KotlinMissingRecentApiInspectionTests.kt index b99e699b566c..ed107c2556ce 100644 --- a/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/KotlinMissingRecentApiInspectionTests.kt +++ b/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/KotlinMissingRecentApiInspectionTests.kt @@ -1,9 +1,8 @@ // 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 org.jetbrains.idea.devkit.kotlin.inspections.missingApi -import org.jetbrains.idea.devkit.inspections.missingApi.MissingRecentApiInspectionTestBase -import org.jetbrains.idea.devkit.inspections.missingApi.project.PluginProjectWithIdeaJdkDescriptor -import org.jetbrains.idea.devkit.inspections.missingApi.project.PluginProjectWithIdeaLibraryDescriptor +import org.jetbrains.idea.devkit.kotlin.inspections.missingApi.project.PluginProjectWithIdeaJdkDescriptor +import org.jetbrains.idea.devkit.kotlin.inspections.missingApi.project.PluginProjectWithIdeaLibraryDescriptor abstract class KotlinMissingRecentApiInspectionTestBase : MissingRecentApiInspectionTestBase() { diff --git a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/inspections/missingApi/MissingRecentApiInspectionTestBase.kt b/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/MissingRecentApiInspectionTestBase.kt similarity index 86% rename from plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/inspections/missingApi/MissingRecentApiInspectionTestBase.kt rename to plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/MissingRecentApiInspectionTestBase.kt index 3934d46e63c2..0bd443452b4c 100644 --- a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/inspections/missingApi/MissingRecentApiInspectionTestBase.kt +++ b/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/MissingRecentApiInspectionTestBase.kt @@ -1,5 +1,5 @@ // Copyright 2000-2019 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 org.jetbrains.idea.devkit.inspections.missingApi +package org.jetbrains.idea.devkit.kotlin.inspections.missingApi import com.intellij.codeInsight.AnnotationUtil import com.intellij.openapi.roots.JavaModuleExternalPaths @@ -9,8 +9,10 @@ import com.intellij.psi.search.GlobalSearchScope import com.intellij.testFramework.TestDataPath import org.jetbrains.idea.devkit.DevkitJavaTestsUtil import org.jetbrains.idea.devkit.inspections.PluginModuleTestCase -import org.jetbrains.idea.devkit.inspections.missingApi.project.PluginProjectWithIdeaJdkDescriptor -import org.jetbrains.idea.devkit.inspections.missingApi.project.PluginProjectWithIdeaLibraryDescriptor +import org.jetbrains.idea.devkit.inspections.missingApi.MissingRecentApiInspection +import org.jetbrains.idea.devkit.inspections.missingApi.MissingRecentApiVisitor +import org.jetbrains.idea.devkit.kotlin.inspections.missingApi.project.PluginProjectWithIdeaJdkDescriptor +import org.jetbrains.idea.devkit.kotlin.inspections.missingApi.project.PluginProjectWithIdeaLibraryDescriptor /** * Base class for tests of [MissingRecentApiInspection] on Java and Kotlin sources. diff --git a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/inspections/missingApi/project/PluginProjectWithIdeaJdkDescriptor.kt b/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/project/PluginProjectWithIdeaJdkDescriptor.kt similarity index 97% rename from plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/inspections/missingApi/project/PluginProjectWithIdeaJdkDescriptor.kt rename to plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/project/PluginProjectWithIdeaJdkDescriptor.kt index 09507026012c..4489a89d0c52 100644 --- a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/inspections/missingApi/project/PluginProjectWithIdeaJdkDescriptor.kt +++ b/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/project/PluginProjectWithIdeaJdkDescriptor.kt @@ -1,5 +1,5 @@ // 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 org.jetbrains.idea.devkit.inspections.missingApi.project +package org.jetbrains.idea.devkit.kotlin.inspections.missingApi.project import com.intellij.openapi.application.PathManager import com.intellij.openapi.application.runWriteAction diff --git a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/inspections/missingApi/project/PluginProjectWithIdeaLibraryDescriptor.kt b/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/project/PluginProjectWithIdeaLibraryDescriptor.kt similarity index 97% rename from plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/inspections/missingApi/project/PluginProjectWithIdeaLibraryDescriptor.kt rename to plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/project/PluginProjectWithIdeaLibraryDescriptor.kt index df1b6e758c09..48cb2c3d16f7 100644 --- a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/inspections/missingApi/project/PluginProjectWithIdeaLibraryDescriptor.kt +++ b/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/project/PluginProjectWithIdeaLibraryDescriptor.kt @@ -1,5 +1,5 @@ // 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 org.jetbrains.idea.devkit.inspections.missingApi.project +package org.jetbrains.idea.devkit.kotlin.inspections.missingApi.project import com.intellij.openapi.application.PathManager import com.intellij.openapi.application.runReadAction From 357a1315c57db43275a574b193367c44ff13425a Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Tue, 5 Mar 2019 19:41:23 +0100 Subject: [PATCH 6/8] IDEA-CR-43092 use "obsolete" instead of "stalled" --- .../src/ComponentStoreWithExtraComponents.kt | 10 +++---- ...rageBean.java => ObsoleteStorageBean.java} | 2 +- .../src/ProjectStoreImpl.kt | 4 +-- .../testSrc/ApplicationStoreTest.kt | 28 +++++++++---------- .../testSrc/ProjectStoreTest.kt | 12 ++++---- .../src/META-INF/PlatformExtensionPoints.xml | 2 +- .../src/META-INF/PlatformExtensions.xml | 28 +++++++++---------- 7 files changed, 43 insertions(+), 43 deletions(-) rename platform/configuration-store-impl/src/{StalledStorageBean.java => ObsoleteStorageBean.java} (94%) diff --git a/platform/configuration-store-impl/src/ComponentStoreWithExtraComponents.kt b/platform/configuration-store-impl/src/ComponentStoreWithExtraComponents.kt index 10da42785576..de48fe5354aa 100644 --- a/platform/configuration-store-impl/src/ComponentStoreWithExtraComponents.kt +++ b/platform/configuration-store-impl/src/ComponentStoreWithExtraComponents.kt @@ -11,8 +11,8 @@ import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch import java.util.concurrent.atomic.AtomicBoolean -// A way to remove stalled/unused component data. -internal val STALLED_STORAGE_EP = ExtensionPointName("com.intellij.stalledStorage") +// A way to remove obsolete component data. +internal val OBSOLETE_STORAGE_EP = ExtensionPointName("com.intellij.obsoleteStorage") abstract class ComponentStoreWithExtraComponents : ComponentStoreImpl() { @Suppress("DEPRECATION") @@ -81,14 +81,14 @@ abstract class ComponentStoreWithExtraComponents : ComponentStoreImpl() { override fun commitComponents(isForce: Boolean, session: SaveSessionProducerManager, errors: MutableList) { // ensure that this task will not interrupt regular saving LOG.runAndLogException { - commitStalledComponents(session, false) + commitObsoleteComponents(session, false) } super.commitComponents(isForce, session, errors) } - internal open fun commitStalledComponents(session: SaveSessionProducerManager, isProjectLevel: Boolean) { - for (bean in STALLED_STORAGE_EP.extensionList) { + internal open fun commitObsoleteComponents(session: SaveSessionProducerManager, isProjectLevel: Boolean) { + for (bean in OBSOLETE_STORAGE_EP.extensionList) { if (bean.isProjectLevel != isProjectLevel) { continue } diff --git a/platform/configuration-store-impl/src/StalledStorageBean.java b/platform/configuration-store-impl/src/ObsoleteStorageBean.java similarity index 94% rename from platform/configuration-store-impl/src/StalledStorageBean.java rename to platform/configuration-store-impl/src/ObsoleteStorageBean.java index ffc46edff491..8d04333b8b86 100644 --- a/platform/configuration-store-impl/src/StalledStorageBean.java +++ b/platform/configuration-store-impl/src/ObsoleteStorageBean.java @@ -7,7 +7,7 @@ import com.intellij.util.xmlb.annotations.XCollection; import java.util.List; -final class StalledStorageBean { +final class ObsoleteStorageBean { @Attribute public String file; diff --git a/platform/configuration-store-impl/src/ProjectStoreImpl.kt b/platform/configuration-store-impl/src/ProjectStoreImpl.kt index 2fb48a5cbbf4..555a43c251e1 100644 --- a/platform/configuration-store-impl/src/ProjectStoreImpl.kt +++ b/platform/configuration-store-impl/src/ProjectStoreImpl.kt @@ -353,9 +353,9 @@ private open class ProjectStoreImpl(project: Project, private val pathMacroManag final override fun createSaveSessionProducerManager() = ProjectSaveSessionProducerManager(project) - final override fun commitStalledComponents(session: SaveSessionProducerManager, isProjectLevel: Boolean) { + final override fun commitObsoleteComponents(session: SaveSessionProducerManager, isProjectLevel: Boolean) { if (isDirectoryBased) { - super.commitStalledComponents(session, true) + super.commitObsoleteComponents(session, true) } } } diff --git a/platform/configuration-store-impl/testSrc/ApplicationStoreTest.kt b/platform/configuration-store-impl/testSrc/ApplicationStoreTest.kt index d9bc4b65d3fa..d5389b58057a 100644 --- a/platform/configuration-store-impl/testSrc/ApplicationStoreTest.kt +++ b/platform/configuration-store-impl/testSrc/ApplicationStoreTest.kt @@ -299,10 +299,10 @@ internal class ApplicationStoreTest { @Test fun `remove stalled data`() = runBlocking { - val stalledStorageBean = StalledStorageBean() - stalledStorageBean.file = "i_do_not_want_to_be_deleted_but.xml" - stalledStorageBean.components.addAll(listOf("loser1", "loser2", "lucky")) - PlatformTestUtil.maskExtensions(STALLED_STORAGE_EP, listOf(stalledStorageBean), disposableRule.disposable) + val obsoleteStorageBean = ObsoleteStorageBean() + obsoleteStorageBean.file = "i_do_not_want_to_be_deleted_but.xml" + obsoleteStorageBean.components.addAll(listOf("loser1", "loser2", "lucky")) + PlatformTestUtil.maskExtensions(OBSOLETE_STORAGE_EP, listOf(obsoleteStorageBean), disposableRule.disposable) @State(name = "loser1", storages = [(Storage(value = "i_do_not_want_to_be_deleted_but.xml"))]) class AOther : A() @@ -325,8 +325,8 @@ internal class ApplicationStoreTest { componentStore.save() - // all must be saved regardless of stalledStorageBean because we have such components - assertThat(testAppConfig.resolve(stalledStorageBean.file)).isEqualTo(""" + // all must be saved regardless of obsoleteStorageBean because we have such components + assertThat(testAppConfig.resolve(obsoleteStorageBean.file)).isEqualTo(""" @@ -338,7 +338,7 @@ internal class ApplicationStoreTest { // first looser is deleted since state equals to default (no committed component data) componentStore.save() - assertThat(testAppConfig.resolve(stalledStorageBean.file)).isEqualTo(""" + assertThat(testAppConfig.resolve(obsoleteStorageBean.file)).isEqualTo(""" @@ -349,7 +349,7 @@ internal class ApplicationStoreTest { // second looser is deleted since state equals to default (no committed component data) componentStore.save() - assertThat(testAppConfig.resolve(stalledStorageBean.file)).isEqualTo(""" + assertThat(testAppConfig.resolve(obsoleteStorageBean.file)).isEqualTo(""" @@ -358,12 +358,12 @@ internal class ApplicationStoreTest { @Test fun `remove stalled data - keep file if another unknown component`() = runBlocking { - val stalledStorageBean = StalledStorageBean() - stalledStorageBean.file = "i_will_be_not_deleted.xml" - stalledStorageBean.components.addAll(listOf("Loser")) - PlatformTestUtil.maskExtensions(STALLED_STORAGE_EP, listOf(stalledStorageBean), disposableRule.disposable) + val obsoleteStorageBean = ObsoleteStorageBean() + obsoleteStorageBean.file = "i_will_be_not_deleted.xml" + obsoleteStorageBean.components.addAll(listOf("Loser")) + PlatformTestUtil.maskExtensions(OBSOLETE_STORAGE_EP, listOf(obsoleteStorageBean), disposableRule.disposable) - testAppConfig.resolve(stalledStorageBean.file).write(""" + testAppConfig.resolve(obsoleteStorageBean.file).write(""" @@ -372,7 +372,7 @@ internal class ApplicationStoreTest { componentStore.save() - assertThat(testAppConfig.resolve(stalledStorageBean.file)).isEqualTo(""" + assertThat(testAppConfig.resolve(obsoleteStorageBean.file)).isEqualTo(""" diff --git a/platform/configuration-store-impl/testSrc/ProjectStoreTest.kt b/platform/configuration-store-impl/testSrc/ProjectStoreTest.kt index 5ded6def8b8e..e7b8bb064af2 100644 --- a/platform/configuration-store-impl/testSrc/ProjectStoreTest.kt +++ b/platform/configuration-store-impl/testSrc/ProjectStoreTest.kt @@ -182,16 +182,16 @@ internal class ProjectStoreTest { """.trimIndent()) it.path }) { project -> - val stalledStorageBean = StalledStorageBean() + val obsoleteStorageBean = ObsoleteStorageBean() val storageFileName = "foo.xml" - stalledStorageBean.file = storageFileName - stalledStorageBean.components.addAll(listOf("AppLevelLoser")) + obsoleteStorageBean.file = storageFileName + obsoleteStorageBean.components.addAll(listOf("AppLevelLoser")) - val projectStalledStorageBean = StalledStorageBean() + val projectStalledStorageBean = ObsoleteStorageBean() projectStalledStorageBean.file = storageFileName projectStalledStorageBean.isProjectLevel = true projectStalledStorageBean.components.addAll(listOf("ProjectLevelLoser")) - PlatformTestUtil.maskExtensions(STALLED_STORAGE_EP, listOf(stalledStorageBean, projectStalledStorageBean), project) + PlatformTestUtil.maskExtensions(OBSOLETE_STORAGE_EP, listOf(obsoleteStorageBean, projectStalledStorageBean), project) val componentStore = project.stateStore @@ -204,7 +204,7 @@ internal class ProjectStoreTest { componentStore.save() - assertThat(Paths.get(project.stateStore.storageManager.expandMacros(PROJECT_CONFIG_DIR)).resolve(stalledStorageBean.file)).isEqualTo(""" + assertThat(Paths.get(project.stateStore.storageManager.expandMacros(PROJECT_CONFIG_DIR)).resolve(obsoleteStorageBean.file)).isEqualTo(""" diff --git a/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml b/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml index 462a40843328..0653048aca64 100644 --- a/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml @@ -348,6 +348,6 @@ - + diff --git a/platform/platform-resources/src/META-INF/PlatformExtensions.xml b/platform/platform-resources/src/META-INF/PlatformExtensions.xml index 8740debab023..f1a258850d6e 100644 --- a/platform/platform-resources/src/META-INF/PlatformExtensions.xml +++ b/platform/platform-resources/src/META-INF/PlatformExtensions.xml @@ -600,28 +600,28 @@ - + ToolbarClicksCollector - - + + MainMenuCollector - - + + ShortcutsCollector - - + + StatisticsApplicationUsages UsageTrigger - - + + StatisticsApplicationUsages UsageTrigger @@ -634,18 +634,18 @@ ActionsCollector FUSApplicationUsageTrigger - + - + FUSProjectUsageTrigger - - + + FUSProjectUsageTrigger - + From b32d2a2749d5f65b8435827629172fef0b20175d Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Tue, 5 Mar 2019 19:59:44 +0100 Subject: [PATCH 7/8] start-up visualizer: report and visualize extensions --- .../start-up-visualizer/src/App.vue | 15 +++++ .../src/charts/BaseChartComponent.ts | 29 ++++---- .../src/charts/ChartManager.ts | 25 +------ .../src/charts/ItemChart.vue | 9 ++- .../src/charts/ItemChartDescriptor.ts | 5 +- .../src/charts/ItemChartManager.ts | 66 ++++++++++++------- .../start-up-visualizer/src/state/data.ts | 6 ++ .../src/views/TimelineChart.vue | 2 +- .../components/impl/ComponentManagerImpl.java | 6 +- .../extensions/impl/ExtensionPointImpl.java | 10 ++- .../util/pico/DefaultPicoContainer.java | 15 +++++ .../ide/StartUpPerformanceReporter.kt | 17 +++-- .../components/impl/ServiceManagerImpl.java | 6 +- .../com/intellij/util/StartUpMeasurer.java | 50 ++++++++++---- 14 files changed, 174 insertions(+), 87 deletions(-) rename platform/{core-impl => util}/src/com/intellij/util/StartUpMeasurer.java (82%) diff --git a/platform/built-in-server/start-up-visualizer/src/App.vue b/platform/built-in-server/start-up-visualizer/src/App.vue index b7260dbea082..44fff7c5ed22 100644 --- a/platform/built-in-server/start-up-visualizer/src/App.vue +++ b/platform/built-in-server/start-up-visualizer/src/App.vue @@ -14,6 +14,21 @@ diff --git a/platform/built-in-server/start-up-visualizer/src/charts/BaseChartComponent.ts b/platform/built-in-server/start-up-visualizer/src/charts/BaseChartComponent.ts index e8d466e7b4e1..b1eff8bb7bd0 100644 --- a/platform/built-in-server/start-up-visualizer/src/charts/BaseChartComponent.ts +++ b/platform/built-in-server/start-up-visualizer/src/charts/BaseChartComponent.ts @@ -15,26 +15,33 @@ export abstract class BaseChartComponent extends Vue { } mounted() { - this.chartManager = this.createChartManager() this.renderDataIfAvailable() } protected abstract createChartManager(): T @Watch("measurementData") - // @ts-ignore - private measurementDataChanged(): void { - this.renderDataIfAvailable() - } - /** @final */ protected renderDataIfAvailable(): void { const data = this.measurementData - if (data != null) { - const chartManager = this.chartManager - if (chartManager != null) { - chartManager.render(data) - } + if (data == null) { + // yes, do not re-render as empty - null value not expected to be set in valid cases + return + } + + let chartManager = this.chartManager + if (chartManager == null) { + chartManager = this.createChartManager() + this.chartManager = chartManager + } + chartManager.render(data) + } + + beforeDestroy() { + const chartManager = this.chartManager + if (chartManager != null) { + this.chartManager = null + chartManager.dispose() } } } diff --git a/platform/built-in-server/start-up-visualizer/src/charts/ChartManager.ts b/platform/built-in-server/start-up-visualizer/src/charts/ChartManager.ts index d32dc26f78bd..9a31f85a056c 100644 --- a/platform/built-in-server/start-up-visualizer/src/charts/ChartManager.ts +++ b/platform/built-in-server/start-up-visualizer/src/charts/ChartManager.ts @@ -5,6 +5,8 @@ import {DataManager} from "@/state/DataManager" export interface ChartManager { render(data: DataManager): void + + dispose(): void } function configureCommonChartSettings(chart: am4charts.XYChart) { @@ -15,7 +17,6 @@ function configureCommonChartSettings(chart: am4charts.XYChart) { const cursor = new am4charts.XYCursor() cursor.lineY.disabled = true cursor.lineX.disabled = true - // todo y axis for ItemChart doesn't work as expected (not scaled according to current data) because of 2 series for axis (and so, no chart data is set) cursor.behavior = "zoomXY" chart.cursor = cursor } @@ -30,30 +31,10 @@ export abstract class XYChartManager implements ChartManager { // this.addDisposeHandler(childHot) } + /** @override */ dispose(): void { this.chart.dispose() } - // module.hot must be passed here explicitly, because module in this context related only to this module - // private addDisposeHandler(hot: __WebpackModuleApi.Hot | null | undefined) { - // if (hot == null) { - // return - // } - // - // hot.dispose(_data => { - // const chart = this.chart - // if (chart == null) { - // return - // } - // - // (this as any).chart = null - // chart.dispose() - // // const exportingMenu = chart.exporting.menu - // // if (exportingMenu != null) { - // // exportingMenu.dispose() - // // } - // }) - // } - abstract render(data: DataManager): void } diff --git a/platform/built-in-server/start-up-visualizer/src/charts/ItemChart.vue b/platform/built-in-server/start-up-visualizer/src/charts/ItemChart.vue index 6646eef3c660..dd4c0a38a12f 100644 --- a/platform/built-in-server/start-up-visualizer/src/charts/ItemChart.vue +++ b/platform/built-in-server/start-up-visualizer/src/charts/ItemChart.vue @@ -5,7 +5,7 @@