Skip to content

Commit baa415e

Browse files
IJPL-221480 [refactoring] move injected file language retrieval to DataContextUtils so it can be reused
GitOrigin-RevId: efe0617b17b519208fed801b9b9c9c7be5b9123f
1 parent 61541cd commit baa415e

File tree

2 files changed

+35
-31
lines changed

2 files changed

+35
-31
lines changed

platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/DataContextUtils.kt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,15 @@ package com.intellij.internal.statistic.collectors.fus
44
import com.intellij.lang.Language
55
import com.intellij.openapi.actionSystem.CommonDataKeys
66
import com.intellij.openapi.actionSystem.DataContext
7+
import com.intellij.openapi.actionSystem.InjectedDataKeys
78
import com.intellij.openapi.actionSystem.PlatformCoreDataKeys
9+
import com.intellij.openapi.application.runReadAction
810
import com.intellij.openapi.fileTypes.FileType
911
import com.intellij.openapi.fileTypes.FileTypeRegistry
1012
import com.intellij.openapi.fileTypes.LanguageFileType
13+
import com.intellij.openapi.project.Project
1114
import com.intellij.openapi.vfs.VirtualFile
15+
import com.intellij.psi.PsiDocumentManager
1216
import org.jetbrains.annotations.ApiStatus
1317

1418
@ApiStatus.Internal
@@ -25,6 +29,15 @@ object DataContextUtils {
2529
?: CommonDataKeys.LANGUAGE.getData(dataContext)
2630
}
2731

32+
/**
33+
* Returns language from [InjectedDataKeys.EDITOR], [InjectedDataKeys.PSI_FILE]
34+
* or [CommonDataKeys.PSI_FILE] if there's no information about injected fragment
35+
*/
36+
fun getInjectedOrFileLanguage(project: Project?, dataContext: DataContext): Language? {
37+
val injected = getInjectedLanguage(dataContext, project)
38+
return injected ?: getFileLanguage(dataContext)
39+
}
40+
2841
/**
2942
* Returns file type from [CommonDataKeys.PSI_FILE]
3043
* or by file name from [CommonDataKeys.VIRTUAL_FILE] or [PlatformCoreDataKeys.FILE_EDITOR]
@@ -70,4 +83,21 @@ object DataContextUtils {
7083
}
7184
return null
7285
}
86+
87+
private fun getInjectedLanguage(dataContext: DataContext, project: Project?): Language? {
88+
val file = InjectedDataKeys.PSI_FILE.getData(dataContext)
89+
if (file != null) {
90+
return file.language
91+
}
92+
if (project != null) {
93+
val editor = InjectedDataKeys.EDITOR.getData(dataContext)
94+
if (editor != null && !project.isDisposed) {
95+
val injectedFile = runReadAction { PsiDocumentManager.getInstance(project).getCachedPsiFile(editor.document) }
96+
if (injectedFile != null) {
97+
return injectedFile.language
98+
}
99+
}
100+
}
101+
return null
102+
}
73103
}

platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/actions/persistence/ActionsCollectorImpl.kt

Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ import com.intellij.openapi.actionSystem.ex.ActionUtil
1919
import com.intellij.openapi.actionSystem.impl.FusAwareAction
2020
import com.intellij.openapi.actionSystem.impl.Utils
2121
import com.intellij.openapi.application.runReadAction
22+
import com.intellij.openapi.application.ReadAction
2223
import com.intellij.openapi.components.service
2324
import com.intellij.openapi.fileTypes.FileType
2425
import com.intellij.openapi.keymap.Keymap
2526
import com.intellij.openapi.project.DumbService
2627
import com.intellij.openapi.project.Project
2728
import com.intellij.openapi.util.text.StringUtil
28-
import com.intellij.psi.PsiDocumentManager
2929
import com.intellij.util.TimeoutUtil
3030
import it.unimi.dsi.fastutil.objects.Object2LongMaps
3131
import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap
@@ -66,7 +66,7 @@ class ActionsCollectorImpl : ActionsCollector() {
6666
ActionsEventLogGroup.ACTION_UPDATED.log(project) {
6767
val info = getPluginInfo(action.javaClass)
6868
val actionId = addActionClass(this, action, info)
69-
var language = getInjectedOrFileLanguage(project, dataContext)
69+
var language = DataContextUtils.getInjectedOrFileLanguage(project, dataContext)
7070
if (language == null) {
7171
language = Language.ANY
7272
}
@@ -151,7 +151,7 @@ class ActionsCollectorImpl : ActionsCollector() {
151151
ActionsEventLogGroup.ACTION_GROUP_EXPANDED.log(project) {
152152
val info = getPluginInfo(action.javaClass)
153153
val size = result?.count { it !is Separator } ?: -1
154-
val language = getInjectedOrFileLanguage(project, dataContext) ?: Language.ANY
154+
val language = DataContextUtils.getInjectedOrFileLanguage(project, dataContext) ?: Language.ANY
155155
addActionClass(this, action, info)
156156
add(EventFields.PluginInfo.with(info))
157157
add(EventFields.Language.with(language))
@@ -299,7 +299,7 @@ class ActionsCollectorImpl : ActionsCollector() {
299299
val stats = Stats(
300300
project = project,
301301
fileLanguage = DataContextUtils.getFileLanguage(context),
302-
injectedFileLanguage = getInjectedOrFileLanguage(project, context),
302+
injectedFileLanguage = DataContextUtils.getInjectedOrFileLanguage(project, context),
303303
fileType = DataContextUtils.getFileType(context)
304304
)
305305
ourStats[event] = stats
@@ -349,36 +349,10 @@ class ActionsCollectorImpl : ActionsCollector() {
349349
val dataContext = Utils.getCachedOnlyDataContext(event.dataContext)
350350
val language = DataContextUtils.getFileLanguage(dataContext)
351351
data.add(EventFields.CurrentFile.with(language ?: contextBefore))
352-
val injectedLanguage = getInjectedOrFileLanguage(project, dataContext)
352+
val injectedLanguage = DataContextUtils.getInjectedOrFileLanguage(project, dataContext)
353353
data.add(EventFields.Language.with(injectedLanguage ?: injectedContextBefore))
354354
val fileType = DataContextUtils.getFileType(dataContext)
355355
data.add(EventFields.FileType.with(fileType ?: fileTypeBefore))
356356
}
357-
358-
/**
359-
* Returns language from [InjectedDataKeys.EDITOR], [InjectedDataKeys.PSI_FILE]
360-
* or [CommonDataKeys.PSI_FILE] if there's no information about injected fragment
361-
*/
362-
private fun getInjectedOrFileLanguage(project: Project?, dataContext: DataContext): Language? {
363-
val injected = getInjectedLanguage(dataContext, project)
364-
return injected ?: DataContextUtils.getFileLanguage(dataContext)
365-
}
366-
367-
private fun getInjectedLanguage(dataContext: DataContext, project: Project?): Language? {
368-
val file = InjectedDataKeys.PSI_FILE.getData(dataContext)
369-
if (file != null) {
370-
return file.language
371-
}
372-
if (project != null) {
373-
val editor = InjectedDataKeys.EDITOR.getData(dataContext)
374-
if (editor != null && !project.isDisposed) {
375-
val injectedFile = runReadAction { PsiDocumentManager.getInstance(project).getCachedPsiFile(editor.document) }
376-
if (injectedFile != null) {
377-
return injectedFile.language
378-
}
379-
}
380-
}
381-
return null
382-
}
383357
}
384358
}

0 commit comments

Comments
 (0)