diff --git a/buildSrc/src/main/kotlin/pill/parser.kt b/buildSrc/src/main/kotlin/pill/parser.kt index 0f2fcb905bd..99784ac96fa 100644 --- a/buildSrc/src/main/kotlin/pill/parser.kt +++ b/buildSrc/src/main/kotlin/pill/parser.kt @@ -64,8 +64,6 @@ data class PSourceRootKotlinOptions( val apiVersion: String?, val languageVersion: String?, val jvmTarget: String?, - val addCompilerBuiltIns: Boolean?, - val loadBuiltInsFromDependencies: Boolean?, val extraArguments: List ) { fun intersect(other: PSourceRootKotlinOptions) = PSourceRootKotlinOptions( @@ -75,8 +73,6 @@ data class PSourceRootKotlinOptions( if (apiVersion == other.apiVersion) apiVersion else null, if (languageVersion == other.languageVersion) languageVersion else null, if (jvmTarget == other.jvmTarget) jvmTarget else null, - if (addCompilerBuiltIns == other.addCompilerBuiltIns) addCompilerBuiltIns else null, - if (loadBuiltInsFromDependencies == other.loadBuiltInsFromDependencies) loadBuiltInsFromDependencies else null, extraArguments.intersect(other.extraArguments).toList() ) } @@ -328,15 +324,11 @@ private fun getKotlinOptions(kotlinCompileTask: Any): PSourceRootKotlinOptions? fun parseBoolean(name: String) = compileArguments.contains("-$name") fun parseString(name: String) = compileArguments.dropWhile { it != "-$name" }.drop(1).firstOrNull() - val addCompilerBuiltins = "Xadd-compiler-builtins" - val loadBuiltinsFromDependencies = "Xload-builtins-from-dependencies" - fun isOptionForScriptingCompilerPlugin(option: String) = option.startsWith("-Xplugin=") && option.contains("kotlin-scripting-compiler") val extraArguments = compileArguments.filter { it.startsWith("-X") && !isOptionForScriptingCompilerPlugin(it) - && it != "-$addCompilerBuiltins" && it != "-$loadBuiltinsFromDependencies" } return PSourceRootKotlinOptions( @@ -346,8 +338,6 @@ private fun getKotlinOptions(kotlinCompileTask: Any): PSourceRootKotlinOptions? parseString("api-version"), parseString("language-version"), parseString("jvm-target"), - parseBoolean(addCompilerBuiltins), - parseBoolean(loadBuiltinsFromDependencies), extraArguments ) } diff --git a/buildSrc/src/main/kotlin/pill/render.kt b/buildSrc/src/main/kotlin/pill/render.kt index 7eb711687cb..90f2282c4f5 100644 --- a/buildSrc/src/main/kotlin/pill/render.kt +++ b/buildSrc/src/main/kotlin/pill/render.kt @@ -87,8 +87,6 @@ private fun renderModule(project: PProject, module: PModule) = PFile( kotlinCompileOptions.noReflect.option("noReflect") kotlinCompileOptions.moduleName.option("moduleName") xml("option", "name" to "jvmTarget", "value" to platformVersion) - kotlinCompileOptions.addCompilerBuiltIns.option("addCompilerBuiltIns") - kotlinCompileOptions.loadBuiltInsFromDependencies.option("loadBuiltInsFromDependencies") kotlinCompileOptions.languageVersion.option("languageVersion") kotlinCompileOptions.apiVersion.option("apiVersion") @@ -204,4 +202,4 @@ private fun renderLibraryToXml(library: PLibrary, pathContext: PathContext, name } } -fun PLibrary.renderName() = name?.takeIf { it != "unspecified" } ?: classes.first().nameWithoutExtension \ No newline at end of file +fun PLibrary.renderName() = name?.takeIf { it != "unspecified" } ?: classes.first().nameWithoutExtension diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt index eba75fedb3c..7f8ca8dca2e 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt @@ -165,16 +165,10 @@ class K2JVMCompilerArguments : CommonCompilerArguments() { var singleModule: Boolean by FreezableVar(false) @Argument( - value = "-Xadd-compiler-builtins", - description = "Add definitions of built-in declarations to the compilation classpath (useful with -no-stdlib)" + value = "-Xsuppress-missing-builtins-error", + description = "Suppress the \"cannot access built-in declaration\" error (useful with -no-stdlib)" ) - var addCompilerBuiltIns: Boolean by FreezableVar(false) - - @Argument( - value = "-Xload-builtins-from-dependencies", - description = "Load definitions of built-in declarations from module dependencies, instead of from the compiler" - ) - var loadBuiltInsFromDependencies: Boolean by FreezableVar(false) + var suppressMissingBuiltinsError: Boolean by FreezableVar(false) @Argument( value = "-Xscript-resolver-environment", @@ -283,6 +277,7 @@ class K2JVMCompilerArguments : CommonCompilerArguments() { ) result[JvmAnalysisFlags.inheritMultifileParts] = inheritMultifileParts result[JvmAnalysisFlags.sanitizeParentheses] = sanitizeParentheses + result[JvmAnalysisFlags.suppressMissingBuiltinsError] = suppressMissingBuiltinsError return result } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt index 68b1233e5b5..3a452cccb7e 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt @@ -124,8 +124,7 @@ object TopDownAnalyzerFacadeForJVM { targetEnvironment: TargetEnvironment = CompilerEnvironment, sourceModuleSearchScope: GlobalSearchScope = newModuleSearchScope(project, files) ): ComponentProvider { - val createBuiltInsFromModule = configuration.getBoolean(JVMConfigurationKeys.CREATE_BUILT_INS_FROM_MODULE_DEPENDENCIES) - val moduleContext = createModuleContext(project, configuration, createBuiltInsFromModule) + val moduleContext = createModuleContext(project, configuration) val storageManager = moduleContext.storageManager val module = moduleContext.module @@ -143,12 +142,9 @@ object TopDownAnalyzerFacadeForJVM { val jvmTarget = configuration.get(JVMConfigurationKeys.JVM_TARGET, JvmTarget.DEFAULT) val languageVersionSettings = configuration.languageVersionSettings - val optionalBuiltInsModule = - if (configuration.getBoolean(JVMConfigurationKeys.ADD_BUILT_INS_FROM_COMPILER_TO_DEPENDENCIES)) { - if (createBuiltInsFromModule) - JvmBuiltIns(storageManager).apply { initialize(module, languageVersionSettings) }.builtInsModule - else module.builtIns.builtInsModule - } else null + val fallbackBuiltIns = JvmBuiltIns(storageManager, loadBuiltInsFromCurrentClassLoader = true, isFallback = true).apply { + initialize(builtInsModule, languageVersionSettings) + }.builtInsModule fun StorageComponentContainer.useJavac() { useImpl() @@ -178,7 +174,7 @@ object TopDownAnalyzerFacadeForJVM { moduleClassResolver.compiledCodeResolver = dependenciesContainer.get() - dependenciesContext.setDependencies(listOfNotNull(dependenciesContext.module, optionalBuiltInsModule)) + dependenciesContext.setDependencies(listOf(dependenciesContext.module, fallbackBuiltIns)) dependenciesContext.initializeModuleContents( CompositePackageFragmentProvider( listOf( @@ -229,7 +225,7 @@ object TopDownAnalyzerFacadeForJVM { // TODO: remove dependencyModule from friends module.setDependencies( - listOfNotNull(module, dependencyModule, optionalBuiltInsModule), + listOfNotNull(module, dependencyModule, fallbackBuiltIns), if (dependencyModule != null) setOf(dependencyModule) else emptySet() ) module.initialize( @@ -271,19 +267,13 @@ object TopDownAnalyzerFacadeForJVM { } } - private fun createModuleContext( - project: Project, - configuration: CompilerConfiguration, - createBuiltInsFromModule: Boolean - ): MutableModuleContext { + private fun createModuleContext(project: Project, configuration: CompilerConfiguration): MutableModuleContext { val projectContext = ProjectContext(project) - val builtIns = JvmBuiltIns(projectContext.storageManager, !createBuiltInsFromModule) + val builtIns = JvmBuiltIns(projectContext.storageManager, false) return ContextForNewModule( projectContext, Name.special("<${configuration.getNotNull(CommonConfigurationKeys.MODULE_NAME)}>"), builtIns, null ).apply { - if (createBuiltInsFromModule) { - builtIns.builtInsModule = module - } + builtIns.builtInsModule = module } } } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/jvmArguments.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/jvmArguments.kt index 5f19c18e71a..57cf5da9ab6 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/jvmArguments.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/jvmArguments.kt @@ -195,8 +195,6 @@ fun CompilerConfiguration.configureAdvancedJvmOptions(arguments: K2JVMCompilerAr put(CLIConfigurationKeys.ALLOW_KOTLIN_PACKAGE, arguments.allowKotlinPackage) put(JVMConfigurationKeys.USE_SINGLE_MODULE, arguments.singleModule) - put(JVMConfigurationKeys.ADD_BUILT_INS_FROM_COMPILER_TO_DEPENDENCIES, arguments.addCompilerBuiltIns) - put(JVMConfigurationKeys.CREATE_BUILT_INS_FROM_MODULE_DEPENDENCIES, arguments.loadBuiltInsFromDependencies) arguments.declarationsOutputPath?.let { put(JVMConfigurationKeys.DECLARATIONS_JSON_PATH, it) } } diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java b/compiler/frontend.java/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java index 66a616503b6..e97d1463269 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.config; -import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl; import org.jetbrains.kotlin.load.java.JavaClassesTracker; import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents; import org.jetbrains.kotlin.modules.Module; @@ -75,22 +74,6 @@ public class JVMConfigurationKeys { public static final CompilerConfigurationKey USE_SINGLE_MODULE = CompilerConfigurationKey.create("combine modules for source files and binary dependencies into a single module"); - /** - * Controls whether the module depends on an additional "built-ins" module, which contains binary metadata of built-in definitions. - * By default, that metadata is loaded from kotlin-compiler.jar. - * However, it can be also loaded directly from the module, see {@link CREATE_BUILT_INS_FROM_MODULE_DEPENDENCIES} - */ - public static final CompilerConfigurationKey ADD_BUILT_INS_FROM_COMPILER_TO_DEPENDENCIES = - CompilerConfigurationKey.create("add built-ins from the compiler jar to the dependencies of the module being resolved"); - - /** - * Controls whether an instance of KotlinBuiltIns which is passed to {@link ModuleDescriptorImpl}'s constructor and ends up being used - * everywhere in the compiler front-end is loaded directly from the module (from its sources and/or its binaries), as opposed to - * from kotlin-compiler.jar - */ - public static final CompilerConfigurationKey CREATE_BUILT_INS_FROM_MODULE_DEPENDENCIES = - CompilerConfigurationKey.create("create built-ins from resources found in the module dependencies"); - public static final CompilerConfigurationKey SKIP_RUNTIME_VERSION_CHECK = CompilerConfigurationKey.create("do not perform checks on runtime versions consistency"); diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/config/JvmAnalysisFlags.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/config/JvmAnalysisFlags.kt index 94c67d2cb8e..21328611fd7 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/config/JvmAnalysisFlags.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/config/JvmAnalysisFlags.kt @@ -20,4 +20,7 @@ object JvmAnalysisFlags { @JvmStatic val sanitizeParentheses by AnalysisFlag.Delegates.Boolean + + @JvmStatic + val suppressMissingBuiltinsError by AnalysisFlag.Delegates.Boolean } diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/MissingBuiltInDeclarationChecker.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/MissingBuiltInDeclarationChecker.kt new file mode 100644 index 00000000000..158e049cdc5 --- /dev/null +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/MissingBuiltInDeclarationChecker.kt @@ -0,0 +1,57 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. 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.resolve.jvm.checkers + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.builtins.BuiltInsPackageFragment +import org.jetbrains.kotlin.config.JvmAnalysisFlags +import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.diagnostics.Diagnostic +import org.jetbrains.kotlin.diagnostics.Errors +import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker +import org.jetbrains.kotlin.resolve.calls.checkers.CallCheckerContext +import org.jetbrains.kotlin.resolve.calls.checkers.isComputingDeferredType +import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall +import org.jetbrains.kotlin.resolve.checkers.ClassifierUsageChecker +import org.jetbrains.kotlin.resolve.checkers.ClassifierUsageCheckerContext +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe + +object MissingBuiltInDeclarationChecker : CallChecker { + override fun check(resolvedCall: ResolvedCall<*>, reportOn: PsiElement, context: CallCheckerContext) { + if (context.languageVersionSettings.getFlag(JvmAnalysisFlags.suppressMissingBuiltinsError)) return + + val descriptor = resolvedCall.resultingDescriptor + val error = diagnosticFor(descriptor, reportOn) + ?: diagnosticFor(descriptor.returnType?.takeUnless(this::isComputingDeferredType)?.constructor?.declarationDescriptor, reportOn) + error?.let(context.trace::report) + } + + private fun diagnosticFor(descriptor: DeclarationDescriptor?, reportOn: PsiElement): Diagnostic? { + if (descriptor == null) return null + + val containingClassOrPackage = DescriptorUtils.getParentOfType(descriptor, ClassOrPackageFragmentDescriptor::class.java) + + if (containingClassOrPackage is ClassDescriptor) { + val containingPackage = DescriptorUtils.getParentOfType(descriptor, PackageFragmentDescriptor::class.java) + if ((containingPackage as? BuiltInsPackageFragment)?.isFallback == true) { + return Errors.MISSING_BUILT_IN_DECLARATION.on(reportOn, containingClassOrPackage.fqNameSafe) + } + } else if (containingClassOrPackage is BuiltInsPackageFragment && containingClassOrPackage.isFallback) { + return Errors.MISSING_BUILT_IN_DECLARATION.on(reportOn, descriptor.fqNameSafe) + } + + return null + } + + object ClassifierUsage : ClassifierUsageChecker { + override fun check(targetDescriptor: ClassifierDescriptor, element: PsiElement, context: ClassifierUsageCheckerContext) { + if (context.languageVersionSettings.getFlag(JvmAnalysisFlags.suppressMissingBuiltinsError)) return + + diagnosticFor(targetDescriptor, element)?.let(context.trace::report) + } + } +} diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatformConfigurator.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatformConfigurator.kt index f67244b9d21..0fbb023639f 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatformConfigurator.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatformConfigurator.kt @@ -42,6 +42,7 @@ object JvmPlatformConfigurator : PlatformConfiguratorBase( ), additionalCallCheckers = listOf( + MissingBuiltInDeclarationChecker, JavaAnnotationCallChecker(), SuspensionPointInsideMutexLockChecker(), JavaClassOnCompanionChecker(), @@ -63,7 +64,8 @@ object JvmPlatformConfigurator : PlatformConfiguratorBase( ), additionalClassifierUsageCheckers = listOf( - BigFunctionTypeAvailabilityChecker + BigFunctionTypeAvailabilityChecker, + MissingBuiltInDeclarationChecker.ClassifierUsage ), additionalAnnotationCheckers = listOf( diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index 5ba82a3871a..f10f7fc9d85 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -98,6 +98,7 @@ public interface Errors { DiagnosticFactory2 API_NOT_AVAILABLE = DiagnosticFactory2.create(ERROR); DiagnosticFactory1 MISSING_DEPENDENCY_CLASS = DiagnosticFactory1.create(ERROR); + DiagnosticFactory1 MISSING_BUILT_IN_DECLARATION = DiagnosticFactory1.create(ERROR); DiagnosticFactory1 MISSING_SCRIPT_BASE_CLASS = DiagnosticFactory1.create(ERROR); DiagnosticFactory1 MISSING_SCRIPT_STANDARD_TEMPLATE = DiagnosticFactory1.create(ERROR); DiagnosticFactory1 MISSING_SCRIPT_RECEIVER_CLASS = DiagnosticFactory1.create(ERROR); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java index d15b57d1b78..275edc32390 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -363,6 +363,7 @@ public class DefaultErrorMessages { MAP.put(API_NOT_AVAILABLE, "This declaration is only available since Kotlin {0} and cannot be used with the specified API version {1}", STRING, STRING); MAP.put(MISSING_DEPENDENCY_CLASS, "Cannot access class ''{0}''. Check your module classpath for missing or conflicting dependencies", TO_STRING); + MAP.put(MISSING_BUILT_IN_DECLARATION, "Cannot access built-in declaration ''{0}''. Ensure that you have a dependency on the Kotlin standard library", TO_STRING); MAP.put(MISSING_SCRIPT_BASE_CLASS, "Cannot access script base class ''{0}''. Check your module classpath for missing or conflicting dependencies", TO_STRING); MAP.put(MISSING_SCRIPT_STANDARD_TEMPLATE, "No script runtime was found in the classpath: class ''{0}'' not found. Please add kotlin-script-runtime.jar to the module dependencies.", TO_STRING); MAP.put(MISSING_SCRIPT_RECEIVER_CLASS, "Cannot access implicit script receiver class ''{0}''. Check your module classpath for missing or conflicting dependencies", TO_STRING); diff --git a/compiler/testData/cli/jvm/extraHelp.out b/compiler/testData/cli/jvm/extraHelp.out index a481b348762..922968e9636 100644 --- a/compiler/testData/cli/jvm/extraHelp.out +++ b/compiler/testData/cli/jvm/extraHelp.out @@ -1,6 +1,5 @@ Usage: kotlinc-jvm where advanced options include: - -Xadd-compiler-builtins Add definitions of built-in declarations to the compilation classpath (useful with -no-stdlib) -Xadd-modules= Root modules to resolve in addition to the initial modules, or all modules on the module path if is ALL-MODULE-PATH -Xassertions={always-enable|always-disable|jvm|legacy} @@ -40,8 +39,6 @@ where advanced options include: in the interface (annotating an existing method can break binary compatibility) -Xjvm-default=compatibility Allow usages of @JvmDefault; generate a compatibility accessor in the 'DefaultImpls' class in addition to the interface method - -Xload-builtins-from-dependencies - Load definitions of built-in declarations from module dependencies, instead of from the compiler -Xno-call-assertions Don't generate not-null assertions for arguments of platform types -Xno-exception-on-explicit-equals-for-boxed-null Do not throw NPE on explicit 'equals' call for null receiver of platform boxed primitive type @@ -62,6 +59,8 @@ where advanced options include: -Xsupport-compatqual-checker-framework-annotations=enable|disable Specify behavior for Checker Framework compatqual annotations (NullableDecl/NonNullDecl). Default value is 'enable' + -Xsuppress-missing-builtins-error + Suppress the "cannot access built-in declaration" error (useful with -no-stdlib) -Xuse-ir Use the IR backend -Xuse-javac Use javac for Java source and class files analysis -Xuse-old-class-files-reading Use old class files reading implementation. This may slow down the build and cause problems with Groovy interop. diff --git a/compiler/testData/cli/jvm/noStdlib.out b/compiler/testData/cli/jvm/noStdlib.out index e38779c55ed..03ea072f6b5 100644 --- a/compiler/testData/cli/jvm/noStdlib.out +++ b/compiler/testData/cli/jvm/noStdlib.out @@ -1,10 +1,13 @@ -compiler/testData/cli/jvm/noStdlib.kt:1:8: error: unresolved reference: kotlin -import kotlin.reflect.* - ^ +compiler/testData/cli/jvm/noStdlib.kt:4:5: error: cannot access built-in declaration 'kotlin.String'. Ensure that you have a dependency on the Kotlin standard library + String::class.primaryConstructor + ^ compiler/testData/cli/jvm/noStdlib.kt:4:19: error: unresolved reference: primaryConstructor String::class.primaryConstructor ^ -compiler/testData/cli/jvm/noStdlib.kt:6:11: error: unresolved reference: isExternal +compiler/testData/cli/jvm/noStdlib.kt:6:7: error: cannot access built-in declaration 'kotlin.Unit'. Ensure that you have a dependency on the Kotlin standard library + ::foo.isExternal + ^ +compiler/testData/cli/jvm/noStdlib.kt:6:11: error: cannot access built-in declaration 'kotlin.reflect.KFunction0'. Ensure that you have a dependency on the Kotlin standard library ::foo.isExternal ^ compiler/testData/cli/jvm/noStdlib.kt:7:5: error: unresolved reference: listOf diff --git a/compiler/testData/codegen/box/callableReference/function/local/localFunctionName.kt b/compiler/testData/codegen/box/callableReference/function/local/localFunctionName.kt index 211252d3587..a07c6f5e2da 100644 --- a/compiler/testData/codegen/box/callableReference/function/local/localFunctionName.kt +++ b/compiler/testData/codegen/box/callableReference/function/local/localFunctionName.kt @@ -1,4 +1,4 @@ -// IGNORE_BACKEND: JVM_IR, JS_IR +// IGNORE_BACKEND: JS_IR fun box(): String { fun OK() {} diff --git a/compiler/testData/ir/irText/stubs/constFromBuiltins__kotlin.Int.txt b/compiler/testData/ir/irText/stubs/constFromBuiltins__kotlin.Int.txt index 72911e09463..31b83934e23 100644 --- a/compiler/testData/ir/irText/stubs/constFromBuiltins__kotlin.Int.txt +++ b/compiler/testData/ir/irText/stubs/constFromBuiltins__kotlin.Int.txt @@ -219,28 +219,28 @@ CLASS IR_EXTERNAL_DECLARATION_STUB CLASS name:Int modality:FINAL visibility:publ PROPERTY IR_EXTERNAL_DECLARATION_STUB name:MAX_VALUE visibility:public modality:FINAL [const,val] FIELD IR_EXTERNAL_DECLARATION_STUB name:MAX_VALUE type:kotlin.Int visibility:public [final] EXPRESSION_BODY - CONST Int type= value=2147483647 + CONST Int type=kotlin.Int value=2147483647 FUN IR_EXTERNAL_DECLARATION_STUB name: visibility:public modality:FINAL <> ($this:kotlin.Int.Companion) returnType:kotlin.Int correspondingProperty: PROPERTY IR_EXTERNAL_DECLARATION_STUB name:MAX_VALUE visibility:public modality:FINAL [const,val] $this: VALUE_PARAMETER IR_EXTERNAL_DECLARATION_STUB name: type:kotlin.Int.Companion PROPERTY IR_EXTERNAL_DECLARATION_STUB name:MIN_VALUE visibility:public modality:FINAL [const,val] FIELD IR_EXTERNAL_DECLARATION_STUB name:MIN_VALUE type:kotlin.Int visibility:public [final] EXPRESSION_BODY - CONST Int type= value=-2147483648 + CONST Int type=kotlin.Int value=-2147483648 FUN IR_EXTERNAL_DECLARATION_STUB name: visibility:public modality:FINAL <> ($this:kotlin.Int.Companion) returnType:kotlin.Int correspondingProperty: PROPERTY IR_EXTERNAL_DECLARATION_STUB name:MIN_VALUE visibility:public modality:FINAL [const,val] $this: VALUE_PARAMETER IR_EXTERNAL_DECLARATION_STUB name: type:kotlin.Int.Companion PROPERTY IR_EXTERNAL_DECLARATION_STUB name:SIZE_BITS visibility:public modality:FINAL [const,val] FIELD IR_EXTERNAL_DECLARATION_STUB name:SIZE_BITS type:kotlin.Int visibility:public [final] EXPRESSION_BODY - CONST Int type= value=32 + CONST Int type=kotlin.Int value=32 FUN IR_EXTERNAL_DECLARATION_STUB name: visibility:public modality:FINAL <> ($this:kotlin.Int.Companion) returnType:kotlin.Int correspondingProperty: PROPERTY IR_EXTERNAL_DECLARATION_STUB name:SIZE_BITS visibility:public modality:FINAL [const,val] $this: VALUE_PARAMETER IR_EXTERNAL_DECLARATION_STUB name: type:kotlin.Int.Companion PROPERTY IR_EXTERNAL_DECLARATION_STUB name:SIZE_BYTES visibility:public modality:FINAL [const,val] FIELD IR_EXTERNAL_DECLARATION_STUB name:SIZE_BYTES type:kotlin.Int visibility:public [final] EXPRESSION_BODY - CONST Int type= value=4 + CONST Int type=kotlin.Int value=4 FUN IR_EXTERNAL_DECLARATION_STUB name: visibility:public modality:FINAL <> ($this:kotlin.Int.Companion) returnType:kotlin.Int correspondingProperty: PROPERTY IR_EXTERNAL_DECLARATION_STUB name:SIZE_BYTES visibility:public modality:FINAL [const,val] $this: VALUE_PARAMETER IR_EXTERNAL_DECLARATION_STUB name: type:kotlin.Int.Companion diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/serialization/builtins/AbstractBuiltInsWithJDKMembersTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/serialization/builtins/AbstractBuiltInsWithJDKMembersTest.kt index e0b238ba627..6a50948dbd1 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/serialization/builtins/AbstractBuiltInsWithJDKMembersTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/serialization/builtins/AbstractBuiltInsWithJDKMembersTest.kt @@ -24,7 +24,7 @@ abstract class AbstractBuiltInsWithJDKMembersTest : KotlinTestWithEnvironment() private val configuration = createComparatorConfiguration() override fun createEnvironment(): KotlinCoreEnvironment = - createEnvironmentWithJdk(ConfigurationKind.JDK_ONLY, testJdkKind) + createEnvironmentWithJdk(ConfigurationKind.JDK_ONLY, testJdkKind) protected open val testJdkKind: TestJdkKind get() = TestJdkKind.FULL_JDK @@ -33,11 +33,12 @@ abstract class AbstractBuiltInsWithJDKMembersTest : KotlinTestWithEnvironment() val module = JvmResolveUtil.analyze(environment).moduleDescriptor as ModuleDescriptorImpl for (packageFqName in listOf(BUILT_INS_PACKAGE_FQ_NAME, COLLECTIONS_PACKAGE_FQ_NAME, RANGES_PACKAGE_FQ_NAME)) { - val loaded = - module.packageFragmentProvider.getPackageFragments(packageFqName).filterIsInstance().single() + val loaded = module.packageFragmentProvider.getPackageFragments(packageFqName) + .filterIsInstance() + .single { !it.isFallback } RecursiveDescriptorComparator.validateAndCompareDescriptorWithFile( - loaded, configuration, - File("compiler/testData/builtin-classes/$builtinVersionName/" + packageFqName.asString().replace('.', '-') + ".txt") + loaded, configuration, + File("compiler/testData/builtin-classes/$builtinVersionName/" + packageFqName.asString().replace('.', '-') + ".txt") ) } } diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializerTest.kt b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializerTest.kt index b43f66fcb02..6bbcf004126 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializerTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializerTest.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.serialization.builtins import org.jetbrains.kotlin.builtins.DefaultBuiltIns import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime +import org.jetbrains.kotlin.descriptors.deserialization.AdditionalClassPartsProvider import org.jetbrains.kotlin.descriptors.deserialization.PlatformDependentDeclarationFilter import org.jetbrains.kotlin.jvm.compiler.LoadDescriptorUtil.TEST_PACKAGE_FQNAME import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInsLoaderImpl @@ -41,10 +42,15 @@ class BuiltInsSerializerTest : TestCaseWithTmpdir() { val module = KotlinTestUtils.createEmptyModule("", DefaultBuiltIns.Instance) val packageFragmentProvider = BuiltInsLoaderImpl().createBuiltInPackageFragmentProvider( - LockBasedStorageManager("BuiltInsSerializerTest"), module, setOf(TEST_PACKAGE_FQNAME), emptyList(), PlatformDependentDeclarationFilter.All + LockBasedStorageManager("BuiltInsSerializerTest"), + module, + setOf(TEST_PACKAGE_FQNAME), + emptyList(), + PlatformDependentDeclarationFilter.All, + AdditionalClassPartsProvider.None, + isFallback = false ) { - val file = File(tmpdir, it) - if (file.exists()) FileInputStream(file) else null + File(tmpdir, it).takeIf(File::exists)?.let(::FileInputStream) } module.initialize(packageFragmentProvider) diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/LoadBuiltinsTest.java b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/LoadBuiltinsTest.java index 069b1f3f8ec..6cf6c8943c5 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/LoadBuiltinsTest.java +++ b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/LoadBuiltinsTest.java @@ -92,6 +92,7 @@ public class LoadBuiltinsTest extends KotlinTestWithEnvironment { Collections.singletonList(new BuiltInFictitiousFunctionClassFactory(storageManager, builtInsModule)), PlatformDependentDeclarationFilter.All.INSTANCE, AdditionalClassPartsProvider.None.INSTANCE, + false, ForTestCompileRuntime.runtimeJarClassLoader()::getResourceAsStream ); diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltIns.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltIns.kt index 8305e548013..e55904234ca 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltIns.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltIns.kt @@ -15,7 +15,9 @@ import org.jetbrains.kotlin.utils.sure class JvmBuiltIns @JvmOverloads constructor( storageManager: StorageManager, - loadBuiltInsFromCurrentClassLoader: Boolean = true + loadBuiltInsFromCurrentClassLoader: Boolean = true, + // TODO: change this value to loadBuiltInsFromCurrentClassLoader as soon as built-ins are loaded from module dependencies everywhere + isFallback: Boolean = false ) : KotlinBuiltIns(storageManager) { // Module containing JDK classes or having them among dependencies private var ownerModuleDescriptor: ModuleDescriptor? = null @@ -40,7 +42,7 @@ class JvmBuiltIns @JvmOverloads constructor( init { if (loadBuiltInsFromCurrentClassLoader) { - createBuiltInsModule() + createBuiltInsModule(isFallback) } } diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsPackageFragmentProvider.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsPackageFragmentProvider.kt index 7eea3582fcd..805e32359c0 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsPackageFragmentProvider.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsPackageFragmentProvider.kt @@ -52,6 +52,6 @@ class JvmBuiltInsPackageFragmentProvider( override fun findPackage(fqName: FqName): DeserializedPackageFragment? = finder.findBuiltInsData(fqName)?.let { inputStream -> - BuiltInsPackageFragmentImpl.create(fqName, storageManager, moduleDescriptor, inputStream) + BuiltInsPackageFragmentImpl.create(fqName, storageManager, moduleDescriptor, inputStream, isFallback = false) } } diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsSettings.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsSettings.kt index b9edcdb34df..6d90b96fa98 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsSettings.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/JvmBuiltInsSettings.kt @@ -495,7 +495,7 @@ open class JvmBuiltInsSettings( private class FallbackBuiltIns private constructor() : KotlinBuiltIns(LockBasedStorageManager("FallbackBuiltIns")) { init { - createBuiltInsModule() + createBuiltInsModule(true) } companion object { diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsLoader.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsLoader.kt index 6974d51fa1d..7124d945c96 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsLoader.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsLoader.kt @@ -26,11 +26,12 @@ import java.util.* interface BuiltInsLoader { fun createPackageFragmentProvider( - storageManager: StorageManager, - builtInsModule: ModuleDescriptor, - classDescriptorFactories: Iterable, - platformDependentDeclarationFilter: PlatformDependentDeclarationFilter, - additionalClassPartsProvider: AdditionalClassPartsProvider + storageManager: StorageManager, + builtInsModule: ModuleDescriptor, + classDescriptorFactories: Iterable, + platformDependentDeclarationFilter: PlatformDependentDeclarationFilter, + additionalClassPartsProvider: AdditionalClassPartsProvider, + isFallback: Boolean ): PackageFragmentProvider companion object { @@ -38,7 +39,7 @@ interface BuiltInsLoader { val implementations = ServiceLoader.load(BuiltInsLoader::class.java, BuiltInsLoader::class.java.classLoader) implementations.firstOrNull() ?: throw IllegalStateException( "No BuiltInsLoader implementation was found. Please ensure that the META-INF/services/ is not stripped " + - "from your application and that the Java virtual machine is not running under a security manager" + "from your application and that the Java virtual machine is not running under a security manager" ) } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsPackageFragment.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsPackageFragment.kt index fc8bd06c56f..0b0786d1a8e 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsPackageFragment.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsPackageFragment.kt @@ -18,4 +18,14 @@ package org.jetbrains.kotlin.builtins import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor -interface BuiltInsPackageFragment : PackageFragmentDescriptor +interface BuiltInsPackageFragment : PackageFragmentDescriptor { + /** + * `true` if this package fragment is loaded during compilation from the current compiler's class loader. + * This fallback package fragment is useful because standard types like kotlin.String, kotlin.Unit will be resolved to something + * even in the case of absence of kotlin-stdlib in the module dependencies. So, the code in the compiler that relies on these types + * to be always there, will not crash. + * However, if anything in the source code references anything from the fallback package, this is a compilation error because it means + * that there's no kotlin-stdlib in the dependencies and the build is compiler version-specific, which could lead to weird issues. + */ + val isFallback: Boolean +} diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/DefaultBuiltIns.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/DefaultBuiltIns.kt index f98ae679f70..1878a674ca9 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/DefaultBuiltIns.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/DefaultBuiltIns.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.storage.LockBasedStorageManager class DefaultBuiltIns(loadBuiltInsFromCurrentClassLoader: Boolean = true) : KotlinBuiltIns(LockBasedStorageManager("DefaultBuiltIns")) { init { if (loadBuiltInsFromCurrentClassLoader) { - createBuiltInsModule() + createBuiltInsModule(false) } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/FunctionInterfacePackageFragment.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/FunctionInterfacePackageFragment.kt index 7308f45f86d..383c008e6e0 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/FunctionInterfacePackageFragment.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/FunctionInterfacePackageFragment.kt @@ -5,4 +5,7 @@ package org.jetbrains.kotlin.builtins -interface FunctionInterfacePackageFragment : BuiltInsPackageFragment \ No newline at end of file +interface FunctionInterfacePackageFragment : BuiltInsPackageFragment { + override val isFallback: Boolean + get() = false +} diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java index 20bd8b5b41f..2a115dca751 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java @@ -120,11 +120,11 @@ public abstract class KotlinBuiltIns { }); } - protected void createBuiltInsModule() { + protected void createBuiltInsModule(boolean isFallback) { builtInsModule = new ModuleDescriptorImpl(BUILTINS_MODULE_NAME, storageManager, this, null); builtInsModule.initialize(BuiltInsLoader.Companion.getInstance().createPackageFragmentProvider( storageManager, builtInsModule, - getClassDescriptorFactories(), getPlatformDependentDeclarationFilter(), getAdditionalClassPartsProvider() + getClassDescriptorFactories(), getPlatformDependentDeclarationFilter(), getAdditionalClassPartsProvider(), isFallback )); builtInsModule.setDependencies(builtInsModule); } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/builtins/BuiltInsLoaderImpl.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/builtins/BuiltInsLoaderImpl.kt index e925aa17ec1..e6dde570aa7 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/builtins/BuiltInsLoaderImpl.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/builtins/BuiltInsLoaderImpl.kt @@ -28,7 +28,8 @@ class BuiltInsLoaderImpl : BuiltInsLoader { builtInsModule: ModuleDescriptor, classDescriptorFactories: Iterable, platformDependentDeclarationFilter: PlatformDependentDeclarationFilter, - additionalClassPartsProvider: AdditionalClassPartsProvider + additionalClassPartsProvider: AdditionalClassPartsProvider, + isFallback: Boolean ): PackageFragmentProvider { return createBuiltInPackageFragmentProvider( storageManager, @@ -37,6 +38,7 @@ class BuiltInsLoaderImpl : BuiltInsLoader { classDescriptorFactories, platformDependentDeclarationFilter, additionalClassPartsProvider, + isFallback, resourceLoader::loadResource ) } @@ -48,12 +50,13 @@ class BuiltInsLoaderImpl : BuiltInsLoader { classDescriptorFactories: Iterable, platformDependentDeclarationFilter: PlatformDependentDeclarationFilter, additionalClassPartsProvider: AdditionalClassPartsProvider = AdditionalClassPartsProvider.None, + isFallback: Boolean, loadResource: (String) -> InputStream? ): PackageFragmentProvider { val packageFragments = packageFqNames.map { fqName -> val resourcePath = BuiltInSerializerProtocol.getBuiltInsFilePath(fqName) val inputStream = loadResource(resourcePath) ?: throw IllegalStateException("Resource not found in classpath: $resourcePath") - BuiltInsPackageFragmentImpl.create(fqName, storageManager, module, inputStream) + BuiltInsPackageFragmentImpl.create(fqName, storageManager, module, inputStream, isFallback) } val provider = PackageFragmentProviderImpl(packageFragments) diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/builtins/BuiltInsPackageFragmentImpl.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/builtins/BuiltInsPackageFragmentImpl.kt index 27df31483b7..78ae5fc2023 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/builtins/BuiltInsPackageFragmentImpl.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/builtins/BuiltInsPackageFragmentImpl.kt @@ -19,7 +19,8 @@ class BuiltInsPackageFragmentImpl private constructor( storageManager: StorageManager, module: ModuleDescriptor, proto: ProtoBuf.PackageFragment, - metadataVersion: BuiltInsBinaryVersion + metadataVersion: BuiltInsBinaryVersion, + override val isFallback: Boolean ) : BuiltInsPackageFragment, DeserializedPackageFragmentImpl( fqName, storageManager, module, proto, metadataVersion, containerSource = null ) { @@ -28,7 +29,8 @@ class BuiltInsPackageFragmentImpl private constructor( fqName: FqName, storageManager: StorageManager, module: ModuleDescriptor, - inputStream: InputStream + inputStream: InputStream, + isFallback: Boolean ): BuiltInsPackageFragmentImpl { lateinit var version: BuiltInsBinaryVersion @@ -47,7 +49,7 @@ class BuiltInsPackageFragmentImpl private constructor( ProtoBuf.PackageFragment.parseFrom(stream, BuiltInSerializerProtocol.extensionRegistry) } - return BuiltInsPackageFragmentImpl(fqName, storageManager, module, proto, version) + return BuiltInsPackageFragmentImpl(fqName, storageManager, module, proto, version, isFallback) } } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/AbstractPositionManagerTest.java b/idea/tests/org/jetbrains/kotlin/idea/debugger/AbstractPositionManagerTest.java index 85482f5042a..ca093393664 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/AbstractPositionManagerTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/AbstractPositionManagerTest.java @@ -28,11 +28,11 @@ import kotlin.sequences.SequencesKt; import kotlin.text.StringsKt; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.backend.common.output.OutputFileCollection; +import org.jetbrains.kotlin.checkers.CompilerTestLanguageVersionSettings; import org.jetbrains.kotlin.codegen.ClassBuilderFactories; import org.jetbrains.kotlin.codegen.GenerationUtils; import org.jetbrains.kotlin.codegen.state.GenerationState; -import org.jetbrains.kotlin.config.CompilerConfiguration; -import org.jetbrains.kotlin.config.JVMConfigurationKeys; +import org.jetbrains.kotlin.config.*; import org.jetbrains.kotlin.idea.debugger.evaluate.KotlinDebuggerCaches; import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase; import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCaseKt; @@ -46,10 +46,7 @@ import org.jetbrains.kotlin.test.TestJdkKind; import org.jetbrains.kotlin.utils.ExceptionUtilsKt; import java.io.File; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -133,7 +130,12 @@ public abstract class AbstractPositionManagerTest extends KotlinLightCodeInsight CompilerConfiguration configuration = KotlinTestUtils.newConfiguration(ConfigurationKind.JDK_ONLY, TestJdkKind.MOCK_JDK); // TODO: delete this once IDEVirtualFileFinder supports loading .kotlin_builtins files - configuration.put(JVMConfigurationKeys.ADD_BUILT_INS_FROM_COMPILER_TO_DEPENDENCIES, true); + CommonConfigurationKeysKt.setLanguageVersionSettings(configuration, new CompilerTestLanguageVersionSettings( + Collections.emptyMap(), + ApiVersion.LATEST_STABLE, + LanguageVersion.LATEST_STABLE, + Collections.singletonMap(JvmAnalysisFlags.getSuppressMissingBuiltinsError(), true) + )); GenerationState state = GenerationUtils.compileFiles(files, configuration, ClassBuilderFactories.TEST, scope -> PackagePartProvider.Empty.INSTANCE); diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt index 39af6b884b6..80563561f5e 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt @@ -227,7 +227,7 @@ open class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { } fun testSourcePackageLongPrefix() { - initProject() + initProject(JVM_MOCK_RUNTIME) val buildResult = buildAllModules() buildResult.assertSuccessful() val warnings = buildResult.getMessages(BuildMessage.Kind.WARNING) @@ -236,7 +236,7 @@ open class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { } fun testSourcePackagePrefixWithInnerClasses() { - initProject() + initProject(JVM_MOCK_RUNTIME) buildAllModules().assertSuccessful() } diff --git a/libraries/stdlib/jvm/build.gradle b/libraries/stdlib/jvm/build.gradle index 4d52d43e7cd..ba4fc940e95 100644 --- a/libraries/stdlib/jvm/build.gradle +++ b/libraries/stdlib/jvm/build.gradle @@ -67,6 +67,7 @@ configurations { longRunningTestCompile.extendsFrom(testCompile) builtins compileOnly.extendsFrom(builtins) + coroutinesExperimentalCompile.extendsFrom(builtins) } dependencies { @@ -261,4 +262,4 @@ task longRunningTest(type: Test, dependsOn: longRunningTestClasses) { if (project.hasProperty("kotlin.stdlib.test.long.running")) { check.dependsOn(longRunningTest) -} \ No newline at end of file +} diff --git a/libraries/tools/kotlin-annotations-android/build.gradle.kts b/libraries/tools/kotlin-annotations-android/build.gradle.kts index 82083b08e00..50473b83333 100644 --- a/libraries/tools/kotlin-annotations-android/build.gradle.kts +++ b/libraries/tools/kotlin-annotations-android/build.gradle.kts @@ -22,6 +22,10 @@ sourceSets { } } +dependencies { + compile(project(":core:builtins")) +} + publish() sourcesJar() diff --git a/libraries/tools/kotlin-annotations-jvm/build.gradle b/libraries/tools/kotlin-annotations-jvm/build.gradle index 8b96b516037..fb3e18228c3 100644 --- a/libraries/tools/kotlin-annotations-jvm/build.gradle +++ b/libraries/tools/kotlin-annotations-jvm/build.gradle @@ -19,6 +19,10 @@ sourceSets { } } +dependencies { + compile project(':core:builtins') +} + artifacts { archives sourcesJar } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 1df0010af5d..c24532809fa 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.gradle.tasks import org.gradle.api.Project -import org.gradle.api.Task import org.gradle.api.file.FileCollection import org.gradle.api.plugins.BasePluginConvention import org.gradle.api.tasks.* @@ -29,9 +28,14 @@ import org.jetbrains.kotlin.gradle.internal.prepareCompilerArguments import org.jetbrains.kotlin.gradle.internal.tasks.TaskWithLocalState import org.jetbrains.kotlin.gradle.internal.tasks.allOutputFiles import org.jetbrains.kotlin.gradle.logging.* -import org.jetbrains.kotlin.gradle.plugin.* +import org.jetbrains.kotlin.gradle.plugin.COMPILER_CLASSPATH_CONFIGURATION_NAME +import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginWrapper +import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformPluginBase +import org.jetbrains.kotlin.gradle.plugin.PLUGIN_CLASSPATH_CONFIGURATION_NAME import org.jetbrains.kotlin.gradle.report.BuildReportMode -import org.jetbrains.kotlin.gradle.utils.* +import org.jetbrains.kotlin.gradle.utils.isParentOf +import org.jetbrains.kotlin.gradle.utils.pathsAsStringRelativeTo +import org.jetbrains.kotlin.gradle.utils.toSortedPathsArray import org.jetbrains.kotlin.incremental.ChangedFiles import org.jetbrains.kotlin.incremental.classpathAsList import org.jetbrains.kotlin.incremental.destinationAsFile @@ -393,13 +397,6 @@ open class KotlinCompile : AbstractKotlinCompile(), Kotl args.apply { fillDefaultValues() } super.setupCompilerArgs(args, defaultsOnly) - args.addCompilerBuiltIns = true - - val gradleVersion = getGradleVersion() - if (gradleVersion == null || gradleVersion >= ParsedGradleVersion(3, 2)) { - args.loadBuiltInsFromDependencies = true - } - args.moduleName = friendTask?.moduleName ?: moduleName logger.kotlinDebug { "args.moduleName = ${args.moduleName}" } @@ -614,13 +611,3 @@ private val invalidModuleNameCharactersRegex = """[\\/\r\n\t]""".toRegex() private fun filterModuleName(moduleName: String): String = moduleName.replace(invalidModuleNameCharactersRegex, "_") - -private fun Task.getGradleVersion(): ParsedGradleVersion? { - val gradleVersion = project.gradle.gradleVersion - val result = ParsedGradleVersion.parse(gradleVersion) - if (result == null) { - logger.kotlinDebug("Could not parse gradle version: $gradleVersion") - } - return result -} - diff --git a/libraries/tools/kotlin-maven-plugin/src/it/simple/pom.xml b/libraries/tools/kotlin-maven-plugin/src/it/simple/pom.xml index 2d948ed5dcd..4df21ee6ad7 100644 --- a/libraries/tools/kotlin-maven-plugin/src/it/simple/pom.xml +++ b/libraries/tools/kotlin-maven-plugin/src/it/simple/pom.xml @@ -40,7 +40,7 @@ - -Xadd-compiler-builtins + -Xsuppress-missing-builtins-error