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.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
|
||||||
|
|||||||
Reference in New Issue
Block a user