K2: add inline JVM target version checker
#KT-60777 Fixed
This commit is contained in:
committed by
Space Team
parent
d475371394
commit
3bb2ea10b6
+8
@@ -4884,6 +4884,14 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirJvmErrors.INLINE_FROM_HIGHER_PLATFORM) { firDiagnostic ->
|
||||
InlineFromHigherPlatformImpl(
|
||||
firDiagnostic.a,
|
||||
firDiagnostic.b,
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON) { firDiagnostic ->
|
||||
CannotAllUnderImportFromSingletonImpl(
|
||||
firDiagnostic.a,
|
||||
|
||||
+6
@@ -3401,6 +3401,12 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
val type: KtType
|
||||
}
|
||||
|
||||
interface InlineFromHigherPlatform : KtFirDiagnostic<PsiElement> {
|
||||
override val diagnosticClass get() = InlineFromHigherPlatform::class
|
||||
val inlinedBytecodeVersion: String
|
||||
val currentModuleBytecodeVersion: String
|
||||
}
|
||||
|
||||
interface CannotAllUnderImportFromSingleton : KtFirDiagnostic<KtImportDirective> {
|
||||
override val diagnosticClass get() = CannotAllUnderImportFromSingleton::class
|
||||
val objectName: Name
|
||||
|
||||
+7
@@ -4100,6 +4100,13 @@ internal class InefficientEqualsOverridingInValueClassImpl(
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<KtNamedFunction>(firDiagnostic, token), KtFirDiagnostic.InefficientEqualsOverridingInValueClass
|
||||
|
||||
internal class InlineFromHigherPlatformImpl(
|
||||
override val inlinedBytecodeVersion: String,
|
||||
override val currentModuleBytecodeVersion: String,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.InlineFromHigherPlatform
|
||||
|
||||
internal class CannotAllUnderImportFromSingletonImpl(
|
||||
override val objectName: Name,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
|
||||
@@ -115,6 +115,7 @@ fun <F> prepareJvmSessions(
|
||||
},
|
||||
extensionRegistrars,
|
||||
configuration.languageVersionSettings,
|
||||
configuration.get(JVMConfigurationKeys.JVM_TARGET, JvmTarget.DEFAULT),
|
||||
configuration.get(CommonConfigurationKeys.LOOKUP_TRACKER),
|
||||
configuration.get(CommonConfigurationKeys.ENUM_WHEN_TRACKER),
|
||||
configuration.get(CommonConfigurationKeys.IMPORT_TRACKER),
|
||||
|
||||
+7
@@ -193,6 +193,13 @@ object JVM_DIAGNOSTICS_LIST : DiagnosticList("FirJvmErrors") {
|
||||
}
|
||||
}
|
||||
|
||||
val INLINE by object : DiagnosticGroup("Inline") {
|
||||
val INLINE_FROM_HIGHER_PLATFORM by error<PsiElement> {
|
||||
parameter<String>("inlinedBytecodeVersion")
|
||||
parameter<String>("currentModuleBytecodeVersion")
|
||||
}
|
||||
}
|
||||
|
||||
val MISC by object : DiagnosticGroup("Misc") {
|
||||
val INAPPLICABLE_JVM_FIELD by error<KtAnnotationEntry> {
|
||||
parameter<String>("message")
|
||||
|
||||
+3
@@ -127,6 +127,9 @@ object FirJvmErrors {
|
||||
// Suspension Point
|
||||
val SUSPENSION_POINT_INSIDE_CRITICAL_SECTION: KtDiagnosticFactory1<FirCallableSymbol<*>> by error1<PsiElement, FirCallableSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
|
||||
|
||||
// Inline
|
||||
val INLINE_FROM_HIGHER_PLATFORM: KtDiagnosticFactory2<String, String> by error2<PsiElement, String, String>()
|
||||
|
||||
// Misc
|
||||
val INAPPLICABLE_JVM_FIELD: KtDiagnosticFactory1<String> by error1<KtAnnotationEntry, String>()
|
||||
val INAPPLICABLE_JVM_FIELD_WARNING: KtDiagnosticFactory1<String> by warning1<KtAnnotationEntry, String>()
|
||||
|
||||
+7
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.ILLEGAL_JV
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INAPPLICABLE_JVM_FIELD
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INAPPLICABLE_JVM_FIELD_WARNING
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INAPPLICABLE_JVM_NAME
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INLINE_FROM_HIGHER_PLATFORM
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INNER_JVM_RECORD
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.INTERFACE_CANT_CALL_DEFAULT_METHOD_VIA_SUPER
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.JAVA_MODULE_DOES_NOT_DEPEND_ON_MODULE
|
||||
@@ -303,6 +304,12 @@ object FirJvmErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
||||
"The ''{0}'' suspension point is inside a critical section.",
|
||||
DECLARATION_NAME
|
||||
)
|
||||
map.put(
|
||||
INLINE_FROM_HIGHER_PLATFORM,
|
||||
"Cannot inline bytecode built with {0} into bytecode that is being built with {1}. Please specify proper ''-jvm-target'' option.",
|
||||
STRING,
|
||||
STRING
|
||||
)
|
||||
map.put(
|
||||
CONCURRENT_HASH_MAP_CONTAINS_OPERATOR,
|
||||
"Method 'contains' from ConcurrentHashMap might have unexpected semantics: it calls 'containsValue' instead of 'containsKey'. " +
|
||||
|
||||
+1
@@ -21,6 +21,7 @@ object JvmExpressionCheckers : ExpressionCheckers() {
|
||||
FirJavaSamInterfaceConstructorReferenceChecker,
|
||||
FirQualifiedAccessJavaNullabilityWarningChecker,
|
||||
FirJvmModuleAccessibilityQualifiedAccessChecker,
|
||||
FirJvmInlineTargetQualifiedAccessChecker,
|
||||
)
|
||||
|
||||
override val propertyAccessExpressionCheckers: Set<FirPropertyAccessExpressionChecker>
|
||||
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Copyright 2010-2024 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.fir.analysis.jvm.checkers.expression
|
||||
|
||||
import org.jetbrains.kotlin.config.JvmTarget
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirQualifiedAccessExpressionChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.isLhsOfAssignment
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors
|
||||
import org.jetbrains.kotlin.fir.containingClassLookupTag
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isInline
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.sourceElement
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.toReference
|
||||
import org.jetbrains.kotlin.fir.java.jvmTargetProvider
|
||||
import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||
import org.jetbrains.kotlin.load.kotlin.FileBasedKotlinClass
|
||||
import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource
|
||||
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement
|
||||
|
||||
object FirJvmInlineTargetQualifiedAccessChecker : FirQualifiedAccessExpressionChecker(MppCheckerKind.Common) {
|
||||
override fun check(expression: FirQualifiedAccessExpression, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
val callableSymbol = expression.calleeReference.toResolvedCallableSymbol() ?: return
|
||||
if (callableSymbol.origin.fromSource) return
|
||||
|
||||
val isInline = when (callableSymbol) {
|
||||
is FirFunctionSymbol<*> -> callableSymbol.isInline
|
||||
is FirPropertySymbol -> {
|
||||
val accessor = if (expression.isLhsOfAssignment(context)) callableSymbol.setterSymbol else callableSymbol.getterSymbol
|
||||
accessor != null && accessor.isInline
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
|
||||
if (isInline) {
|
||||
checkInlineTargetVersion(callableSymbol, context, reporter, expression)
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkInlineTargetVersion(
|
||||
callableSymbol: FirCallableSymbol<*>,
|
||||
context: CheckerContext,
|
||||
reporter: DiagnosticReporter,
|
||||
element: FirElement,
|
||||
) {
|
||||
val currentJvmTarget = context.session.jvmTargetProvider?.jvmTarget ?: return
|
||||
|
||||
val containingClass = callableSymbol.containingClassLookupTag()
|
||||
val binaryClass = if (containingClass != null) {
|
||||
val containingClassSymbol = containingClass.toFirRegularClassSymbol(context.session) ?: return
|
||||
|
||||
@OptIn(SymbolInternals::class)
|
||||
val sourceElement = containingClassSymbol.fir.sourceElement as? KotlinJvmBinarySourceElement ?: return
|
||||
sourceElement.binaryClass
|
||||
} else {
|
||||
val containerSource = callableSymbol.containerSource as? JvmPackagePartSource ?: return
|
||||
containerSource.knownJvmBinaryClass
|
||||
}
|
||||
|
||||
val inlinedVersion = (binaryClass as? FileBasedKotlinClass)?.classVersion ?: return
|
||||
val currentVersion = currentJvmTarget.majorVersion
|
||||
|
||||
if (currentVersion < inlinedVersion) {
|
||||
reporter.reportOn(
|
||||
element.toReference(context.session)?.source ?: element.source,
|
||||
FirJvmErrors.INLINE_FROM_HIGHER_PLATFORM,
|
||||
JvmTarget.getDescription(inlinedVersion),
|
||||
JvmTarget.getDescription(currentVersion),
|
||||
context,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
@@ -561,6 +561,7 @@ val FIR_NON_SUPPRESSIBLE_ERROR_NAMES: Set<String> = setOf(
|
||||
"INLINE_PROPERTY_WITH_BACKING_FIELD",
|
||||
"ILLEGAL_INLINE_PARAMETER_MODIFIER",
|
||||
"INLINE_SUSPEND_FUNCTION_TYPE_UNSUPPORTED",
|
||||
"INLINE_FROM_HIGHER_PLATFORM",
|
||||
"CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON",
|
||||
"PACKAGE_CANNOT_BE_IMPORTED",
|
||||
"CANNOT_BE_IMPORTED",
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.session
|
||||
|
||||
import org.jetbrains.kotlin.config.JvmTarget
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
@@ -13,6 +14,7 @@ import org.jetbrains.kotlin.fir.SessionConfiguration
|
||||
import org.jetbrains.kotlin.fir.checkers.registerJvmCheckers
|
||||
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
|
||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
||||
import org.jetbrains.kotlin.fir.java.FirJvmTargetProvider
|
||||
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
||||
import org.jetbrains.kotlin.fir.java.JavaSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.java.deserialization.JvmClassFileBasedSymbolProvider
|
||||
@@ -88,6 +90,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
|
||||
createIncrementalCompilationSymbolProviders: (FirSession) -> FirJvmIncrementalCompilationSymbolProviders?,
|
||||
extensionRegistrars: List<FirExtensionRegistrar>,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
jvmTarget: JvmTarget,
|
||||
lookupTracker: LookupTracker?,
|
||||
enumWhenTracker: EnumWhenTracker?,
|
||||
importTracker: ImportTracker?,
|
||||
@@ -108,6 +111,7 @@ object FirJvmSessionFactory : FirAbstractSessionFactory() {
|
||||
registerExtraComponents = {
|
||||
it.registerDefaultComponents()
|
||||
it.registerJavaComponents(projectEnvironment.getJavaModuleResolver(), predefinedJavaComponents)
|
||||
it.register(FirJvmTargetProvider::class, FirJvmTargetProvider(jvmTarget))
|
||||
registerExtraComponents(it)
|
||||
},
|
||||
registerExtraCheckers = { it.registerJvmCheckers() },
|
||||
|
||||
+1
@@ -79,6 +79,7 @@ object FirSessionFactoryHelper {
|
||||
{ incrementalCompilationContext?.createSymbolProviders(it, mainModuleData, projectEnvironment) },
|
||||
extensionRegistrars,
|
||||
languageVersionSettings,
|
||||
JvmTarget.DEFAULT,
|
||||
lookupTracker,
|
||||
enumWhenTracker,
|
||||
importTracker,
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Copyright 2010-2024 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.fir.java
|
||||
|
||||
import org.jetbrains.kotlin.config.JvmTarget
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSessionComponent
|
||||
|
||||
class FirJvmTargetProvider(val jvmTarget: JvmTarget) : FirSessionComponent
|
||||
|
||||
val FirSession.jvmTargetProvider: FirJvmTargetProvider? by FirSession.nullableSessionComponentAccessor()
|
||||
+8
-2
@@ -17,7 +17,9 @@ var allInline: Int
|
||||
inline get() = 1
|
||||
inline set(varue) { varue.hashCode() }
|
||||
|
||||
|
||||
inline var inlineProperty: Int
|
||||
get() = 1
|
||||
set(varue) { varue.hashCode() }
|
||||
|
||||
open class Base {
|
||||
inline fun inlineFunBase(p: () -> Unit) {
|
||||
@@ -35,4 +37,8 @@ open class Base {
|
||||
var allInlineBase: Int
|
||||
inline get() = 1
|
||||
inline set(varue) { varue.hashCode() }
|
||||
}
|
||||
|
||||
inline var inlinePropertyBase: Int
|
||||
get() = 1
|
||||
set(varue) { varue.hashCode() }
|
||||
}
|
||||
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:6:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
inlineFun {}
|
||||
^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:7:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
inlineGetter
|
||||
^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:11:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
inlineSetter = 1
|
||||
^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:13:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
allInline
|
||||
^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:14:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
allInline = 1
|
||||
^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:16:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
inlineProperty
|
||||
^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:17:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
inlineProperty = 1
|
||||
^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:20:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
base.inlineFunBase {}
|
||||
^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:21:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
base.inlineGetterBase
|
||||
^^^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:25:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
base.inlineSetterBase = 1
|
||||
^^^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:27:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
base.allInlineBase
|
||||
^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:28:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
base.allInlineBase = 1
|
||||
^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:30:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
base.inlinePropertyBase
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:31:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
base.inlinePropertyBase = 1
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:38:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
inlineFunBase {}
|
||||
^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:39:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
inlineGetterBase
|
||||
^^^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:43:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
inlineSetterBase = 1
|
||||
^^^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:45:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
allInlineBase
|
||||
^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:46:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
allInlineBase = 1
|
||||
^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:48:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
inlinePropertyBase
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:49:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option.
|
||||
inlinePropertyBase = 1
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
COMPILATION_ERROR
|
||||
+30
-12
@@ -16,40 +16,58 @@ compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:14:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
allInline = 1
|
||||
^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:17:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:16:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
inlineProperty
|
||||
^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:17:5: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
inlineProperty = 1
|
||||
^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:20:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
base.inlineFunBase {}
|
||||
^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:18:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:21:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
base.inlineGetterBase
|
||||
^^^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:19:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:22:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
base.inlineGetterBase = 1
|
||||
^^^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:22:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:25:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
base.inlineSetterBase = 1
|
||||
^^^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:24:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:27:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
base.allInlineBase
|
||||
^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:25:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:28:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
base.allInlineBase = 1
|
||||
^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:32:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:30:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
base.inlinePropertyBase
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:31:10: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
base.inlinePropertyBase = 1
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:38:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
inlineFunBase {}
|
||||
^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:33:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:39:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
inlineGetterBase
|
||||
^^^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:34:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:40:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
inlineGetterBase = 1
|
||||
^^^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:37:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:43:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
inlineSetterBase = 1
|
||||
^^^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:39:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:45:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
allInlineBase
|
||||
^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:40:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:46:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
allInlineBase = 1
|
||||
^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:48:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
inlinePropertyBase
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/wrongInlineTarget/source.kt:49:9: error: cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option
|
||||
inlinePropertyBase = 1
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
COMPILATION_ERROR
|
||||
|
||||
+9
@@ -13,6 +13,9 @@ fun baz() {
|
||||
allInline
|
||||
allInline = 1
|
||||
|
||||
inlineProperty
|
||||
inlineProperty = 1
|
||||
|
||||
val base = Base()
|
||||
base.inlineFunBase {}
|
||||
base.inlineGetterBase
|
||||
@@ -23,6 +26,9 @@ fun baz() {
|
||||
|
||||
base.allInlineBase
|
||||
base.allInlineBase = 1
|
||||
|
||||
base.inlinePropertyBase
|
||||
base.inlinePropertyBase = 1
|
||||
}
|
||||
|
||||
|
||||
@@ -38,5 +44,8 @@ class Derived : Base() {
|
||||
|
||||
allInlineBase
|
||||
allInlineBase = 1
|
||||
|
||||
inlinePropertyBase
|
||||
inlinePropertyBase = 1
|
||||
}
|
||||
}
|
||||
|
||||
+3
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
|
||||
import org.jetbrains.kotlin.cli.jvm.config.jvmModularRoots
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.JvmTarget
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.container.topologicalSort
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
@@ -367,6 +368,8 @@ open class FirFrontendFacade(
|
||||
createIncrementalCompilationSymbolProviders = { null },
|
||||
extensionRegistrars,
|
||||
languageVersionSettings,
|
||||
jvmTarget = testServices.compilerConfigurationProvider.getCompilerConfiguration(module)
|
||||
.get(JVMConfigurationKeys.JVM_TARGET, JvmTarget.DEFAULT),
|
||||
lookupTracker = null,
|
||||
enumWhenTracker = null,
|
||||
importTracker = null,
|
||||
|
||||
+1
-2
@@ -491,8 +491,7 @@ abstract class AbstractCompileKotlinAgainstCustomBinariesTest : AbstractKotlinCo
|
||||
compileKotlin("source.kt", tmpdir, listOf(library1))
|
||||
}
|
||||
|
||||
// KT-60777 K2: missing INLINE_FROM_HIGHER_PLATFORM
|
||||
fun testWrongInlineTarget() = muteForK2 {
|
||||
fun testWrongInlineTarget() {
|
||||
val library = compileLibrary("library", additionalOptions = listOf("-jvm-target", "11"))
|
||||
|
||||
compileKotlin("source.kt", tmpdir, listOf(library), additionalOptions = listOf("-jvm-target", "1.8"))
|
||||
|
||||
Reference in New Issue
Block a user