Add test about dependsOn dependency and stdlib-common
This commit is contained in:
committed by
Space Team
parent
6c062b0cea
commit
520ae725d1
+11
@@ -0,0 +1,11 @@
|
||||
package test.pkg
|
||||
|
||||
actual class PointerEvent {
|
||||
actual val keyboardModifiers = PointerKeyboardModifiers(42)
|
||||
}
|
||||
|
||||
internal actual typealias NativePointerKeyboardModifiers = Int
|
||||
|
||||
fun test() {
|
||||
val m = PointerEvent().keyboardModifiers.packedValue
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package test.pkg
|
||||
|
||||
expect class PointerEvent {
|
||||
val keyboardModifiers: PointerKeyboardModifiers
|
||||
}
|
||||
|
||||
expect class NativePointerKeyboardModifiers
|
||||
|
||||
@kotlin.jvm.JvmInline
|
||||
value class PointerKeyboardModifiers(val packedValue: NativePointerKeyboardModifiers)
|
||||
+68
-2
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.analysis.api.standalone.fir.test.cases.session.buil
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
|
||||
import org.jetbrains.kotlin.analysis.api.analyze
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.annotations
|
||||
import org.jetbrains.kotlin.analysis.api.calls.KtSuccessCallInfo
|
||||
import org.jetbrains.kotlin.analysis.api.calls.successfulFunctionCallOrNull
|
||||
import org.jetbrains.kotlin.analysis.api.calls.symbol
|
||||
@@ -15,6 +16,7 @@ import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeTokenProvider
|
||||
import org.jetbrains.kotlin.analysis.api.standalone.KtAlwaysAccessibleLifetimeTokenProvider
|
||||
import org.jetbrains.kotlin.analysis.api.standalone.buildStandaloneAnalysisAPISession
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtNonErrorClassType
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.builder.buildKtLibraryModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.builder.buildKtSdkModule
|
||||
@@ -26,8 +28,7 @@ import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.platform.CommonPlatforms
|
||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||
import org.jetbrains.kotlin.psi.KtCallExpression
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType
|
||||
import org.junit.jupiter.api.Assertions
|
||||
import org.junit.jupiter.api.Test
|
||||
@@ -72,6 +73,71 @@ class StandaloneSessionBuilderTest : TestWithDisposable() {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testJvmInlineOnCommon() {
|
||||
// Example from https://youtrack.jetbrains.com/issue/KT-55085
|
||||
val root = "jvmInlineOnCommon"
|
||||
lateinit var sourceModule: KtSourceModule
|
||||
val session = buildStandaloneAnalysisAPISession(disposable) {
|
||||
registerProjectService(KtLifetimeTokenProvider::class.java, KtAlwaysAccessibleLifetimeTokenProvider())
|
||||
|
||||
buildKtModuleProvider {
|
||||
platform = CommonPlatforms.defaultCommonPlatform
|
||||
val stdlib = addModule(
|
||||
buildKtLibraryModule {
|
||||
addBinaryRoot(Paths.get("dist/common/kotlin-stdlib-common.jar"))
|
||||
platform = CommonPlatforms.defaultCommonPlatform
|
||||
libraryName = "stdlib"
|
||||
}
|
||||
)
|
||||
val commonModule = addModule(
|
||||
buildKtSourceModule {
|
||||
addSourceRoot(testDataPath(root).resolve("commonMain"))
|
||||
addRegularDependency(stdlib)
|
||||
platform = CommonPlatforms.defaultCommonPlatform
|
||||
moduleName = "common"
|
||||
}
|
||||
)
|
||||
sourceModule = addModule(
|
||||
buildKtSourceModule {
|
||||
addSourceRoot(testDataPath(root).resolve("androidMain"))
|
||||
addDependsOnDependency(commonModule)
|
||||
platform = JvmPlatforms.defaultJvmPlatform
|
||||
moduleName = "android"
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
val ktFile = session.modulesWithFiles.getValue(sourceModule).single() as KtFile
|
||||
|
||||
// Test dependsOn dependency: expect in the common module, actual "typealias" in the platform-specific module
|
||||
val testFunction = ktFile.findDescendantOfType<KtFunction>()!!
|
||||
val localVariable = testFunction.findDescendantOfType<KtProperty>()!!
|
||||
analyze(localVariable) {
|
||||
val localVariableSymbol = localVariable.getVariableSymbol()
|
||||
val type = localVariableSymbol.returnType as KtNonErrorClassType
|
||||
Assertions.assertEquals(
|
||||
ClassId(FqName("test.pkg"), FqName("NativePointerKeyboardModifiers"), isLocal = false),
|
||||
type.classId
|
||||
)
|
||||
// expanded to `actual` `typealias`
|
||||
val expandedType = type.fullyExpandedType
|
||||
Assertions.assertTrue(expandedType.isInt)
|
||||
}
|
||||
|
||||
// Test stdlib-common: @JvmInline in the common module
|
||||
val actualClass = ktFile.findDescendantOfType<KtClassOrObject>()!!
|
||||
val actualProperty = actualClass.findDescendantOfType<KtProperty>()!!
|
||||
analyze(actualProperty) {
|
||||
val symbol = actualProperty.getVariableSymbol()
|
||||
val type = symbol.returnType as KtNonErrorClassType
|
||||
Assertions.assertEquals(
|
||||
ClassId.fromString("kotlin/jvm/JvmInline"),
|
||||
type.classSymbol.annotations.single().classId
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testResolveAgainstCommonKlib() {
|
||||
val root = "resolveAgainstCommonKLib"
|
||||
|
||||
Reference in New Issue
Block a user