[psi] decompiled code doesn't have function bodies

otherwise AST for decompiled code would be loaded by findChildByClass call

^ KTIJ-25047
This commit is contained in:
Anna Kozlova
2023-05-12 09:06:27 +02:00
committed by teamcity
parent 360e7d6156
commit 71844f81f4
3 changed files with 23 additions and 8 deletions
@@ -23,10 +23,8 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiModifiableCodeBlock; import com.intellij.psi.PsiModifiableCodeBlock;
import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.AstLoadingFilter;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.KtNodeTypes;
import org.jetbrains.kotlin.lexer.KtTokens; import org.jetbrains.kotlin.lexer.KtTokens;
import org.jetbrains.kotlin.psi.psiUtil.KtPsiUtilKt; import org.jetbrains.kotlin.psi.psiUtil.KtPsiUtilKt;
import org.jetbrains.kotlin.psi.stubs.KotlinFunctionStub; import org.jetbrains.kotlin.psi.stubs.KotlinFunctionStub;
@@ -142,8 +140,14 @@ public class KtNamedFunction extends KtTypeParameterListOwnerStub<KotlinFunction
@Override @Override
public KtBlockExpression getBodyBlockExpression() { public KtBlockExpression getBodyBlockExpression() {
KotlinFunctionStub stub = getStub(); KotlinFunctionStub stub = getStub();
if (stub != null && !(stub.hasBlockBody() && stub.hasBody())) { if (stub != null) {
return null; if (!(stub.hasBlockBody() && stub.hasBody())) {
return null;
}
if (getContainingKtFile().isCompiled()) {
//don't load ast
return null;
}
} }
KtExpression bodyExpression = findChildByClass(KtExpression.class); KtExpression bodyExpression = findChildByClass(KtExpression.class);
@@ -106,8 +106,13 @@ public class KtPropertyAccessor extends KtDeclarationStub<KotlinPropertyAccessor
@Override @Override
public KtBlockExpression getBodyBlockExpression() { public KtBlockExpression getBodyBlockExpression() {
KotlinPropertyAccessorStub stub = getStub(); KotlinPropertyAccessorStub stub = getStub();
if (stub != null && !(stub.hasBlockBody() && stub.hasBody())) { if (stub != null) {
return null; if (!(stub.hasBlockBody() && stub.hasBody())) {
return null;
}
if (getContainingKtFile().isCompiled()) {
return null;
}
} }
KtExpression bodyExpression = findChildByClass(KtExpression.class); KtExpression bodyExpression = findChildByClass(KtExpression.class);
@@ -30,8 +30,14 @@ class KtSecondaryConstructor : KtConstructor<KtSecondaryConstructor> {
override fun getContainingClassOrObject() = parent.parent as KtClassOrObject override fun getContainingClassOrObject() = parent.parent as KtClassOrObject
override fun getBodyExpression(): KtBlockExpression? { override fun getBodyExpression(): KtBlockExpression? {
if (stub?.hasBody() == false) { val stub = stub
return null if (stub != null) {
if (stub.hasBody() == false) {
return null
}
if (containingKtFile.isCompiled) {
return null
}
} }
return findChildByClass(KtBlockExpression::class.java) return findChildByClass(KtBlockExpression::class.java)
} }