diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/LoadBuiltinsTest.java b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/LoadBuiltinsTest.java index 63e11d320bd..77cc6edd3e7 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/LoadBuiltinsTest.java +++ b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/LoadBuiltinsTest.java @@ -21,10 +21,15 @@ import com.intellij.util.containers.ContainerUtil; import kotlin.Unit; import kotlin.jvm.functions.Function1; import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.builtins.KotlinBuiltIns; +import org.jetbrains.kotlin.builtins.functions.BuiltInFictitiousFunctionClassFactory; import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment; +import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime; import org.jetbrains.kotlin.descriptors.ModuleDescriptor; +import org.jetbrains.kotlin.descriptors.ModuleParameters; import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor; +import org.jetbrains.kotlin.descriptors.PackageFragmentProvider; +import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl; +import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.psi.JetFile; import org.jetbrains.kotlin.renderer.DescriptorRenderer; import org.jetbrains.kotlin.renderer.DescriptorRendererModifier; @@ -33,15 +38,22 @@ import org.jetbrains.kotlin.renderer.OverrideRenderingPolicy; import org.jetbrains.kotlin.resolve.lazy.KotlinTestWithEnvironment; import org.jetbrains.kotlin.resolve.lazy.LazyResolveTestUtil; import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyPackageDescriptor; +import org.jetbrains.kotlin.storage.LockBasedStorageManager; import org.jetbrains.kotlin.test.ConfigurationKind; import org.jetbrains.kotlin.test.JetTestUtils; import org.jetbrains.kotlin.test.TestJdkKind; import org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator; import java.io.File; +import java.io.InputStream; import java.util.List; import java.util.regex.Pattern; +import static kotlin.KotlinPackage.single; +import static org.jetbrains.kotlin.builtins.BuiltinsPackage.createBuiltInPackageFragmentProvider; +import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME; +import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAMES; + public class LoadBuiltinsTest extends KotlinTestWithEnvironment { @Override protected KotlinCoreEnvironment createEnvironment() { @@ -66,15 +78,15 @@ public class LoadBuiltinsTest extends KotlinTestWithEnvironment { ) ); + PackageFragmentDescriptor deserialized = createBuiltInsPackageFragment(); + List files = JetTestUtils.loadToJetFiles(getEnvironment(), ContainerUtil.concat( allFilesUnder("core/builtins/native"), allFilesUnder("core/builtins/src") )); - PackageFragmentDescriptor deserialized = KotlinBuiltIns.getInstance().getBuiltInsPackageFragment(); - ModuleDescriptor module = LazyResolveTestUtil.resolveLazily(files, getEnvironment(), false); - List fragments = module.getPackage(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME).getFragments(); + List fragments = module.getPackage(BUILT_INS_PACKAGE_FQ_NAME).getFragments(); for (PackageFragmentDescriptor fromLazyResolve : fragments) { if (fromLazyResolve instanceof LazyPackageDescriptor) { RecursiveDescriptorComparator.validateAndCompareDescriptors( @@ -86,6 +98,30 @@ public class LoadBuiltinsTest extends KotlinTestWithEnvironment { } } + @NotNull + private static PackageFragmentDescriptor createBuiltInsPackageFragment() { + LockBasedStorageManager storageManager = new LockBasedStorageManager(); + ModuleDescriptorImpl builtInsModule = new ModuleDescriptorImpl( + Name.special(""), storageManager, ModuleParameters.Empty.INSTANCE$ + ); + + PackageFragmentProvider packageFragmentProvider = createBuiltInPackageFragmentProvider( + storageManager, builtInsModule, BUILT_INS_PACKAGE_FQ_NAMES, + new BuiltInFictitiousFunctionClassFactory(storageManager, builtInsModule), + new Function1() { + @Override + public InputStream invoke(String path) { + return ForTestCompileRuntime.runtimeJarClassLoader().getResourceAsStream(path); + } + } + ); + + builtInsModule.initialize(packageFragmentProvider); + builtInsModule.setDependencies(builtInsModule); + + return single(packageFragmentProvider.getPackageFragments(BUILT_INS_PACKAGE_FQ_NAME)); + } + @NotNull private static List allFilesUnder(@NotNull String directory) { return FileUtil.findFilesByMask(Pattern.compile(".*\\.kt"), new File(directory)); diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java index 91536d1b307..dff1f55d13b 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java @@ -48,6 +48,12 @@ public class KotlinBuiltIns { public static final FqName BUILT_INS_PACKAGE_FQ_NAME = FqName.topLevel(BUILT_INS_PACKAGE_NAME); public static final FqName ANNOTATION_PACKAGE_FQ_NAME = BUILT_INS_PACKAGE_FQ_NAME.child(Name.identifier("annotation")); + public static final Set BUILT_INS_PACKAGE_FQ_NAMES = setOf( + BUILT_INS_PACKAGE_FQ_NAME, + ANNOTATION_PACKAGE_FQ_NAME, + BuiltinsPackage.getKOTLIN_REFLECT_FQ_NAME() + ); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// private static volatile KotlinBuiltIns instance = null; @@ -114,8 +120,7 @@ public class KotlinBuiltIns { ); PackageFragmentProvider packageFragmentProvider = BuiltinsPackage.createBuiltInPackageFragmentProvider( - storageManager, builtInsModule, - setOf(BUILT_INS_PACKAGE_FQ_NAME, ANNOTATION_PACKAGE_FQ_NAME, BuiltinsPackage.getKOTLIN_REFLECT_FQ_NAME()), + storageManager, builtInsModule, BUILT_INS_PACKAGE_FQ_NAMES, new BuiltInFictitiousFunctionClassFactory(storageManager, builtInsModule), new Function1() { @Override