Use TopLevelDeclarations analysis mode in REPL
#KT-12564 Fixed
This commit is contained in:
@@ -73,7 +73,7 @@ class ReplCodeAnalyzer(environment: KotlinCoreEnvironment) {
|
||||
this.scriptDeclarationFactory = container.get<ScriptMutableDeclarationProviderFactory>()
|
||||
this.resolveSession = container.get<ResolveSession>()
|
||||
this.topDownAnalysisContext = TopDownAnalysisContext(
|
||||
TopDownAnalysisMode.LocalDeclarations, DataFlowInfoFactory.EMPTY, resolveSession.declarationScopeProvider
|
||||
TopDownAnalysisMode.TopLevelDeclarations, DataFlowInfoFactory.EMPTY, resolveSession.declarationScopeProvider
|
||||
)
|
||||
this.topDownAnalyzer = container.get<LazyTopDownAnalyzer>()
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
>>> fun fn(): Int {}
|
||||
error: a 'return' expression required in a function with a block body ('{...}')
|
||||
fun fn(): Int {}
|
||||
^
|
||||
@@ -0,0 +1,6 @@
|
||||
>>> if (false) 42
|
||||
>>> if (true) 42
|
||||
>>> "" + (if (true) 42)
|
||||
error: 'if' must have both main and 'else' branches if used as an expression
|
||||
"" + (if (true) 42)
|
||||
^
|
||||
@@ -0,0 +1,11 @@
|
||||
>>> val a = when(null) { }
|
||||
error: 'when' expression must be exhaustive, add necessary 'else' branch
|
||||
val a = when(null) { }
|
||||
^
|
||||
warning: the expression is unused
|
||||
val a = when(null) { }
|
||||
^
|
||||
>>> "" + when (true) { true -> 42 }
|
||||
error: 'when' expression must be exhaustive, add necessary 'false' branch or 'else' branch instead
|
||||
"" + when (true) { true -> 42 }
|
||||
^
|
||||
@@ -0,0 +1,4 @@
|
||||
>>> for (n in 1..10) foo@ { break@foo }
|
||||
error: the label '@foo' does not denote a loop
|
||||
for (n in 1..10) foo@ { break@foo }
|
||||
^
|
||||
@@ -0,0 +1,11 @@
|
||||
>>> val x = 1
|
||||
>>> x = 2
|
||||
error: val cannot be reassigned
|
||||
x = 2
|
||||
^
|
||||
>>> x++
|
||||
error: val cannot be reassigned
|
||||
x++
|
||||
^
|
||||
>>> x
|
||||
1
|
||||
@@ -0,0 +1,12 @@
|
||||
>>> val a: String
|
||||
error: property must be initialized or be abstract
|
||||
val a: String
|
||||
^
|
||||
>>> a
|
||||
error: unresolved reference: a
|
||||
a
|
||||
^
|
||||
>>> val s: String = s
|
||||
error: variable 's' must be initialized
|
||||
val s: String = s
|
||||
^
|
||||
@@ -213,6 +213,51 @@ public class ReplInterpreterTestGenerated extends AbstractReplInterpreterTest {
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/repl/controlFlow")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class ControlFlow extends AbstractReplInterpreterTest {
|
||||
public void testAllFilesPresentInControlFlow() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/repl/controlFlow"), Pattern.compile("^(.+)\\.repl$"), TargetBackend.ANY, true);
|
||||
}
|
||||
|
||||
@TestMetadata("functionWithoutReturn.repl")
|
||||
public void testFunctionWithoutReturn() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/repl/controlFlow/functionWithoutReturn.repl");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("incompleteIf.repl")
|
||||
public void testIncompleteIf() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/repl/controlFlow/incompleteIf.repl");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("incompleteWhen.repl")
|
||||
public void testIncompleteWhen() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/repl/controlFlow/incompleteWhen.repl");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("loopWithWrongLabel.repl")
|
||||
public void testLoopWithWrongLabel() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/repl/controlFlow/loopWithWrongLabel.repl");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("mutateVal.repl")
|
||||
public void testMutateVal() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/repl/controlFlow/mutateVal.repl");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("useUninitializedVal.repl")
|
||||
public void testUseUninitializedVal() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/repl/controlFlow/useUninitializedVal.repl");
|
||||
doTest(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/repl/modules")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
|
||||
Reference in New Issue
Block a user