Skip to content

Commit 8c000ae

Browse files
dimonchik0036Space Team
authored andcommitted
[LC] FakeFileForLightClass: align modification stamp with underlying file
Even though light classes don't support modification, it is still important to provide realistic modification timestamps. In this particular case, the previous implementation used a virtual file of the original file instead of the file itself to provide the result ^KT-82546 Fixed
1 parent 63e4c5b commit 8c000ae

File tree

4 files changed

+57
-2
lines changed

4 files changed

+57
-2
lines changed

analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/elements/FakeFileForLightClass.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
2+
* Copyright 2010-2025 JetBrains s.r.o. and Kotlin Programming Language contributors.
33
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
44
*/
55

@@ -45,6 +45,8 @@ open class FakeFileForLightClass(
4545
return javaFileStub
4646
}
4747

48+
override fun getModificationStamp(): Long = ktFile.modificationStamp
49+
4850
override fun getStub() = createFakeJavaFileStub()
4951

5052
override fun getClasses() = arrayOf(lightClass)

analysis/symbol-light-classes/build.gradle.kts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@ dependencies {
3333

3434
sourceSets {
3535
"main" { projectDefault() }
36-
"test" { generatedTestDir() }
36+
"test" {
37+
projectDefault()
38+
generatedTestDir()
39+
}
3740
"testFixtures" { projectDefault() }
3841
}
3942

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package foo
2+
3+
// A class to have a light class class
4+
class SimpleClass
5+
6+
// A function to have a facade light class
7+
fun simpleFunction() {
8+
9+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* Copyright 2010-2025 JetBrains s.r.o. and Kotlin Programming Language contributors.
3+
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
4+
*/
5+
6+
package org.jetbrains.kotlin.light.classes.symbol
7+
8+
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator
9+
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiExecutionTest
10+
import org.jetbrains.kotlin.asJava.findFacadeClass
11+
import org.jetbrains.kotlin.asJava.toLightClass
12+
import org.jetbrains.kotlin.psi.KtClassOrObject
13+
import org.jetbrains.kotlin.psi.KtFile
14+
import org.jetbrains.kotlin.test.services.TestServices
15+
import org.jetbrains.kotlin.test.services.assertions
16+
import org.junit.jupiter.api.Test
17+
18+
class SymbolLightClassesCustomTest : AbstractAnalysisApiExecutionTest(
19+
testDirPathString = "analysis/symbol-light-classes/testData/custom",
20+
) {
21+
override val configurator = AnalysisApiFirSourceTestConfigurator(analyseInDependentSession = false)
22+
23+
@Test
24+
fun fileModificationTracker(file: KtFile, testServices: TestServices) {
25+
val facadeLightClass = file.findFacadeClass() ?: error("Facade light class was not found")
26+
val classLightClass = (file.declarations.first() as KtClassOrObject).toLightClass() ?: error("Light class was not found")
27+
val fakeFilesWithModificationStamp = listOf(facadeLightClass, classLightClass).map { lightClass ->
28+
lightClass.containingFile to lightClass.containingFile.modificationStamp
29+
}
30+
31+
// Emulate file modification
32+
file.clearCaches()
33+
34+
for ((fakeFile, originalStamp) in fakeFilesWithModificationStamp) {
35+
val newStamp = fakeFile.modificationStamp
36+
testServices.assertions.assertTrue(originalStamp < newStamp) {
37+
"Expected that $fakeFile will have a modification stamp greater than $originalStamp, but $newStamp was found"
38+
}
39+
}
40+
}
41+
}

0 commit comments

Comments
 (0)