From 949144e0c02bb1ee753701423e95b9e71d4f1eb4 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 9 Feb 2015 17:52:42 +0300 Subject: [PATCH] Report incomplete hierarchy error for deserialized types #KT-5129 Fixed Delete a JPS test that was specifically testing that we would not fail in this situation; now there's a compilation error --- .../library/library.kt | 7 +++ .../incompleteHierarchyInKotlin/output.txt | 6 +++ .../incompleteHierarchyInKotlin/source.kt | 5 ++ ...ompileKotlinAgainstCustomBinariesTest.java | 25 +++++++-- .../DeserializationComponentsForJava.kt | 7 ++- .../load/kotlin/reflect/RuntimeModuleData.kt | 5 +- .../builtInsPackageFragmentProvider.kt | 1 + .../deserialization/DeserializedType.kt | 9 +++- .../deserialization/ErrorReporter.java | 20 ++++++++ .../serialization/deserialization/context.kt | 1 + .../DeserializedClassDescriptor.kt | 41 +++++++++------ .../textBuilder/DeserializerForDecompiler.kt | 8 +-- ...tlinJavaScriptDeserializerForDecompiler.kt | 13 ++--- .../jps/build/SimpleKotlinJpsBuildTest.kt | 51 ++----------------- ...kotlinJavascriptPackageFragmentProvider.kt | 1 + 15 files changed, 118 insertions(+), 82 deletions(-) create mode 100644 compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyInKotlin/library/library.kt create mode 100644 compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyInKotlin/output.txt create mode 100644 compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyInKotlin/source.kt diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyInKotlin/library/library.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyInKotlin/library/library.kt new file mode 100644 index 00000000000..1c86fb9ca12 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyInKotlin/library/library.kt @@ -0,0 +1,7 @@ +package test + +public open class Super { + public fun foo() {} +} + +public open class Sub : Super() diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyInKotlin/output.txt b/compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyInKotlin/output.txt new file mode 100644 index 00000000000..8b1cbe7d19c --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyInKotlin/output.txt @@ -0,0 +1,6 @@ +error: supertypes of the following classes cannot be resolved. Please make sure you have the required dependencies in the classpath: + class test.Sub, unresolved supertypes: test.Super + +compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyInKotlin/source.kt:5:22: error: unresolved reference: foo +fun bar() = SubSub().foo() + ^ diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyInKotlin/source.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyInKotlin/source.kt new file mode 100644 index 00000000000..a03c65d3865 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyInKotlin/source.kt @@ -0,0 +1,5 @@ +import test.Sub + +class SubSub : Sub() + +fun bar() = SubSub().foo() diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.java index 78cb121b2c5..c72c1f82149 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.java @@ -244,6 +244,22 @@ public class CompileKotlinAgainstCustomBinariesTest extends TestCaseWithTmpdir { JetTestUtils.assertEqualsToFile(new File(getTestDataDirectory(), "output.txt"), output); } + public void testIncompleteHierarchyInKotlin() throws Exception { + // Analogous to testIncompleteHierarchyInJava, but with a Kotlin library + + File library = copyJarFileWithoutEntry(compileLibrary("library"), "test/Super.class"); + + File source = new File(getTestDataDirectory(), "source.kt"); + + Pair pair = CliBaseTest.executeCompilerGrabOutput(new K2JVMCompiler(), Arrays.asList( + source.getPath(), + "-classpath", library.getPath(), + "-d", tmpdir.getPath() + )); + + JetTestUtils.assertEqualsToFile(new File(getTestDataDirectory(), "output.txt"), pair.first); + } + /*test source mapping generation when source info is absent*/ public void testInlineFunWithoutDebugInfo() throws Exception { File inlineSource = new File(getTestDataDirectory(), "sourceInline.kt"); @@ -265,7 +281,8 @@ public class CompileKotlinAgainstCustomBinariesTest extends TestCaseWithTmpdir { //skip debug info } }, 0); - } finally { + } + finally { is.close(); } @@ -299,7 +316,8 @@ public class CompileKotlinAgainstCustomBinariesTest extends TestCaseWithTmpdir { debugInfo.set(debug); } }, 0); - } finally { + } + finally { resultStream.close(); } @@ -316,7 +334,8 @@ public class CompileKotlinAgainstCustomBinariesTest extends TestCaseWithTmpdir { if (InlineCodegenUtil.GENERATE_SMAP) { assertEquals(expected, debugInfo.get()); - } else { + } + else { assertEquals(null, debugInfo.get()); } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt index 8d34b12824c..fccd8698100 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.load.java.lazy.LazyJavaPackageFragmentProvider import org.jetbrains.kotlin.serialization.deserialization.ClassDescriptorFactory import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents +import org.jetbrains.kotlin.serialization.deserialization.ErrorReporter import org.jetbrains.kotlin.serialization.deserialization.LocalClassResolverImpl import org.jetbrains.kotlin.storage.StorageManager @@ -30,7 +31,8 @@ public class DeserializationComponentsForJava( moduleDescriptor: ModuleDescriptor, classDataFinder: JavaClassDataFinder, annotationAndConstantLoader: BinaryClassAnnotationAndConstantLoaderImpl, - packageFragmentProvider: LazyJavaPackageFragmentProvider + packageFragmentProvider: LazyJavaPackageFragmentProvider, + errorReporter: ErrorReporter ) { val components: DeserializationComponents @@ -38,7 +40,8 @@ public class DeserializationComponentsForJava( val localClassResolver = LocalClassResolverImpl() components = DeserializationComponents( storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider, - localClassResolver, JavaFlexibleTypeCapabilitiesDeserializer, ClassDescriptorFactory.EMPTY, JavaTypeCapabilitiesLoader + localClassResolver, errorReporter, JavaFlexibleTypeCapabilitiesDeserializer, ClassDescriptorFactory.EMPTY, + JavaTypeCapabilitiesLoader ) localClassResolver.setDeserializationComponents(components) } diff --git a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/RuntimeModuleData.kt b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/RuntimeModuleData.kt index ffb8b077356..7f0c5484f49 100644 --- a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/RuntimeModuleData.kt +++ b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/RuntimeModuleData.kt @@ -64,7 +64,10 @@ public class RuntimeModuleData private constructor(public val deserialization: D val javaDescriptorResolver = JavaDescriptorResolver(lazyJavaPackageFragmentProvider, module) val javaClassDataFinder = JavaClassDataFinder(reflectKotlinClassFinder, deserializedDescriptorResolver) val binaryClassAnnotationAndConstantLoader = BinaryClassAnnotationAndConstantLoaderImpl(module, storageManager, reflectKotlinClassFinder, RuntimeErrorReporter) - val deserializationComponentsForJava = DeserializationComponentsForJava(storageManager, module, javaClassDataFinder, binaryClassAnnotationAndConstantLoader, lazyJavaPackageFragmentProvider) + val deserializationComponentsForJava = DeserializationComponentsForJava( + storageManager, module, javaClassDataFinder, binaryClassAnnotationAndConstantLoader, + lazyJavaPackageFragmentProvider, RuntimeErrorReporter + ) singleModuleClassResolver.resolver = javaDescriptorResolver deserializedDescriptorResolver.setComponents(deserializationComponentsForJava) diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/builtInsPackageFragmentProvider.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/builtInsPackageFragmentProvider.kt index 91dccc07adf..bcba0a8b473 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/builtInsPackageFragmentProvider.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/builtInsPackageFragmentProvider.kt @@ -45,6 +45,7 @@ public fun createBuiltInPackageFragmentProvider( BuiltInsAnnotationAndConstantLoader(module), provider, localClassResolver, + ErrorReporter.DO_NOTHING, FlexibleTypeCapabilitiesDeserializer.ThrowException, classDescriptorFactory ) diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedType.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedType.kt index 7c757c4042e..54a5d140c5a 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedType.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedType.kt @@ -57,7 +57,12 @@ class DeserializedType( override fun getCapabilities() = c.components.typeCapabilitiesLoader.loadCapabilities(typeProto) - private fun List.getOrNull(index: Int): E? { - return if (index in indices) this[index] else null + fun getPresentableText(): String { + val typeConstructorData = typeProto.getTypeConstructorData() + val id = typeConstructorData.id + return if (typeConstructorData.kind == TypeConstructorKind.CLASS) + c.nameResolver.getClassId(id).asSingleFqName().asString() + else + "Unknown type parameter $id" } } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/ErrorReporter.java b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/ErrorReporter.java index 179079f443d..dd34c2da1e3 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/ErrorReporter.java +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/ErrorReporter.java @@ -32,4 +32,24 @@ public interface ErrorReporter { void reportCannotInferVisibility(@NotNull CallableMemberDescriptor descriptor); void reportLoadingError(@NotNull String message, @Nullable Exception exception); + + ErrorReporter DO_NOTHING = new ErrorReporter() { + @Override + public void reportIncompatibleAbiVersion( + @NotNull ClassId classId, @NotNull String filePath, @NotNull BinaryVersion actualVersion + ) { + } + + @Override + public void reportIncompleteHierarchy(@NotNull ClassDescriptor descriptor, @NotNull List unresolvedSuperClasses) { + } + + @Override + public void reportCannotInferVisibility(@NotNull CallableMemberDescriptor descriptor) { + } + + @Override + public void reportLoadingError(@NotNull String message, @Nullable Exception exception) { + } + }; } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/context.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/context.kt index 6f1f6007e38..3f92332d039 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/context.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/context.kt @@ -31,6 +31,7 @@ public class DeserializationComponents( public val annotationAndConstantLoader: AnnotationAndConstantLoader, AnnotationWithTarget>, public val packageFragmentProvider: PackageFragmentProvider, public val localClassResolver: LocalClassResolver, + public val errorReporter: ErrorReporter, public val flexibleTypeCapabilitiesDeserializer: FlexibleTypeCapabilitiesDeserializer, public val fictitiousClassDescriptorFactory: ClassDescriptorFactory, public val typeCapabilitiesLoader: TypeCapabilitiesLoader = TypeCapabilitiesLoader.NONE diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt index 14590ec33b8..ec421ee3b13 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt @@ -32,11 +32,14 @@ import org.jetbrains.kotlin.serialization.Flags import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.deserialization import org.jetbrains.kotlin.serialization.deserialization.DeserializationContext +import org.jetbrains.kotlin.serialization.deserialization.DeserializedType import org.jetbrains.kotlin.serialization.deserialization.NameResolver import org.jetbrains.kotlin.types.AbstractClassTypeConstructor import org.jetbrains.kotlin.types.JetType +import org.jetbrains.kotlin.types.upperIfFlexible import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.singletonOrEmptyList +import org.jetbrains.kotlin.utils.toReadOnlyList import java.util.* public class DeserializedClassDescriptor( @@ -132,12 +135,25 @@ public class DeserializedClassDescriptor( override fun getCompanionObjectDescriptor(): ClassDescriptor? = companionObjectDescriptor() - private fun computeSuperTypes(): Collection { - val supertypes = ArrayList(classProto.getSupertypeCount()) - for (supertype in classProto.getSupertypeList()) { - supertypes.add(c.typeDeserializer.type(supertype)) + private fun computeSupertypes(): Collection { + val result = ArrayList(classProto.supertypeCount) + val unresolved = ArrayList(0) + + for (supertypeProto in classProto.supertypeList) { + val supertype = c.typeDeserializer.type(supertypeProto) + if (supertype.isError) { + unresolved.add(supertype.upperIfFlexible() as? DeserializedType ?: error("Not a deserialized type: $supertype")) + } + else { + result.add(supertype) + } } - return supertypes + + if (unresolved.isNotEmpty()) { + c.components.errorReporter.reportIncompleteHierarchy(this, unresolved.map(DeserializedType::getPresentableText)) + } + + return result.toReadOnlyList() } internal fun hasNestedClass(name: Name): Boolean { @@ -149,20 +165,13 @@ public class DeserializedClassDescriptor( override fun getSource() = sourceElement private inner class DeserializedClassTypeConstructor : AbstractClassTypeConstructor() { - private val supertypes = computeSuperTypes() + private val supertypes = c.storageManager.createLazyValue { + computeSupertypes() + } override fun getParameters() = c.typeDeserializer.ownTypeParameters - override fun getSupertypes(): Collection { - // We cannot have error supertypes because subclasses inherit error functions from them - // Filtering right away means copying the list every time, so we check for the rare condition first, and only then filter - for (supertype in supertypes) { - if (supertype.isError()) { - return supertypes.filter { !it.isError() } - } - } - return supertypes - } + override fun getSupertypes() = supertypes() override fun isFinal() = !getModality().isOverridable() diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompiler.kt index b891cea41b8..605a9c37664 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompiler.kt @@ -22,7 +22,6 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.load.kotlin.BinaryClassAnnotationAndConstantLoaderImpl import org.jetbrains.kotlin.load.kotlin.JavaFlexibleTypeCapabilitiesDeserializer import org.jetbrains.kotlin.load.kotlin.KotlinBinaryClassCache -import org.jetbrains.kotlin.load.kotlin.PackageClassUtils import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.serialization.deserialization.ClassDescriptorFactory @@ -46,12 +45,15 @@ public class DeserializerForDecompiler( override val classDataFinder = DirectoryBasedDataFinder(classFinder, LOG) + private val errorReporter = LoggingErrorReporter(LOG) + override val annotationAndConstantLoader = - BinaryClassAnnotationAndConstantLoaderImpl(moduleDescriptor, storageManager, classFinder, LoggingErrorReporter(LOG)) + BinaryClassAnnotationAndConstantLoaderImpl(moduleDescriptor, storageManager, classFinder, errorReporter) override val deserializationComponents: DeserializationComponents = DeserializationComponents( storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider, - ResolveEverythingToKotlinAnyLocalClassResolver, JavaFlexibleTypeCapabilitiesDeserializer, ClassDescriptorFactory.EMPTY + ResolveEverythingToKotlinAnyLocalClassResolver, errorReporter, JavaFlexibleTypeCapabilitiesDeserializer, + ClassDescriptorFactory.EMPTY ) override fun resolveDeclarationsInFacade(facadeFqName: FqName): Collection { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/KotlinJavaScriptDeserializerForDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/KotlinJavaScriptDeserializerForDecompiler.kt index 1dfa5dead78..f529aa00ac4 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/KotlinJavaScriptDeserializerForDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/KotlinJavaScriptDeserializerForDecompiler.kt @@ -20,13 +20,9 @@ import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.vfs.VirtualFile import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.idea.decompiler.navigation.JsMetaFileUtils -import org.jetbrains.kotlin.load.kotlin.PackageClassUtils import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.serialization.deserialization.ClassDescriptorFactory -import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents -import org.jetbrains.kotlin.serialization.deserialization.FlexibleTypeCapabilitiesDeserializer -import org.jetbrains.kotlin.serialization.deserialization.NameResolver +import org.jetbrains.kotlin.serialization.deserialization.* import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope import org.jetbrains.kotlin.serialization.js.KotlinJavascriptAnnotationAndConstantLoader import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializedResourcePaths @@ -41,7 +37,7 @@ public class KotlinJavaScriptDeserializerForDecompiler( val moduleDirectory = JsMetaFileUtils.getModuleDirectory(packageDirectory) val stringsFileName = KotlinJavascriptSerializedResourcePaths.getStringTableFilePath(directoryPackageFqName) val stringsFile = moduleDirectory.findFileByRelativePath(stringsFileName) - assert(stringsFile != null, "strings file not found: $stringsFileName") + assert(stringsFile != null) { "strings file not found: $stringsFileName" } NameResolver.read(ByteArrayInputStream(stringsFile!!.contentsToByteArray(false))) } @@ -53,7 +49,8 @@ public class KotlinJavaScriptDeserializerForDecompiler( override val deserializationComponents = DeserializationComponents( storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider, - ResolveEverythingToKotlinAnyLocalClassResolver, FlexibleTypeCapabilitiesDeserializer.Dynamic, ClassDescriptorFactory.EMPTY + ResolveEverythingToKotlinAnyLocalClassResolver, ErrorReporter.DO_NOTHING, FlexibleTypeCapabilitiesDeserializer.Dynamic, + ClassDescriptorFactory.EMPTY ) override fun resolveDeclarationsInFacade(facadeFqName: FqName): Collection { @@ -80,6 +77,6 @@ public class KotlinJavaScriptDeserializerForDecompiler( } companion object { - private val LOG = Logger.getInstance(javaClass()) + private val LOG = Logger.getInstance(KotlinJavaScriptDeserializerForDecompiler::class.java) } } diff --git a/jps-plugin/test/org/jetbrains/kotlin/jps/build/SimpleKotlinJpsBuildTest.kt b/jps-plugin/test/org/jetbrains/kotlin/jps/build/SimpleKotlinJpsBuildTest.kt index 3870a842b98..ef23610fde3 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jps/build/SimpleKotlinJpsBuildTest.kt +++ b/jps-plugin/test/org/jetbrains/kotlin/jps/build/SimpleKotlinJpsBuildTest.kt @@ -25,54 +25,11 @@ import org.jetbrains.kotlin.test.JetTestUtils import java.io.File public class SimpleKotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { - override fun setUp() { super.setUp() workDir = JetTestUtils.tmpDirForTest(this) } - public fun testThreeModulesNoReexport() { - val aFile = createFile("a/a.kt", - """ - trait A1 { - fun bar() - } - trait A2 { - fun bar() - } - """) - val a = addModule("a", PathUtil.getParentPath(aFile)) - - val bFile = createFile("b/b.kt", - """ - trait B1 { - fun foo(): B2? = null - } - - trait B2 : A1, A2 { - override fun bar() {} - } - """) - val b = addModule("b", PathUtil.getParentPath(bFile)) - JpsJavaExtensionService.getInstance().getOrCreateDependencyExtension( - b.getDependenciesList().addModuleDependency(a) - ).setExported(false) - - val cFile = createFile("c/c.kt", - """ - class C : B1 { - fun test() { - foo()?.bar() - } - } - """) - val c = addModule("c", PathUtil.getParentPath(cFile)) - c.getDependenciesList().addModuleDependency(b) - - addKotlinRuntimeDependency() - rebuildAll() - } - public fun testLoadingKotlinFromDifferentModules() { val aFile = createFile("m1/K.kt", """ @@ -102,21 +59,21 @@ public class SimpleKotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { """) val b = addModule("b", PathUtil.getParentPath(bFile)) JpsJavaExtensionService.getInstance().getOrCreateDependencyExtension( - b.getDependenciesList().addModuleDependency(a) - ).setExported(false) + b.dependenciesList.addModuleDependency(a) + ).isExported = false addKotlinRuntimeDependency() rebuildAll() } - public fun testThreeModulesNoReexportWithDaemon() { + public fun testDaemon() { System.setProperty(COMPILE_DAEMON_ENABLED_PROPERTY,"") System.setProperty(COMPILE_DAEMON_VERBOSE_REPORT_PROPERTY, "") // spaces in the name to test proper file name handling val flagFile = File.createTempFile("kotlin-jps - tests-", "-is-running"); try { System.setProperty(COMPILE_DAEMON_CLIENT_ALIVE_PATH_PROPERTY, flagFile.absolutePath) - testThreeModulesNoReexport() + testLoadingKotlinFromDifferentModules() } finally { flagFile.delete() diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/kotlinJavascriptPackageFragmentProvider.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/kotlinJavascriptPackageFragmentProvider.kt index 5362c855cab..7651191a4e8 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/kotlinJavascriptPackageFragmentProvider.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/kotlinJavascriptPackageFragmentProvider.kt @@ -44,6 +44,7 @@ public fun createKotlinJavascriptPackageFragmentProvider( KotlinJavascriptAnnotationAndConstantLoader(module), provider, localClassResolver, + ErrorReporter.DO_NOTHING, FlexibleTypeCapabilitiesDeserializer.Dynamic, ClassDescriptorFactory.EMPTY )