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
This commit is contained in:
Alexander Udalov
2015-02-09 17:52:42 +03:00
parent b1d9e5c961
commit 949144e0c0
15 changed files with 118 additions and 82 deletions
@@ -0,0 +1,7 @@
package test
public open class Super {
public fun foo() {}
}
public open class Sub : Super()
@@ -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()
^
@@ -0,0 +1,5 @@
import test.Sub
class SubSub : Sub()
fun bar() = SubSub().foo()
@@ -244,6 +244,22 @@ public class CompileKotlinAgainstCustomBinariesTest extends TestCaseWithTmpdir {
JetTestUtils.assertEqualsToFile(new File(getTestDataDirectory(), "output.txt"), output); 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<String, ExitCode> 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*/ /*test source mapping generation when source info is absent*/
public void testInlineFunWithoutDebugInfo() throws Exception { public void testInlineFunWithoutDebugInfo() throws Exception {
File inlineSource = new File(getTestDataDirectory(), "sourceInline.kt"); File inlineSource = new File(getTestDataDirectory(), "sourceInline.kt");
@@ -265,7 +281,8 @@ public class CompileKotlinAgainstCustomBinariesTest extends TestCaseWithTmpdir {
//skip debug info //skip debug info
} }
}, 0); }, 0);
} finally { }
finally {
is.close(); is.close();
} }
@@ -299,7 +316,8 @@ public class CompileKotlinAgainstCustomBinariesTest extends TestCaseWithTmpdir {
debugInfo.set(debug); debugInfo.set(debug);
} }
}, 0); }, 0);
} finally { }
finally {
resultStream.close(); resultStream.close();
} }
@@ -316,7 +334,8 @@ public class CompileKotlinAgainstCustomBinariesTest extends TestCaseWithTmpdir {
if (InlineCodegenUtil.GENERATE_SMAP) { if (InlineCodegenUtil.GENERATE_SMAP) {
assertEquals(expected, debugInfo.get()); assertEquals(expected, debugInfo.get());
} else { }
else {
assertEquals(null, debugInfo.get()); assertEquals(null, debugInfo.get());
} }
} }
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.load.java.lazy.LazyJavaPackageFragmentProvider import org.jetbrains.kotlin.load.java.lazy.LazyJavaPackageFragmentProvider
import org.jetbrains.kotlin.serialization.deserialization.ClassDescriptorFactory import org.jetbrains.kotlin.serialization.deserialization.ClassDescriptorFactory
import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents 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.serialization.deserialization.LocalClassResolverImpl
import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.storage.StorageManager
@@ -30,7 +31,8 @@ public class DeserializationComponentsForJava(
moduleDescriptor: ModuleDescriptor, moduleDescriptor: ModuleDescriptor,
classDataFinder: JavaClassDataFinder, classDataFinder: JavaClassDataFinder,
annotationAndConstantLoader: BinaryClassAnnotationAndConstantLoaderImpl, annotationAndConstantLoader: BinaryClassAnnotationAndConstantLoaderImpl,
packageFragmentProvider: LazyJavaPackageFragmentProvider packageFragmentProvider: LazyJavaPackageFragmentProvider,
errorReporter: ErrorReporter
) { ) {
val components: DeserializationComponents val components: DeserializationComponents
@@ -38,7 +40,8 @@ public class DeserializationComponentsForJava(
val localClassResolver = LocalClassResolverImpl() val localClassResolver = LocalClassResolverImpl()
components = DeserializationComponents( components = DeserializationComponents(
storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider, storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider,
localClassResolver, JavaFlexibleTypeCapabilitiesDeserializer, ClassDescriptorFactory.EMPTY, JavaTypeCapabilitiesLoader localClassResolver, errorReporter, JavaFlexibleTypeCapabilitiesDeserializer, ClassDescriptorFactory.EMPTY,
JavaTypeCapabilitiesLoader
) )
localClassResolver.setDeserializationComponents(components) localClassResolver.setDeserializationComponents(components)
} }
@@ -64,7 +64,10 @@ public class RuntimeModuleData private constructor(public val deserialization: D
val javaDescriptorResolver = JavaDescriptorResolver(lazyJavaPackageFragmentProvider, module) val javaDescriptorResolver = JavaDescriptorResolver(lazyJavaPackageFragmentProvider, module)
val javaClassDataFinder = JavaClassDataFinder(reflectKotlinClassFinder, deserializedDescriptorResolver) val javaClassDataFinder = JavaClassDataFinder(reflectKotlinClassFinder, deserializedDescriptorResolver)
val binaryClassAnnotationAndConstantLoader = BinaryClassAnnotationAndConstantLoaderImpl(module, storageManager, reflectKotlinClassFinder, RuntimeErrorReporter) 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 singleModuleClassResolver.resolver = javaDescriptorResolver
deserializedDescriptorResolver.setComponents(deserializationComponentsForJava) deserializedDescriptorResolver.setComponents(deserializationComponentsForJava)
@@ -45,6 +45,7 @@ public fun createBuiltInPackageFragmentProvider(
BuiltInsAnnotationAndConstantLoader(module), BuiltInsAnnotationAndConstantLoader(module),
provider, provider,
localClassResolver, localClassResolver,
ErrorReporter.DO_NOTHING,
FlexibleTypeCapabilitiesDeserializer.ThrowException, FlexibleTypeCapabilitiesDeserializer.ThrowException,
classDescriptorFactory classDescriptorFactory
) )
@@ -57,7 +57,12 @@ class DeserializedType(
override fun getCapabilities() = c.components.typeCapabilitiesLoader.loadCapabilities(typeProto) override fun getCapabilities() = c.components.typeCapabilitiesLoader.loadCapabilities(typeProto)
private fun <E: Any> List<E>.getOrNull(index: Int): E? { fun getPresentableText(): String {
return if (index in indices) this[index] else null 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"
} }
} }
@@ -32,4 +32,24 @@ public interface ErrorReporter {
void reportCannotInferVisibility(@NotNull CallableMemberDescriptor descriptor); void reportCannotInferVisibility(@NotNull CallableMemberDescriptor descriptor);
void reportLoadingError(@NotNull String message, @Nullable Exception exception); 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<String> unresolvedSuperClasses) {
}
@Override
public void reportCannotInferVisibility(@NotNull CallableMemberDescriptor descriptor) {
}
@Override
public void reportLoadingError(@NotNull String message, @Nullable Exception exception) {
}
};
} }
@@ -31,6 +31,7 @@ public class DeserializationComponents(
public val annotationAndConstantLoader: AnnotationAndConstantLoader<AnnotationDescriptor, ConstantValue<*>, AnnotationWithTarget>, public val annotationAndConstantLoader: AnnotationAndConstantLoader<AnnotationDescriptor, ConstantValue<*>, AnnotationWithTarget>,
public val packageFragmentProvider: PackageFragmentProvider, public val packageFragmentProvider: PackageFragmentProvider,
public val localClassResolver: LocalClassResolver, public val localClassResolver: LocalClassResolver,
public val errorReporter: ErrorReporter,
public val flexibleTypeCapabilitiesDeserializer: FlexibleTypeCapabilitiesDeserializer, public val flexibleTypeCapabilitiesDeserializer: FlexibleTypeCapabilitiesDeserializer,
public val fictitiousClassDescriptorFactory: ClassDescriptorFactory, public val fictitiousClassDescriptorFactory: ClassDescriptorFactory,
public val typeCapabilitiesLoader: TypeCapabilitiesLoader = TypeCapabilitiesLoader.NONE public val typeCapabilitiesLoader: TypeCapabilitiesLoader = TypeCapabilitiesLoader.NONE
@@ -32,11 +32,14 @@ import org.jetbrains.kotlin.serialization.Flags
import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.ProtoBuf
import org.jetbrains.kotlin.serialization.deserialization import org.jetbrains.kotlin.serialization.deserialization
import org.jetbrains.kotlin.serialization.deserialization.DeserializationContext 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.serialization.deserialization.NameResolver
import org.jetbrains.kotlin.types.AbstractClassTypeConstructor import org.jetbrains.kotlin.types.AbstractClassTypeConstructor
import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.types.JetType
import org.jetbrains.kotlin.types.upperIfFlexible
import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.addIfNotNull
import org.jetbrains.kotlin.utils.singletonOrEmptyList import org.jetbrains.kotlin.utils.singletonOrEmptyList
import org.jetbrains.kotlin.utils.toReadOnlyList
import java.util.* import java.util.*
public class DeserializedClassDescriptor( public class DeserializedClassDescriptor(
@@ -132,12 +135,25 @@ public class DeserializedClassDescriptor(
override fun getCompanionObjectDescriptor(): ClassDescriptor? = companionObjectDescriptor() override fun getCompanionObjectDescriptor(): ClassDescriptor? = companionObjectDescriptor()
private fun computeSuperTypes(): Collection<JetType> { private fun computeSupertypes(): Collection<JetType> {
val supertypes = ArrayList<JetType>(classProto.getSupertypeCount()) val result = ArrayList<JetType>(classProto.supertypeCount)
for (supertype in classProto.getSupertypeList()) { val unresolved = ArrayList<DeserializedType>(0)
supertypes.add(c.typeDeserializer.type(supertype))
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 { internal fun hasNestedClass(name: Name): Boolean {
@@ -149,20 +165,13 @@ public class DeserializedClassDescriptor(
override fun getSource() = sourceElement override fun getSource() = sourceElement
private inner class DeserializedClassTypeConstructor : AbstractClassTypeConstructor() { private inner class DeserializedClassTypeConstructor : AbstractClassTypeConstructor() {
private val supertypes = computeSuperTypes() private val supertypes = c.storageManager.createLazyValue {
computeSupertypes()
}
override fun getParameters() = c.typeDeserializer.ownTypeParameters override fun getParameters() = c.typeDeserializer.ownTypeParameters
override fun getSupertypes(): Collection<JetType> { override fun getSupertypes() = supertypes()
// 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 isFinal() = !getModality().isOverridable() override fun isFinal() = !getModality().isOverridable()
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.load.kotlin.BinaryClassAnnotationAndConstantLoaderImpl import org.jetbrains.kotlin.load.kotlin.BinaryClassAnnotationAndConstantLoaderImpl
import org.jetbrains.kotlin.load.kotlin.JavaFlexibleTypeCapabilitiesDeserializer import org.jetbrains.kotlin.load.kotlin.JavaFlexibleTypeCapabilitiesDeserializer
import org.jetbrains.kotlin.load.kotlin.KotlinBinaryClassCache 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.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.serialization.deserialization.ClassDescriptorFactory import org.jetbrains.kotlin.serialization.deserialization.ClassDescriptorFactory
@@ -46,12 +45,15 @@ public class DeserializerForDecompiler(
override val classDataFinder = DirectoryBasedDataFinder(classFinder, LOG) override val classDataFinder = DirectoryBasedDataFinder(classFinder, LOG)
private val errorReporter = LoggingErrorReporter(LOG)
override val annotationAndConstantLoader = override val annotationAndConstantLoader =
BinaryClassAnnotationAndConstantLoaderImpl(moduleDescriptor, storageManager, classFinder, LoggingErrorReporter(LOG)) BinaryClassAnnotationAndConstantLoaderImpl(moduleDescriptor, storageManager, classFinder, errorReporter)
override val deserializationComponents: DeserializationComponents = DeserializationComponents( override val deserializationComponents: DeserializationComponents = DeserializationComponents(
storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider, storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider,
ResolveEverythingToKotlinAnyLocalClassResolver, JavaFlexibleTypeCapabilitiesDeserializer, ClassDescriptorFactory.EMPTY ResolveEverythingToKotlinAnyLocalClassResolver, errorReporter, JavaFlexibleTypeCapabilitiesDeserializer,
ClassDescriptorFactory.EMPTY
) )
override fun resolveDeclarationsInFacade(facadeFqName: FqName): Collection<DeclarationDescriptor> { override fun resolveDeclarationsInFacade(facadeFqName: FqName): Collection<DeclarationDescriptor> {
@@ -20,13 +20,9 @@ import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.idea.decompiler.navigation.JsMetaFileUtils 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.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.serialization.deserialization.ClassDescriptorFactory import org.jetbrains.kotlin.serialization.deserialization.*
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.descriptors.DeserializedPackageMemberScope import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope
import org.jetbrains.kotlin.serialization.js.KotlinJavascriptAnnotationAndConstantLoader import org.jetbrains.kotlin.serialization.js.KotlinJavascriptAnnotationAndConstantLoader
import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializedResourcePaths import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializedResourcePaths
@@ -41,7 +37,7 @@ public class KotlinJavaScriptDeserializerForDecompiler(
val moduleDirectory = JsMetaFileUtils.getModuleDirectory(packageDirectory) val moduleDirectory = JsMetaFileUtils.getModuleDirectory(packageDirectory)
val stringsFileName = KotlinJavascriptSerializedResourcePaths.getStringTableFilePath(directoryPackageFqName) val stringsFileName = KotlinJavascriptSerializedResourcePaths.getStringTableFilePath(directoryPackageFqName)
val stringsFile = moduleDirectory.findFileByRelativePath(stringsFileName) 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))) NameResolver.read(ByteArrayInputStream(stringsFile!!.contentsToByteArray(false)))
} }
@@ -53,7 +49,8 @@ public class KotlinJavaScriptDeserializerForDecompiler(
override val deserializationComponents = DeserializationComponents( override val deserializationComponents = DeserializationComponents(
storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider, storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider,
ResolveEverythingToKotlinAnyLocalClassResolver, FlexibleTypeCapabilitiesDeserializer.Dynamic, ClassDescriptorFactory.EMPTY ResolveEverythingToKotlinAnyLocalClassResolver, ErrorReporter.DO_NOTHING, FlexibleTypeCapabilitiesDeserializer.Dynamic,
ClassDescriptorFactory.EMPTY
) )
override fun resolveDeclarationsInFacade(facadeFqName: FqName): Collection<DeclarationDescriptor> { override fun resolveDeclarationsInFacade(facadeFqName: FqName): Collection<DeclarationDescriptor> {
@@ -80,6 +77,6 @@ public class KotlinJavaScriptDeserializerForDecompiler(
} }
companion object { companion object {
private val LOG = Logger.getInstance(javaClass<KotlinJavaScriptDeserializerForDecompiler>()) private val LOG = Logger.getInstance(KotlinJavaScriptDeserializerForDecompiler::class.java)
} }
} }
@@ -25,54 +25,11 @@ import org.jetbrains.kotlin.test.JetTestUtils
import java.io.File import java.io.File
public class SimpleKotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { public class SimpleKotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() {
override fun setUp() { override fun setUp() {
super.setUp() super.setUp()
workDir = JetTestUtils.tmpDirForTest(this) 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() { public fun testLoadingKotlinFromDifferentModules() {
val aFile = createFile("m1/K.kt", val aFile = createFile("m1/K.kt",
""" """
@@ -102,21 +59,21 @@ public class SimpleKotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() {
""") """)
val b = addModule("b", PathUtil.getParentPath(bFile)) val b = addModule("b", PathUtil.getParentPath(bFile))
JpsJavaExtensionService.getInstance().getOrCreateDependencyExtension( JpsJavaExtensionService.getInstance().getOrCreateDependencyExtension(
b.getDependenciesList().addModuleDependency(a) b.dependenciesList.addModuleDependency(a)
).setExported(false) ).isExported = false
addKotlinRuntimeDependency() addKotlinRuntimeDependency()
rebuildAll() rebuildAll()
} }
public fun testThreeModulesNoReexportWithDaemon() { public fun testDaemon() {
System.setProperty(COMPILE_DAEMON_ENABLED_PROPERTY,"") System.setProperty(COMPILE_DAEMON_ENABLED_PROPERTY,"")
System.setProperty(COMPILE_DAEMON_VERBOSE_REPORT_PROPERTY, "") System.setProperty(COMPILE_DAEMON_VERBOSE_REPORT_PROPERTY, "")
// spaces in the name to test proper file name handling // spaces in the name to test proper file name handling
val flagFile = File.createTempFile("kotlin-jps - tests-", "-is-running"); val flagFile = File.createTempFile("kotlin-jps - tests-", "-is-running");
try { try {
System.setProperty(COMPILE_DAEMON_CLIENT_ALIVE_PATH_PROPERTY, flagFile.absolutePath) System.setProperty(COMPILE_DAEMON_CLIENT_ALIVE_PATH_PROPERTY, flagFile.absolutePath)
testThreeModulesNoReexport() testLoadingKotlinFromDifferentModules()
} }
finally { finally {
flagFile.delete() flagFile.delete()
@@ -44,6 +44,7 @@ public fun createKotlinJavascriptPackageFragmentProvider(
KotlinJavascriptAnnotationAndConstantLoader(module), KotlinJavascriptAnnotationAndConstantLoader(module),
provider, provider,
localClassResolver, localClassResolver,
ErrorReporter.DO_NOTHING,
FlexibleTypeCapabilitiesDeserializer.Dynamic, FlexibleTypeCapabilitiesDeserializer.Dynamic,
ClassDescriptorFactory.EMPTY ClassDescriptorFactory.EMPTY
) )