Improve LoadBuiltinsTest, load built-ins from dist/kotlin-runtime.jar

This commit is contained in:
Alexander Udalov
2015-09-14 18:02:50 +03:00
parent 35d9880266
commit c7c9ec35cf
2 changed files with 47 additions and 6 deletions
@@ -21,10 +21,15 @@ import com.intellij.util.containers.ContainerUtil;
import kotlin.Unit; import kotlin.Unit;
import kotlin.jvm.functions.Function1; import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull; 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.cli.jvm.compiler.KotlinCoreEnvironment;
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime;
import org.jetbrains.kotlin.descriptors.ModuleDescriptor; import org.jetbrains.kotlin.descriptors.ModuleDescriptor;
import org.jetbrains.kotlin.descriptors.ModuleParameters;
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor; 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.psi.JetFile;
import org.jetbrains.kotlin.renderer.DescriptorRenderer; import org.jetbrains.kotlin.renderer.DescriptorRenderer;
import org.jetbrains.kotlin.renderer.DescriptorRendererModifier; 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.KotlinTestWithEnvironment;
import org.jetbrains.kotlin.resolve.lazy.LazyResolveTestUtil; import org.jetbrains.kotlin.resolve.lazy.LazyResolveTestUtil;
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyPackageDescriptor; 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.ConfigurationKind;
import org.jetbrains.kotlin.test.JetTestUtils; import org.jetbrains.kotlin.test.JetTestUtils;
import org.jetbrains.kotlin.test.TestJdkKind; import org.jetbrains.kotlin.test.TestJdkKind;
import org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator; import org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator;
import java.io.File; import java.io.File;
import java.io.InputStream;
import java.util.List; import java.util.List;
import java.util.regex.Pattern; 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 { public class LoadBuiltinsTest extends KotlinTestWithEnvironment {
@Override @Override
protected KotlinCoreEnvironment createEnvironment() { protected KotlinCoreEnvironment createEnvironment() {
@@ -66,15 +78,15 @@ public class LoadBuiltinsTest extends KotlinTestWithEnvironment {
) )
); );
PackageFragmentDescriptor deserialized = createBuiltInsPackageFragment();
List<JetFile> files = JetTestUtils.loadToJetFiles(getEnvironment(), ContainerUtil.concat( List<JetFile> files = JetTestUtils.loadToJetFiles(getEnvironment(), ContainerUtil.concat(
allFilesUnder("core/builtins/native"), allFilesUnder("core/builtins/native"),
allFilesUnder("core/builtins/src") allFilesUnder("core/builtins/src")
)); ));
PackageFragmentDescriptor deserialized = KotlinBuiltIns.getInstance().getBuiltInsPackageFragment();
ModuleDescriptor module = LazyResolveTestUtil.resolveLazily(files, getEnvironment(), false); 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) { for (PackageFragmentDescriptor fromLazyResolve : fragments) {
if (fromLazyResolve instanceof LazyPackageDescriptor) { if (fromLazyResolve instanceof LazyPackageDescriptor) {
RecursiveDescriptorComparator.validateAndCompareDescriptors( 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 @NotNull
private static List<File> allFilesUnder(@NotNull String directory) { private static List<File> allFilesUnder(@NotNull String directory) {
return FileUtil.findFilesByMask(Pattern.compile(".*\\.kt"), new File(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 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 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; private static volatile KotlinBuiltIns instance = null;
@@ -114,8 +120,7 @@ public class KotlinBuiltIns {
); );
PackageFragmentProvider packageFragmentProvider = BuiltinsPackage.createBuiltInPackageFragmentProvider( PackageFragmentProvider packageFragmentProvider = BuiltinsPackage.createBuiltInPackageFragmentProvider(
storageManager, builtInsModule, storageManager, builtInsModule, BUILT_INS_PACKAGE_FQ_NAMES,
setOf(BUILT_INS_PACKAGE_FQ_NAME, ANNOTATION_PACKAGE_FQ_NAME, BuiltinsPackage.getKOTLIN_REFLECT_FQ_NAME()),
new BuiltInFictitiousFunctionClassFactory(storageManager, builtInsModule), new BuiltInFictitiousFunctionClassFactory(storageManager, builtInsModule),
new Function1<String, InputStream>() { new Function1<String, InputStream>() {
@Override @Override