Avoid building stubs in KtFile::getClasses for compiled files

In Gradle, JavaPsiFacade finds Kotlin compiled files as KtFile instances
and tries to obtain classes from them.

And while it returns an empty array anyway, it starts building
unnecessary stub when calling `isScript`
This commit is contained in:
Denis Zharkov
2017-11-27 11:13:43 +03:00
parent 6007d244f3
commit 4ed6928e6b
2 changed files with 4 additions and 7 deletions
@@ -168,11 +168,7 @@ open class KtFile(viewProvider: FileViewProvider, val isCompiled: Boolean) :
override fun getClasses(): Array<PsiClass> { override fun getClasses(): Array<PsiClass> {
val fileClassProvider = ServiceManager.getService(project, KtFileClassProvider::class.java) val fileClassProvider = ServiceManager.getService(project, KtFileClassProvider::class.java)
// TODO We don't currently support finding light classes for scripts return fileClassProvider?.getFileClasses(this) ?: PsiClass.EMPTY_ARRAY
return if (fileClassProvider != null && !isScript()) {
fileClassProvider.getFileClasses(this)
}
else PsiClass.EMPTY_ARRAY
} }
override fun setPackageName(packageName: String) {} override fun setPackageName(packageName: String) {}
@@ -342,8 +342,9 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
class KtFileClassProviderImpl(val lightClassGenerationSupport: LightClassGenerationSupport) : KtFileClassProvider { class KtFileClassProviderImpl(val lightClassGenerationSupport: LightClassGenerationSupport) : KtFileClassProvider {
override fun getFileClasses(file: KtFile): Array<PsiClass> { override fun getFileClasses(file: KtFile): Array<PsiClass> {
if (file.isCompiled) { // TODO We don't currently support finding light classes for scripts
return arrayOf() if (file.isCompiled || file.isScript()) {
return PsiClass.EMPTY_ARRAY
} }
val result = arrayListOf<PsiClass>() val result = arrayListOf<PsiClass>()