Faster startup avoiding unnecessary class loading in HelloWorld.java
This commit is contained in:
committed by
Vladimir Dolzhenko
parent
c853ae49a2
commit
4babde5b46
+3
@@ -23,9 +23,12 @@ import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.idea.caches.project.ScriptDependenciesInfo
|
||||
import org.jetbrains.kotlin.idea.caches.project.ScriptDependenciesSourceInfo
|
||||
import org.jetbrains.kotlin.idea.caches.project.getModuleInfoByVirtualFile
|
||||
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesManager
|
||||
|
||||
class ScriptDependenciesResolveScopeProvider : ResolveScopeProvider() {
|
||||
override fun getResolveScope(file: VirtualFile, project: Project): GlobalSearchScope? {
|
||||
if (ScriptDependenciesManager.getInstance(project).getAllScriptsDependenciesClassFiles().isEmpty()) return null
|
||||
|
||||
val moduleInfo = getModuleInfoByVirtualFile(project, file) ?: return null
|
||||
val scriptDependenciesModuleInfo = (moduleInfo as? ScriptDependenciesInfo)
|
||||
?: (moduleInfo as? ScriptDependenciesSourceInfo)?.binariesModuleInfo
|
||||
|
||||
+4
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.configuration.ui.notifications
|
||||
|
||||
import com.intellij.facet.ProjectFacetManager
|
||||
import com.intellij.ide.util.PropertiesComponent
|
||||
import com.intellij.notification.*
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
@@ -13,6 +14,7 @@ import com.intellij.openapi.application.runWriteAction
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager
|
||||
import org.jetbrains.kotlin.idea.facet.KotlinFacetType
|
||||
import org.jetbrains.kotlin.idea.formatter.*
|
||||
import org.jetbrains.kotlin.idea.util.isDefaultOfficialCodeStyle
|
||||
|
||||
@@ -20,6 +22,8 @@ private const val KOTLIN_UPDATE_CODE_STYLE_GROUP_ID = "Update Kotlin code style"
|
||||
private const val KOTLIN_UPDATE_CODE_STYLE_PROPERTY_NAME = "update.kotlin.code.style.notified"
|
||||
|
||||
fun notifyKotlinStyleUpdateIfNeeded(project: Project) {
|
||||
val modulesWithFacet = ProjectFacetManager.getInstance(project).getModulesWithFacet(KotlinFacetType.TYPE_ID)
|
||||
if (modulesWithFacet.isEmpty()) return
|
||||
if (!isDefaultOfficialCodeStyle) return
|
||||
|
||||
val isProjectSettings = CodeStyleSettingsManager.getInstance(project).USE_PER_PROJECT_SETTINGS
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea
|
||||
|
||||
import com.intellij.facet.ProjectFacetManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.roots.JdkOrderEntry
|
||||
import com.intellij.openapi.roots.ModuleRootManager
|
||||
@@ -16,6 +17,7 @@ import com.intellij.psi.search.GlobalSearchScope
|
||||
import com.intellij.psi.search.SearchScope
|
||||
import org.jetbrains.kotlin.idea.caches.project.implementingModules
|
||||
import org.jetbrains.kotlin.idea.core.isInTestSourceContentKotlinAware
|
||||
import org.jetbrains.kotlin.idea.facet.KotlinFacetType
|
||||
import org.jetbrains.kotlin.idea.project.platform
|
||||
import org.jetbrains.kotlin.idea.util.isInSourceContentWithoutInjected
|
||||
import org.jetbrains.kotlin.platform.isCommon
|
||||
@@ -23,6 +25,8 @@ import org.jetbrains.kotlin.platform.jvm.isJvm
|
||||
|
||||
class CommonModuleResolveScopeEnlarger : ResolveScopeEnlarger() {
|
||||
override fun getAdditionalResolveScope(file: VirtualFile, project: Project): SearchScope? {
|
||||
val modulesWithFacet = ProjectFacetManager.getInstance(project).getModulesWithFacet(KotlinFacetType.TYPE_ID)
|
||||
if (modulesWithFacet.isEmpty()) return null
|
||||
val module = ProjectFileIndex.getInstance(project).getModuleForFile(file) ?: return null
|
||||
if (!module.platform.isCommon()) return null
|
||||
|
||||
|
||||
@@ -5,13 +5,15 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.framework
|
||||
|
||||
import com.intellij.facet.ProjectFacetManager
|
||||
import com.intellij.openapi.project.DumbAware
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.startup.StartupActivity
|
||||
import org.jetbrains.kotlin.idea.facet.KotlinFacetType
|
||||
import org.jetbrains.kotlin.idea.project.platform
|
||||
import org.jetbrains.kotlin.idea.util.projectStructure.allModules
|
||||
import org.jetbrains.kotlin.platform.isCommon
|
||||
import org.jetbrains.kotlin.platform.js.isJs
|
||||
import org.jetbrains.kotlin.platform.konan.isNative
|
||||
|
||||
/**
|
||||
* This StartupActivity creates KotlinSdk for projects containing non-jvm modules.
|
||||
@@ -21,11 +23,14 @@ import org.jetbrains.kotlin.platform.js.isJs
|
||||
class CreateKotlinSdkActivity : StartupActivity, DumbAware {
|
||||
|
||||
override fun runActivity(project: Project) {
|
||||
val kotlinSdkIsRequired = project.allModules().any {
|
||||
it.platform.isJs() || it.platform.isCommon()
|
||||
}
|
||||
if (kotlinSdkIsRequired) {
|
||||
KotlinSdkType.setUpIfNeeded()
|
||||
val modulesWithFacet = ProjectFacetManager.getInstance(project).getModulesWithFacet(KotlinFacetType.TYPE_ID)
|
||||
if (modulesWithFacet.isNotEmpty()) {
|
||||
KotlinSdkType.setUpIfNeeded {
|
||||
modulesWithFacet.any {
|
||||
val platform = it.platform
|
||||
platform.isJs() || platform.isNative() || platform.isCommon()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -30,10 +30,12 @@ class KotlinSdkType : SdkType("KotlinSDK") {
|
||||
val defaultHomePath: String
|
||||
get() = PathUtil.kotlinPathsForIdeaPlugin.homePath.absolutePath
|
||||
|
||||
fun setUpIfNeeded() {
|
||||
@JvmOverloads
|
||||
fun setUpIfNeeded(checkIfNeeded: () -> Boolean = { true }) {
|
||||
with(ProjectSdksModel()) {
|
||||
reset(null)
|
||||
if (sdks.any { it.sdkType is KotlinSdkType }) return
|
||||
if (!checkIfNeeded()) return //do not create Kotlin SDK
|
||||
addSdk(INSTANCE, defaultHomePath, null)
|
||||
ApplicationManager.getApplication().invokeAndWait {
|
||||
runWriteAction { apply(null, true) }
|
||||
|
||||
@@ -5,10 +5,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.framework
|
||||
|
||||
import com.intellij.facet.ProjectFacetManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.startup.StartupActivity
|
||||
import org.jetbrains.kotlin.idea.configuration.BuildSystemType
|
||||
import org.jetbrains.kotlin.idea.configuration.getBuildSystemType
|
||||
import org.jetbrains.kotlin.idea.facet.KotlinFacetType
|
||||
import org.jetbrains.kotlin.idea.project.platform
|
||||
import org.jetbrains.kotlin.idea.statistics.FUSEventGroups
|
||||
import org.jetbrains.kotlin.idea.statistics.KotlinFUSLogger
|
||||
@@ -21,27 +23,32 @@ import org.jetbrains.kotlin.platform.konan.isNative
|
||||
class TargetRetrieveActivity : StartupActivity {
|
||||
|
||||
override fun runActivity(project: Project) {
|
||||
project.allModules().forEach {
|
||||
val buildSystem = it.getBuildSystemType()
|
||||
// TODO(dsavvinov): review that
|
||||
val platform = when {
|
||||
it.platform.isJvm() -> "jvm"
|
||||
it.platform.isJs() -> "js"
|
||||
it.platform.isCommon() -> "common"
|
||||
it.platform.isNative() -> "native"
|
||||
else -> "unknown"
|
||||
}
|
||||
when {
|
||||
buildSystem == BuildSystemType.JPS ->
|
||||
KotlinFUSLogger.log(
|
||||
FUSEventGroups.JPSTarget,
|
||||
platform
|
||||
)
|
||||
buildSystem.toString().toLowerCase().contains("maven") ->
|
||||
KotlinFUSLogger.log(
|
||||
FUSEventGroups.MavenTarget,
|
||||
platform
|
||||
)
|
||||
//todo: log later to avoid loading during startup
|
||||
|
||||
val modulesWithFacet = ProjectFacetManager.getInstance(project).getModulesWithFacet(KotlinFacetType.TYPE_ID)
|
||||
if (modulesWithFacet.isNotEmpty()) {
|
||||
modulesWithFacet.forEach {
|
||||
val buildSystem = it.getBuildSystemType()
|
||||
// TODO(dsavvinov): review that
|
||||
val platform = when {
|
||||
it.platform.isJvm() -> "jvm"
|
||||
it.platform.isJs() -> "js"
|
||||
it.platform.isCommon() -> "common"
|
||||
it.platform.isNative() -> "native"
|
||||
else -> "unknown"
|
||||
}
|
||||
when {
|
||||
buildSystem == BuildSystemType.JPS ->
|
||||
KotlinFUSLogger.log(
|
||||
FUSEventGroups.JPSTarget,
|
||||
platform
|
||||
)
|
||||
buildSystem.toString().toLowerCase().contains("maven") ->
|
||||
KotlinFUSLogger.log(
|
||||
FUSEventGroups.MavenTarget,
|
||||
platform
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user