From 753a9a1c3658dbdd59b07bcf5517e8d11fd48e4d Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Tue, 28 May 2019 15:51:15 +0300 Subject: [PATCH] Fix performance regression caused by contracts Do not obtain all children from KtBlockExpression when you only need the first one. It might be crucial for a huge blocks of code --- .../psi/src/org/jetbrains/kotlin/psi/KtBlockExpression.java | 5 +++++ .../psi/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/KtBlockExpression.java b/compiler/psi/src/org/jetbrains/kotlin/psi/KtBlockExpression.java index c5b84806c0c..d9ce4e6a867 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/KtBlockExpression.java +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/KtBlockExpression.java @@ -123,6 +123,11 @@ public class KtBlockExpression extends LazyParseablePsiElement implements KtElem return substitute != null ? substitute : super.getParent(); } + @Nullable + public KtExpression getFirstStatement() { + return findChildByClass(KtExpression.class); + } + @ReadOnly @NotNull public List getStatements() { diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt b/compiler/psi/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt index b37daf38e8d..d34c75a4158 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt @@ -323,7 +323,7 @@ fun KtElement.isFirstStatement(): Boolean { element = parent parent = parent.parent } - return parent is KtBlockExpression && parent.children.first { it is KtElement } == element + return parent is KtBlockExpression && parent.firstStatement == element } @@ -671,4 +671,4 @@ fun KtExpression.topParenthesizedParentOrMe(): KtExpression { result = result.parent.safeAs() ?: break } return result -} \ No newline at end of file +}