diff --git a/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localClass.fragment.kt b/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localClass.fragment.kt
new file mode 100644
index 00000000000..39cdc05dd8a
--- /dev/null
+++ b/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localClass.fragment.kt
@@ -0,0 +1,7 @@
+class Foo(val x: Int) {
+ fun foo() {
+ foo()
+ }
+}
+
+Foo(1)
\ No newline at end of file
diff --git a/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localClass.kt b/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localClass.kt
new file mode 100644
index 00000000000..98cc7bab0a0
--- /dev/null
+++ b/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localClass.kt
@@ -0,0 +1,3 @@
+fun test() {
+ Unit
+}
\ No newline at end of file
diff --git a/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localClass.txt b/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localClass.txt
new file mode 100644
index 00000000000..54095735ad1
--- /dev/null
+++ b/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localClass.txt
@@ -0,0 +1,21 @@
+BEFORE MODIFICATION:
+CODE FRAGMENT: {
+ local final [ResolvedTo(RAW_FIR)] class Foo : R|kotlin/Any| {
+ public [ResolvedTo(RAW_FIR)] [ContainingClassKey=Foo] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=/x] x: R|kotlin/Int|): R|Foo| {
+ super()
+ }
+
+ public final [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val x: R|kotlin/Int| = R|/x|
+ public [ResolvedTo(RAW_FIR)] [ContainingClassKey=Foo] get(): R|kotlin/Int|
+
+ public final [ResolvedTo(RAW_FIR)] fun foo(): R|kotlin/Unit| {
+ this@R|/Foo|.R|/foo|()
+ }
+
+ }
+
+ R|/Foo.Foo|(Int(1))
+}
+
+AFTER MODIFICATION:
+CODE FRAGMENT: { LAZY_BLOCK }
diff --git a/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localFunction.fragment.kt b/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localFunction.fragment.kt
new file mode 100644
index 00000000000..273f803b6d8
--- /dev/null
+++ b/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localFunction.fragment.kt
@@ -0,0 +1,7 @@
+fun foo() {}
+
+fun bar() {
+ foo()
+}
+
+bar()
\ No newline at end of file
diff --git a/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localFunction.kt b/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localFunction.kt
new file mode 100644
index 00000000000..98cc7bab0a0
--- /dev/null
+++ b/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localFunction.kt
@@ -0,0 +1,3 @@
+fun test() {
+ Unit
+}
\ No newline at end of file
diff --git a/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localFunction.txt b/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localFunction.txt
new file mode 100644
index 00000000000..c712fecbd00
--- /dev/null
+++ b/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localFunction.txt
@@ -0,0 +1,14 @@
+BEFORE MODIFICATION:
+CODE FRAGMENT: {
+ local final? [ResolvedTo(RAW_FIR)] fun foo(): R|kotlin/Unit| {
+ }
+
+ local final? [ResolvedTo(RAW_FIR)] fun bar(): R|kotlin/Unit| {
+ R|/foo|()
+ }
+
+ R|/bar|()
+}
+
+AFTER MODIFICATION:
+CODE FRAGMENT: { LAZY_BLOCK }
diff --git a/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/simple.fragment.kt b/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/simple.fragment.kt
new file mode 100644
index 00000000000..a9cc6a1b619
--- /dev/null
+++ b/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/simple.fragment.kt
@@ -0,0 +1 @@
+foo
\ No newline at end of file
diff --git a/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/simple.kt b/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/simple.kt
new file mode 100644
index 00000000000..87edd81e747
--- /dev/null
+++ b/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/simple.kt
@@ -0,0 +1,10 @@
+package test
+
+class Foo
+
+fun test() {
+ val foo = Foo()
+ consume(foo)
+}
+
+fun consume(foo: Foo) {}
\ No newline at end of file
diff --git a/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/simple.txt b/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/simple.txt
new file mode 100644
index 00000000000..abcfce30800
--- /dev/null
+++ b/analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/simple.txt
@@ -0,0 +1,7 @@
+BEFORE MODIFICATION:
+CODE FRAGMENT: {
+ R|/foo|
+}
+
+AFTER MODIFICATION:
+CODE FRAGMENT: { LAZY_BLOCK }
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractLowLevelApiCodeFragmentTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractLowLevelApiCodeFragmentTest.kt
index 18516f99085..9d7e3da4e2e 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractLowLevelApiCodeFragmentTest.kt
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractLowLevelApiCodeFragmentTest.kt
@@ -8,12 +8,12 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator
import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
-import org.jetbrains.kotlin.psi.KtCodeFragment
-import org.jetbrains.kotlin.psi.KtDeclaration
-import org.jetbrains.kotlin.psi.KtFile
-import org.jetbrains.kotlin.psi.KtPsiFactory
+import org.jetbrains.kotlin.psi.*
+import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives
+import org.jetbrains.kotlin.test.model.TestFile
import org.jetbrains.kotlin.test.services.TestModuleStructure
import org.jetbrains.kotlin.test.services.TestServices
+import org.jetbrains.kotlin.test.services.sourceFileProvider
import java.io.File
abstract class AbstractLowLevelApiCodeFragmentTest : AbstractLowLevelApiSingleFileTest() {
@@ -22,20 +22,30 @@ abstract class AbstractLowLevelApiCodeFragmentTest : AbstractLowLevelApiSingleFi
abstract fun doTest(ktCodeFragment: KtCodeFragment, moduleStructure: TestModuleStructure, testServices: TestServices)
final override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) {
- val contextElement = testServices.expressionMarkerProvider.getElementOfTypeAtCaret(ktFile)
+ val contextElement = testServices.expressionMarkerProvider.getElementOfTypeAtCaret(ktFile)
- val fragmentText = moduleStructure.originalTestDataFiles.single()
+ val fragmentFile = moduleStructure.originalTestDataFiles.single()
.run { File(parent, "$nameWithoutExtension.fragment.$extension") }
- .readText()
- val isBlockFragment = fragmentText.any { it == '\n' }
+ val fragmentTestFile = TestFile(
+ "fragment.kt",
+ fragmentFile.readText(),
+ fragmentFile,
+ startLineNumberInOriginalFile = 0,
+ isAdditional = true,
+ RegisteredDirectives.Empty
+ )
+
+ val processedFragmentText = testServices.sourceFileProvider.getContentOfSourceFile(fragmentTestFile)
+
+ val isBlockFragment = processedFragmentText.any { it == '\n' }
val project = ktFile.project
val factory = KtPsiFactory(project, markGenerated = false)
val ktCodeFragment = when {
- isBlockFragment -> factory.createBlockCodeFragment(fragmentText, contextElement)
- else -> factory.createExpressionCodeFragment(fragmentText, contextElement)
+ isBlockFragment -> factory.createBlockCodeFragment(processedFragmentText, contextElement)
+ else -> factory.createExpressionCodeFragment(processedFragmentText, contextElement)
}
doTest(ktCodeFragment, moduleStructure, testServices)
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractCodeFragmentInBlockModificationTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractCodeFragmentInBlockModificationTest.kt
new file mode 100644
index 00000000000..3271f6a5294
--- /dev/null
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractCodeFragmentInBlockModificationTest.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure
+
+import org.jetbrains.kotlin.analysis.low.level.api.fir.AbstractLowLevelApiCodeFragmentTest
+import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
+import org.jetbrains.kotlin.psi.KtCodeFragment
+import org.jetbrains.kotlin.psi.KtElement
+import org.jetbrains.kotlin.test.services.TestModuleStructure
+import org.jetbrains.kotlin.test.services.TestServices
+import org.jetbrains.kotlin.test.services.assertions
+import kotlin.test.assertNull
+
+abstract class AbstractCodeFragmentInBlockModificationTest : AbstractLowLevelApiCodeFragmentTest() {
+ override fun doTest(ktCodeFragment: KtCodeFragment, moduleStructure: TestModuleStructure, testServices: TestServices) {
+ val targetElement = testServices.expressionMarkerProvider
+ .getBottommostSelectedElementOfType(ktCodeFragment, KtElement::class.java)
+
+ assertNull(targetElement.getNonLocalReanalyzableContainingDeclaration())
+
+ val (before, after) = testInBlockModification(ktCodeFragment, ktCodeFragment, testServices)
+ val actualText = "BEFORE MODIFICATION:\n$before\nAFTER MODIFICATION:\n$after"
+
+ testServices.assertions.assertEqualsToTestDataFileSibling(actualText)
+ }
+}
\ No newline at end of file
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractInBlockModificationTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractInBlockModificationTest.kt
index 9c1d5e195a6..aebde3c5784 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractInBlockModificationTest.kt
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractInBlockModificationTest.kt
@@ -16,7 +16,8 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.Analys
import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
-import org.jetbrains.kotlin.psi.KtDeclaration
+import org.jetbrains.kotlin.psi.KtAnnotated
+import org.jetbrains.kotlin.psi.KtCodeFragment
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
import org.jetbrains.kotlin.test.services.TestModuleStructure
@@ -32,43 +33,51 @@ abstract class AbstractInBlockModificationTest : AbstractLowLevelApiSingleFileTe
val declaration = selectedElement.getNonLocalReanalyzableContainingDeclaration()
val actual = if (declaration != null) {
- resolveWithCaches(ktFile) { firSession ->
- val firDeclarationBefore = declaration.getOrBuildFirOfType(firSession)
- val declarationTextBefore = firDeclarationBefore.render()
-
- declaration.modifyBody()
- invalidateAfterInBlockModification(declaration)
-
- val declarationTextAfterModification = firDeclarationBefore.render()
- testServices.assertions.assertNotEquals(declarationTextBefore, declarationTextAfterModification) {
- "The declaration before and after modification must be in different state"
- }
-
- val firDeclarationAfter = declaration.getOrBuildFirOfType(firSession)
- testServices.assertions.assertEquals(firDeclarationBefore, firDeclarationAfter) {
- "The declaration before and after must be the same"
- }
-
- val declarationTextAfter = firDeclarationAfter.render()
- testServices.assertions.assertEquals(declarationTextBefore, declarationTextAfter) {
- "The declaration must have the same in the resolved state"
- }
-
- "BEFORE MODIFICATION:\n$declarationTextBefore\nAFTER MODIFICATION:\n$declarationTextAfterModification"
- }
+ val (before, after) = testInBlockModification(ktFile, declaration, testServices)
+ "BEFORE MODIFICATION:\n$before\nAFTER MODIFICATION:\n$after"
} else {
"IN-BLOCK MODIFICATION IS NOT APPLICABLE FOR THIS PLACE"
}
testServices.assertions.assertEqualsToTestDataFileSibling(actual)
}
+}
- /**
- * Emulate modification inside the body
- */
- private fun KtDeclaration.modifyBody() {
- parentsWithSelf.filterIsInstance().forEach {
- it.subtreeChanged()
+internal fun testInBlockModification(file: KtFile, declaration: KtAnnotated, testServices: TestServices): Pair {
+ return resolveWithCaches(file) { firSession ->
+ val firDeclarationBefore = declaration.getOrBuildFirOfType(firSession)
+ val declarationTextBefore = firDeclarationBefore.render()
+
+ declaration.modifyBody()
+ invalidateAfterInBlockModification(declaration)
+
+ val declarationTextAfterModification = firDeclarationBefore.render()
+ testServices.assertions.assertNotEquals(declarationTextBefore, declarationTextAfterModification) {
+ "The declaration before and after modification must be in different state"
+ }
+
+ val firDeclarationAfter = declaration.getOrBuildFirOfType(firSession)
+ testServices.assertions.assertEquals(firDeclarationBefore, firDeclarationAfter) {
+ "The declaration before and after must be the same"
+ }
+
+ val declarationTextAfter = firDeclarationAfter.render()
+ testServices.assertions.assertEquals(declarationTextBefore, declarationTextAfter) {
+ "The declaration must have the same in the resolved state"
+ }
+
+ Pair(declarationTextBefore, declarationTextAfterModification)
+ }
+}
+
+/**
+ * Emulate modification inside the body
+ */
+private fun KtAnnotated.modifyBody() {
+ for (parent in parentsWithSelf) {
+ when (parent) {
+ is ASTDelegatePsiElement -> parent.subtreeChanged()
+ is KtCodeFragment -> parent.subtreeChanged()
}
}
}
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/CodeFragmentInBlockModificationTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/CodeFragmentInBlockModificationTestGenerated.java
new file mode 100644
index 00000000000..538ca384294
--- /dev/null
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/CodeFragmentInBlockModificationTestGenerated.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure;
+
+import com.intellij.testFramework.TestDataPath;
+import org.jetbrains.kotlin.test.util.KtTestUtil;
+import org.jetbrains.kotlin.test.TestMetadata;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+import java.io.File;
+import java.util.regex.Pattern;
+
+/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.analysis.api.GenerateAnalysisApiTestsKt}. DO NOT MODIFY MANUALLY */
+@SuppressWarnings("all")
+@TestMetadata("analysis/low-level-api-fir/testdata/inBlockModification/codeFragments")
+@TestDataPath("$PROJECT_ROOT")
+public class CodeFragmentInBlockModificationTestGenerated extends AbstractCodeFragmentInBlockModificationTest {
+ @Test
+ public void testAllFilesPresentInCodeFragments() throws Exception {
+ KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/inBlockModification/codeFragments"), Pattern.compile("^([^.]+)\\.kt$"), null, false);
+ }
+
+ @Test
+ @TestMetadata("localClass.kt")
+ public void testLocalClass() throws Exception {
+ runTest("analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localClass.kt");
+ }
+
+ @Test
+ @TestMetadata("localFunction.kt")
+ public void testLocalFunction() throws Exception {
+ runTest("analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/localFunction.kt");
+ }
+
+ @Test
+ @TestMetadata("simple.kt")
+ public void testSimple() throws Exception {
+ runTest("analysis/low-level-api-fir/testdata/inBlockModification/codeFragments/simple.kt");
+ }
+}
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/OutOfContentRootInBlockModificationTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/OutOfContentRootInBlockModificationTestGenerated.java
index f412c369544..47fb201a881 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/OutOfContentRootInBlockModificationTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/OutOfContentRootInBlockModificationTestGenerated.java
@@ -21,7 +21,7 @@ import java.util.regex.Pattern;
public class OutOfContentRootInBlockModificationTestGenerated extends AbstractOutOfContentRootInBlockModificationTest {
@Test
public void testAllFilesPresentInInBlockModification() throws Exception {
- KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/inBlockModification"), Pattern.compile("^(.+)\\.(kt)$"), null, true);
+ KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/inBlockModification"), Pattern.compile("^(.+)\\.(kt)$"), null, false);
}
@Test
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/ScriptInBlockModificationTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/ScriptInBlockModificationTestGenerated.java
index a579cdccef9..e0cafbaf0c8 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/ScriptInBlockModificationTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/ScriptInBlockModificationTestGenerated.java
@@ -21,7 +21,7 @@ import java.util.regex.Pattern;
public class ScriptInBlockModificationTestGenerated extends AbstractScriptInBlockModificationTest {
@Test
public void testAllFilesPresentInInBlockModification() throws Exception {
- KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/inBlockModification"), Pattern.compile("^(.+)\\.(kts)$"), null, true);
+ KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/inBlockModification"), Pattern.compile("^(.+)\\.(kts)$"), null, false);
}
@Test
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/SourceInBlockModificationTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/SourceInBlockModificationTestGenerated.java
index f9f2db51208..bfbe7aab65c 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/SourceInBlockModificationTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/SourceInBlockModificationTestGenerated.java
@@ -21,7 +21,7 @@ import java.util.regex.Pattern;
public class SourceInBlockModificationTestGenerated extends AbstractSourceInBlockModificationTest {
@Test
public void testAllFilesPresentInInBlockModification() throws Exception {
- KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/inBlockModification"), Pattern.compile("^(.+)\\.(kt)$"), null, true);
+ KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/inBlockModification"), Pattern.compile("^(.+)\\.(kt)$"), null, false);
}
@Test
diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt
index f8123cd9b97..f5324dadd7c 100644
--- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt
+++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt
@@ -202,6 +202,11 @@ class FirRenderer(
printer.popIndent()
}
+ override fun visitCodeFragment(codeFragment: FirCodeFragment) {
+ printer.print("CODE FRAGMENT:")
+ bodyRenderer?.renderBody(codeFragment.block)
+ }
+
override fun visitFileAnnotationsContainer(fileAnnotationsContainer: FirFileAnnotationsContainer) {
if (fileAnnotationsContainerRenderer != null) {
fileAnnotationsContainerRenderer.render(fileAnnotationsContainer)
diff --git a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/firLowLevel.kt b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/firLowLevel.kt
index cdfbb893d5b..c4fa409da9e 100644
--- a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/firLowLevel.kt
+++ b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/firLowLevel.kt
@@ -15,12 +15,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostic.AbstractSource
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostic.compiler.based.AbstractDiagnosticCompilerTestDataTest
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostic.compiler.based.AbstractLLFirPreresolvedReversedDiagnosticCompilerTestDataSpecTest
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostic.compiler.based.AbstractLLFirPreresolvedReversedDiagnosticCompilerTestDataTest
-import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.AbstractOutOfContentRootFileStructureTest
-import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.AbstractOutOfContentRootInBlockModificationTest
-import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.AbstractScriptFileStructureTest
-import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.AbstractScriptInBlockModificationTest
-import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.AbstractSourceFileStructureTest
-import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.AbstractSourceInBlockModificationTest
+import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.*
import org.jetbrains.kotlin.analysis.low.level.api.fir.resolve.AbstractErrorResistanceTest
import org.jetbrains.kotlin.analysis.low.level.api.fir.resolve.AbstractOutOfContentRootWholeFileResolvePhaseTest
import org.jetbrains.kotlin.analysis.low.level.api.fir.resolve.AbstractScriptWholeFileResolvePhaseTest
@@ -69,15 +64,19 @@ internal fun TestGroupSuite.generateFirLowLevelApiTests() {
}
testClass {
- model("inBlockModification", pattern = TestGeneratorUtil.KT)
+ model("inBlockModification", recursive = false, pattern = TestGeneratorUtil.KT)
}
testClass {
- model("inBlockModification", pattern = TestGeneratorUtil.KT)
+ model("inBlockModification", recursive = false, pattern = TestGeneratorUtil.KT)
}
testClass {
- model("inBlockModification", pattern = TestGeneratorUtil.KTS)
+ model("inBlockModification", recursive = false, pattern = TestGeneratorUtil.KTS)
+ }
+
+ testClass {
+ model("inBlockModification/codeFragments", recursive = false, pattern = TestGeneratorUtil.KT_WITHOUT_DOTS_IN_NAME)
}
testClass {