Optimize KtFile::isScipt/getScript when file is not kts
`isScript` gets invoked for each call (see org.jetbrains.kotlin.resolve.calls.CandidateResolver#checkOuterClassMemberIsAccessible) And currently it may work for O(|top-level-declarations|), that is rather slow e.g. for native stubs for gtk #KT-17562 Fixed
This commit is contained in:
@@ -46,6 +46,7 @@ import java.util.List;
|
|||||||
public class KtFile extends PsiFileBase implements KtDeclarationContainer, KtAnnotated, KtElement, PsiClassOwner, PsiNamedElement {
|
public class KtFile extends PsiFileBase implements KtDeclarationContainer, KtAnnotated, KtElement, PsiClassOwner, PsiNamedElement {
|
||||||
|
|
||||||
private final boolean isCompiled;
|
private final boolean isCompiled;
|
||||||
|
private Boolean isScript = null;
|
||||||
|
|
||||||
public KtFile(FileViewProvider viewProvider, boolean compiled) {
|
public KtFile(FileViewProvider viewProvider, boolean compiled) {
|
||||||
super(viewProvider, KotlinLanguage.INSTANCE);
|
super(viewProvider, KotlinLanguage.INSTANCE);
|
||||||
@@ -183,9 +184,22 @@ public class KtFile extends PsiFileBase implements KtDeclarationContainer, KtAnn
|
|||||||
@Override
|
@Override
|
||||||
public void setPackageName(String packageName) { }
|
public void setPackageName(String packageName) { }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clearCaches() {
|
||||||
|
super.clearCaches();
|
||||||
|
isScript = null;
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public KtScript getScript() {
|
public KtScript getScript() {
|
||||||
return PsiTreeUtil.getChildOfType(this, KtScript.class);
|
if (isScript != null && !isScript) return null;
|
||||||
|
|
||||||
|
KtScript result = PsiTreeUtil.getChildOfType(this, KtScript.class);
|
||||||
|
if (isScript == null) {
|
||||||
|
isScript = result != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isScript() {
|
public boolean isScript() {
|
||||||
|
|||||||
Reference in New Issue
Block a user