Don't force getting body psi if null is predicted by stubs but allow it for resolve

We can't avoid loading AST in general, because there're no stubs for
expression bodies.
This commit is contained in:
Nikolay Krasko
2018-11-08 15:08:35 +03:00
parent e2269e13af
commit 2b8a81c5a8
2 changed files with 18 additions and 2 deletions
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.psi.psiUtil.KtPsiUtilKt;
import org.jetbrains.kotlin.psi.stubs.KotlinFunctionStub;
import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes;
import org.jetbrains.kotlin.psi.typeRefHelpers.TypeRefHelpersKt;
import org.jetbrains.kotlin.util.AstLoadingFilter;
import java.util.Collections;
import java.util.List;
@@ -122,7 +123,14 @@ public class KtNamedFunction extends KtTypeParameterListOwnerStub<KotlinFunction
@Override
@Nullable
public KtExpression getBodyExpression() {
return findChildByClass(KtExpression.class);
KotlinFunctionStub stub = getStub();
if (stub != null && !stub.hasBody()) {
return null;
}
return AstLoadingFilter.forceAllowTreeLoading(this.getContainingFile(), () ->
findChildByClass(KtExpression.class)
);
}
@Override
@@ -24,6 +24,7 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.lexer.KtTokens;
import org.jetbrains.kotlin.psi.stubs.KotlinPropertyAccessorStub;
import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes;
import org.jetbrains.kotlin.util.AstLoadingFilter;
import java.util.Collections;
import java.util.List;
@@ -86,7 +87,14 @@ public class KtPropertyAccessor extends KtDeclarationStub<KotlinPropertyAccessor
@Nullable
@Override
public KtExpression getBodyExpression() {
return findChildByClass(KtExpression.class);
KotlinPropertyAccessorStub stub = getStub();
if (stub != null && !stub.hasBody()) {
return null;
}
return AstLoadingFilter.forceAllowTreeLoading(this.getContainingFile(), () ->
findChildByClass(KtExpression.class)
);
}
@Override