Improve LoadBuiltinsTest, load built-ins from dist/kotlin-runtime.jar
This commit is contained in:
@@ -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<JetFile> 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<PackageFragmentDescriptor> fragments = module.getPackage(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME).getFragments();
|
||||
List<PackageFragmentDescriptor> 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("<built-ins module>"), storageManager, ModuleParameters.Empty.INSTANCE$
|
||||
);
|
||||
|
||||
PackageFragmentProvider packageFragmentProvider = createBuiltInPackageFragmentProvider(
|
||||
storageManager, builtInsModule, BUILT_INS_PACKAGE_FQ_NAMES,
|
||||
new BuiltInFictitiousFunctionClassFactory(storageManager, builtInsModule),
|
||||
new Function1<String, InputStream>() {
|
||||
@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<File> allFilesUnder(@NotNull String directory) {
|
||||
return FileUtil.findFilesByMask(Pattern.compile(".*\\.kt"), new File(directory));
|
||||
|
||||
@@ -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<FqName> 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<String, InputStream>() {
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user