Allow 'break' and 'continue' inside 'when' in 1.4+

This commit is contained in:
Dmitry Petrov
2019-08-20 17:47:51 +03:00
parent 55cb9561c2
commit f06f6f4660
9 changed files with 136 additions and 16 deletions
@@ -47,7 +47,6 @@ import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.psi.psiUtil.isAncestor
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.BindingContextUtils
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.CompileTimeConstantUtils
import org.jetbrains.kotlin.resolve.bindingContextUtil.getEnclosingFunctionDescriptor
@@ -879,12 +878,14 @@ class ControlFlowProcessor(
if (loop == null) {
trace.report(BREAK_OR_CONTINUE_OUTSIDE_A_LOOP.on(expression))
} else {
val whenExpression = PsiTreeUtil.getParentOfType(
expression, KtWhenExpression::class.java, true,
KtLoopExpression::class.java
)
if (whenExpression != null) {
trace.report(BREAK_OR_CONTINUE_IN_WHEN.on(expression))
if (true != languageVersionSettings?.supportsFeature(LanguageFeature.AllowBreakAndContinueInsideWhen)) {
val whenExpression = PsiTreeUtil.getParentOfType(
expression, KtWhenExpression::class.java, true,
KtLoopExpression::class.java
)
if (whenExpression != null) {
trace.report(BREAK_OR_CONTINUE_IN_WHEN.on(expression))
}
}
}
}