Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
硅谷海盗
kotlin
提交
87a65c0e
K
kotlin
项目概览
硅谷海盗
/
kotlin
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kotlin
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
87a65c0e
编写于
6月 07, 2020
作者:
I
Ilya Kirillov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
FIR IDE: throw PCE in highlighter & reference resolver if on EDT thread
As resolve is not allowed in EDT thread
上级
19043537
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
23 addition
and
5 deletion
+23
-5
idea/idea-fir/src/org/jetbrains/kotlin/idea/fir/highlighter/KotlinFirPsiChecker.kt
...brains/kotlin/idea/fir/highlighter/KotlinFirPsiChecker.kt
+6
-1
idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtFirReferenceResolver.kt
...etbrains/kotlin/idea/references/KtFirReferenceResolver.kt
+6
-1
idea/tests/org/jetbrains/kotlin/idea/resolve/AbstractReferenceResolveTest.kt
...rains/kotlin/idea/resolve/AbstractReferenceResolveTest.kt
+11
-3
未找到文件。
idea/idea-fir/src/org/jetbrains/kotlin/idea/fir/highlighter/KotlinFirPsiChecker.kt
浏览文件 @
87a65c0e
...
...
@@ -6,6 +6,8 @@
package
org.jetbrains.kotlin.idea.fir.highlighter
import
com.intellij.lang.annotation.AnnotationHolder
import
com.intellij.openapi.application.ApplicationManager
import
com.intellij.openapi.progress.ProcessCanceledException
import
com.intellij.psi.PsiElement
import
org.jetbrains.kotlin.diagnostics.Diagnostic
import
org.jetbrains.kotlin.idea.fir.highlighter.visitors.FirAfterResolveHighlightingVisitor
...
...
@@ -24,7 +26,10 @@ class KotlinFirPsiChecker : AbstractKotlinPsiChecker() {
override
fun
annotateElement
(
element
:
PsiElement
,
containingFile
:
KtFile
,
holder
:
AnnotationHolder
)
{
if
(
element
!
is
KtElement
)
return
val
analysisSession
=
FirAnalysisSession
()
if
(
ApplicationManager
.
getApplication
().
isDispatchThread
)
{
throw
ProcessCanceledException
()
}
val
analysisSession
=
FirAnalysisSession
(
element
)
highlightDiagnostics
(
element
,
analysisSession
,
holder
)
...
...
idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtFirReferenceResolver.kt
浏览文件 @
87a65c0e
...
...
@@ -5,6 +5,8 @@
package
org.jetbrains.kotlin.idea.references
import
com.intellij.openapi.application.ApplicationManager
import
com.intellij.openapi.progress.ProcessCanceledException
import
com.intellij.psi.PsiElement
import
com.intellij.psi.PsiElementResolveResult
import
com.intellij.psi.ResolveResult
...
...
@@ -17,7 +19,10 @@ object KtFirReferenceResolver : ResolveCache.PolyVariantResolver<KtReference> {
override
fun
resolve
(
ref
:
KtReference
,
incompleteCode
:
Boolean
):
Array
<
ResolveResult
>
{
check
(
ref
is
FirKtReference
)
{
"reference should be FirKtReference, but was ${ref::class}"
}
check
(
ref
is
AbstractKtReference
<
*
>)
{
"reference should be AbstractKtReference, but was ${ref::class}"
}
val
analysisSession
=
FirAnalysisSession
()
if
(
ApplicationManager
.
getApplication
().
isDispatchThread
)
{
throw
ProcessCanceledException
()
}
val
analysisSession
=
FirAnalysisSession
(
ref
.
expression
)
val
resolveToPsiElements
=
ref
.
getResolvedToPsi
(
analysisSession
)
return
resolveToPsiElements
.
map
{
KotlinResolveResult
(
it
)
}.
toTypedArray
()
}
...
...
idea/tests/org/jetbrains/kotlin/idea/resolve/AbstractReferenceResolveTest.kt
浏览文件 @
87a65c0e
/*
* Copyright 2010-20
19
JetBrains s.r.o. and Kotlin Programming Language contributors.
* Copyright 2010-20
20
JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package
org.jetbrains.kotlin.idea.resolve
import
com.google.common.collect.Lists
import
com.intellij.openapi.application.ApplicationManager
import
com.intellij.psi.PsiElement
import
com.intellij.psi.PsiPolyVariantReference
import
com.intellij.psi.PsiReference
...
...
@@ -16,9 +17,11 @@ import org.jetbrains.kotlin.idea.completion.test.configureWithExtraFile
import
org.jetbrains.kotlin.idea.test.KotlinLightPlatformCodeInsightFixtureTestCase
import
org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
import
org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import
org.jetbrains.kotlin.idea.util.application.runReadAction
import
org.jetbrains.kotlin.test.InTextDirectivesUtils
import
org.jetbrains.kotlin.test.util.renderAsGotoImplementation
import
org.junit.Assert
import
java.util.concurrent.Callable
import
kotlin.test.assertTrue
abstract
class
AbstractReferenceResolveTest
:
KotlinLightPlatformCodeInsightFixtureTestCase
()
{
...
...
@@ -66,7 +69,9 @@ abstract class AbstractReferenceResolveTest : KotlinLightPlatformCodeInsightFixt
assertTrue
(
psiReference
is
PsiPolyVariantReference
)
psiReference
as
PsiPolyVariantReference
val
results
=
wrapReference
(
psiReference
).
multiResolve
(
true
)
val
results
=
executeOnPooledThreadInReadAction
{
wrapReference
(
psiReference
).
multiResolve
(
true
)
}
val
actualResolvedTo
=
Lists
.
newArrayList
<
String
>()
for
(
result
in
results
)
{
...
...
@@ -128,7 +133,7 @@ abstract class AbstractReferenceResolveTest : KotlinLightPlatformCodeInsightFixt
)
{
val
expectedString
=
expectedResolveData
.
referenceString
if
(
psiReference
!=
null
)
{
val
resolvedTo
=
psiReference
.
resolve
()
val
resolvedTo
=
executeOnPooledThreadInReadAction
{
psiReference
.
resolve
()
}
if
(
resolvedTo
!=
null
)
{
checkResolvedTo
(
resolvedTo
)
val
resolvedToElementStr
=
replacePlaceholders
(
resolvedTo
.
renderAsGotoImplementation
())
...
...
@@ -161,3 +166,6 @@ abstract class AbstractReferenceResolveTest : KotlinLightPlatformCodeInsightFixt
}
}
}
private
fun
<
R
>
executeOnPooledThreadInReadAction
(
action
:
()
->
R
):
R
=
ApplicationManager
.
getApplication
().
executeOnPooledThread
<
R
>
{
runReadAction
(
action
)
}.
get
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录