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 {
|
||||
|
||||
private final boolean isCompiled;
|
||||
private Boolean isScript = null;
|
||||
|
||||
public KtFile(FileViewProvider viewProvider, boolean compiled) {
|
||||
super(viewProvider, KotlinLanguage.INSTANCE);
|
||||
@@ -183,9 +184,22 @@ public class KtFile extends PsiFileBase implements KtDeclarationContainer, KtAnn
|
||||
@Override
|
||||
public void setPackageName(String packageName) { }
|
||||
|
||||
@Override
|
||||
public void clearCaches() {
|
||||
super.clearCaches();
|
||||
isScript = null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
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() {
|
||||
|
||||
Reference in New Issue
Block a user