Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
硅谷海盗
kotlin
提交
86e52f45
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,体验更适合开发者的 AI 搜索 >>
提交
86e52f45
编写于
6月 01, 2018
作者:
P
Pavel V. Talanov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
J2K JavaElementFinder: prettify code
上级
6cea8434
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
19 addition
and
47 deletion
+19
-47
compiler/light-classes/src/org/jetbrains/kotlin/asJava/finder/JavaElementFinder.kt
...c/org/jetbrains/kotlin/asJava/finder/JavaElementFinder.kt
+19
-47
未找到文件。
compiler/light-classes/src/org/jetbrains/kotlin/asJava/finder/JavaElementFinder.kt
浏览文件 @
86e52f45
...
...
@@ -16,7 +16,6 @@
package
org.jetbrains.kotlin.asJava.finder
import
com.google.common.collect.Collections2
import
com.google.common.collect.Sets
import
com.intellij.openapi.extensions.Extensions
import
com.intellij.openapi.project.Project
...
...
@@ -25,7 +24,6 @@ import com.intellij.psi.*
import
com.intellij.psi.search.GlobalSearchScope
import
com.intellij.psi.util.PsiUtilCore
import
com.intellij.util.SmartList
import
com.intellij.util.containers.ContainerUtil
import
org.jetbrains.kotlin.asJava.KotlinAsJavaSupport
import
org.jetbrains.kotlin.asJava.toLightClass
import
org.jetbrains.kotlin.load.java.JvmAbi
...
...
@@ -41,16 +39,9 @@ class JavaElementFinder(
private
val
project
:
Project
,
private
val
kotlinAsJavaSupport
:
KotlinAsJavaSupport
)
:
PsiElementFinder
(),
KotlinFinderMarker
{
private
val
psiManager
:
PsiManager
private
val
psiManager
=
PsiManager
.
getInstance
(
project
)
init
{
this
.
psiManager
=
PsiManager
.
getInstance
(
project
)
}
override
fun
findClass
(
qualifiedName
:
String
,
scope
:
GlobalSearchScope
):
PsiClass
?
{
val
allClasses
=
findClasses
(
qualifiedName
,
scope
)
return
if
(
allClasses
.
size
>
0
)
allClasses
[
0
]
else
null
}
override
fun
findClass
(
qualifiedName
:
String
,
scope
:
GlobalSearchScope
)
=
findClasses
(
qualifiedName
,
scope
).
firstOrNull
()
override
fun
findClasses
(
qualifiedNameString
:
String
,
scope
:
GlobalSearchScope
):
Array
<
PsiClass
>
{
if
(!
isValidJavaFqName
(
qualifiedNameString
))
{
...
...
@@ -65,7 +56,7 @@ class JavaElementFinder(
answer
.
addAll
(
kotlinAsJavaSupport
.
getFacadeClasses
(
qualifiedName
,
scope
))
answer
.
addAll
(
kotlinAsJavaSupport
.
getKotlinInternalClasses
(
qualifiedName
,
scope
))
return
sortByClasspath
(
answer
,
scope
).
toTypedArray
()
return
answer
.
sortByClasspath
(
scope
).
toTypedArray
()
}
// Finds explicitly declared classes and objects, not package classes
...
...
@@ -93,13 +84,9 @@ class JavaElementFinder(
for
(
classOrObject
in
kotlinAsJavaSupport
.
findClassOrObjectDeclarations
(
qualifiedName
.
parent
(),
scope
))
{
//NOTE: can't filter out more interfaces right away because decompiled declarations do not have member bodies
if
(
classOrObject
is
KtClass
&&
classOrObject
.
isInterface
())
{
val
interfaceClass
=
classOrObject
.
toLightClass
()
if
(
interfaceClass
!=
null
)
{
val
implsClass
=
interfaceClass
!!
.
findInnerClassByName
(
JvmAbi
.
DEFAULT_IMPLS_CLASS_NAME
,
false
)
if
(
implsClass
!=
null
)
{
answer
.
add
(
implsClass
)
}
}
val
interfaceClass
=
classOrObject
.
toLightClass
()
?:
continue
val
implsClass
=
interfaceClass
.
findInnerClassByName
(
JvmAbi
.
DEFAULT_IMPLS_CLASS_NAME
,
false
)
?:
continue
answer
.
add
(
implsClass
)
}
}
}
...
...
@@ -113,10 +100,8 @@ class JavaElementFinder(
answer
.
addAll
(
kotlinAsJavaSupport
.
getFacadeNames
(
packageFQN
,
scope
))
for
(
declaration
in
declarations
)
{
val
name
=
declaration
.
name
if
(
name
!=
null
)
{
answer
.
add
(
name
)
}
val
name
=
declaration
.
name
?:
continue
answer
.
add
(
name
)
}
return
answer
...
...
@@ -138,13 +123,8 @@ class JavaElementFinder(
}
override
fun
getSubPackages
(
psiPackage
:
PsiPackage
,
scope
:
GlobalSearchScope
):
Array
<
PsiPackage
>
{
val
packageFQN
=
FqName
(
psiPackage
.
qualifiedName
)
val
subpackages
=
kotlinAsJavaSupport
.
getSubPackages
(
packageFQN
,
scope
)
val
answer
=
Collections2
.
transform
<
FqName
,
PsiPackage
>(
subpackages
)
{
input
->
KtLightPackage
(
psiManager
,
input
,
scope
)
}
return
answer
.
toTypedArray
()
val
subpackages
=
kotlinAsJavaSupport
.
getSubPackages
(
FqName
(
psiPackage
.
qualifiedName
),
scope
)
return
subpackages
.
map
{
KtLightPackage
(
psiManager
,
it
,
scope
)
}.
toTypedArray
()
}
override
fun
getClasses
(
psiPackage
:
PsiPackage
,
scope
:
GlobalSearchScope
):
Array
<
PsiClass
>
{
...
...
@@ -155,29 +135,25 @@ class JavaElementFinder(
val
declarations
=
kotlinAsJavaSupport
.
findClassOrObjectDeclarationsInPackage
(
packageFQN
,
scope
)
for
(
declaration
in
declarations
)
{
val
aClass
=
declaration
.
toLightClass
()
if
(
aClass
!=
null
)
{
answer
.
add
(
aClass
)
}
val
aClass
=
declaration
.
toLightClass
()
?:
continue
answer
.
add
(
aClass
)
}
return
sortByClasspath
(
answer
,
scope
).
toTypedArray
()
return
answer
.
sortByClasspath
(
scope
).
toTypedArray
()
}
override
fun
getPackageFiles
(
psiPackage
:
PsiPackage
,
scope
:
GlobalSearchScope
):
Array
<
PsiFile
>
{
val
packageFQN
=
FqName
(
psiPackage
.
qualifiedName
)
// TODO: this does not take into account JvmPackageName annotation
val
result
=
kotlinAsJavaSupport
.
findFilesForPackage
(
packageFQN
,
scope
)
return
result
.
toTypedArray
()
return
kotlinAsJavaSupport
.
findFilesForPackage
(
packageFQN
,
scope
).
toTypedArray
()
}
override
fun
getPackageFilesFilter
(
psiPackage
:
PsiPackage
,
scope
:
GlobalSearchScope
):
Condition
<
PsiFile
>?
{
return
Condition
{
input
->
if
(
input
!
is
KtFile
)
{
true
}
else
{
psiPackage
.
qualifiedName
==
(
input
as
KtFile
).
packageFqName
.
asString
()
}
else
{
psiPackage
.
qualifiedName
==
input
.
packageFqName
.
asString
()
}
}
}
...
...
@@ -202,17 +178,13 @@ class JavaElementFinder(
f1
===
f2
->
0
f1
==
null
->
-
1
f2
==
null
->
1
else
->
searchScope
.
compare
(
f2
!!
,
f1
!!
)
else
->
searchScope
.
compare
(
f2
,
f1
)
}
}
}
private
fun
sortByClasspath
(
classes
:
List
<
PsiClass
>,
searchScope
:
GlobalSearchScope
):
Collection
<
PsiClass
>
{
if
(
classes
.
size
>
1
)
{
ContainerUtil
.
quickSort
(
classes
,
byClasspathComparator
(
searchScope
))
}
return
classes
private
fun
List
<
PsiClass
>.
sortByClasspath
(
searchScope
:
GlobalSearchScope
):
Collection
<
PsiClass
>
{
return
this
.
sortedWith
(
byClasspathComparator
(
searchScope
))
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录