Got rid of getExactlyOnePackageFragment()

This commit is contained in:
Andrey Breslav
2013-12-27 12:55:57 +04:00
parent 48ac30a933
commit 372ab7954b
6 changed files with 34 additions and 43 deletions
@@ -26,8 +26,8 @@ import org.jetbrains.jet.di.InjectorForJavaDescriptorResolver;
import org.jetbrains.jet.di.InjectorForJavaDescriptorResolverUtil;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.impl.MutablePackageFragmentDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.PackageViewDescriptorImpl;
import org.jetbrains.jet.lang.resolve.BindingTraceContext;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.lazy.KotlinTestWithEnvironment;
import org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestUtil;
@@ -62,22 +62,24 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith
JetTestUtils.createFile(ktFile.getName(), FileUtil.loadFile(ktFile), getProject())
), getEnvironment());
PackageFragmentDescriptor testPackage = DescriptorUtils.getExactlyOnePackageFragment(
moduleDescriptor, FqName.topLevel(TEST_PACKAGE_NAME));
PackageViewDescriptor testPackage = moduleDescriptor.getPackage(FqName.topLevel(TEST_PACKAGE_NAME));
assert testPackage != null : "Test package not found: " + TEST_PACKAGE_NAME;
InjectorForJavaDescriptorResolver injector = InjectorForJavaDescriptorResolverUtil.create(getProject(), new BindingTraceContext());
JavaDescriptorResolver javaDescriptorResolver = injector.getJavaDescriptorResolver();
PackageFragmentDescriptor deserialized = serializeAndDeserialize(javaDescriptorResolver, testPackage);
PackageViewDescriptorImpl deserializedPackageView =
new PackageViewDescriptorImpl(moduleDescriptor, deserialized.getFqName(), Arrays.asList(deserialized));
RecursiveDescriptorComparator
.validateAndCompareDescriptors(testPackage, deserialized, RecursiveDescriptorComparator.RECURSIVE, null);
.validateAndCompareDescriptors(testPackage, deserializedPackageView, RecursiveDescriptorComparator.RECURSIVE, null);
}
@NotNull
private static PackageFragmentDescriptor serializeAndDeserialize(
@NotNull JavaDescriptorResolver javaDescriptorResolver,
@NotNull PackageFragmentDescriptor testPackage
@NotNull PackageViewDescriptor testPackage
) {
List<ClassDescriptor> classesAndObjects = getAllClassesAndObjects(testPackage.getMemberScope());
@@ -137,9 +139,11 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith
}
@NotNull
private static byte[] serializePackage(@NotNull PackageFragmentDescriptor descriptor) {
private static byte[] serializePackage(@NotNull PackageViewDescriptor descriptor) {
DescriptorSerializer serializer = new DescriptorSerializer();
ProtoBuf.Package proto = serializer.packageProto(Collections.singleton(descriptor)).build();
List<PackageFragmentDescriptor> fragments =
descriptor.getModule().getPackageFragmentProvider().getPackageFragments(descriptor.getFqName());
ProtoBuf.Package proto = serializer.packageProto(fragments).build();
PackageData data = new PackageData(createNameResolver(serializer.getNameTable()), proto);
return data.toBytes();
}
@@ -29,13 +29,12 @@ import org.jetbrains.jet.di.InjectorForJavaDescriptorResolver;
import org.jetbrains.jet.di.InjectorForJavaDescriptorResolverUtil;
import org.jetbrains.jet.di.InjectorForTests;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor;
import org.jetbrains.jet.lang.descriptors.PackageViewDescriptor;
import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.ReceiverParameterDescriptorImpl;
import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.psi.JetPsiFactory;
import org.jetbrains.jet.lang.resolve.BindingTraceContext;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.ImportPath;
import org.jetbrains.jet.lang.resolve.TypeResolver;
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
@@ -578,8 +577,10 @@ public class JetTypeCheckerTest extends JetLiteFixture {
getEnvironment()
);
PackageFragmentDescriptor testData = DescriptorUtils.getExactlyOnePackageFragment(moduleDescriptor, new FqName("testData"));
return addImports(testData.getMemberScope());
FqName fqName = new FqName("testData");
PackageViewDescriptor packageView = moduleDescriptor.getPackage(fqName);
assertNotNull("Package " + fqName + " not found", packageView);
return addImports(packageView.getMemberScope());
}
@SuppressWarnings("ConstantConditions")
@@ -21,7 +21,6 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.impl.AnonymousFunctionDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -470,12 +469,4 @@ public class DescriptorUtils {
return isTopLevelDeclaration(descriptor) ||
containing instanceof ClassDescriptor && isTopLevelOrInnerClass((ClassDescriptor) containing);
}
@TestOnly
@NotNull
public static PackageFragmentDescriptor getExactlyOnePackageFragment(@NotNull ModuleDescriptor module, @NotNull FqName fqName) {
List<PackageFragmentDescriptor> packageFragments = module.getPackageFragmentProvider().getPackageFragments(fqName);
assert packageFragments.size() == 1 : "Exactly one package fragment expected: " + packageFragments;
return packageFragments.get(0);
}
}
@@ -18,7 +18,6 @@ package org.jetbrains.jet.lang.types.lang;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.descriptors.serialization.ClassId;
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
import org.jetbrains.jet.lang.resolve.name.Name;
@@ -56,20 +55,17 @@ public class BuiltInsSerializationUtil {
}
@NotNull
public static String getPackageFilePath(@NotNull PackageFragmentDescriptor packageFragment) {
FqName fqName = packageFragment.getFqName();
public static String getPackageFilePath(@NotNull FqName fqName) {
return packageFqNameToPath(fqName) + "/" + PACKAGE_FILE_NAME;
}
@NotNull
public static String getNameTableFilePath(@NotNull PackageFragmentDescriptor packageFragment) {
FqName fqName = packageFragment.getFqName();
public static String getNameTableFilePath(@NotNull FqName fqName) {
return packageFqNameToPath(fqName) + "/" + NAME_TABLE_FILE_NAME;
}
@NotNull
public static String getClassNamesFilePath(@NotNull PackageFragmentDescriptor packageFragmentDescriptor) {
FqName fqName = packageFragmentDescriptor.getFqName();
public static String getClassNamesFilePath(@NotNull FqName fqName) {
return packageFqNameToPath(fqName) + "/" + CLASS_NAMES_FILE_NAME;
}
@@ -35,7 +35,7 @@ class BuiltinsPackageFragment extends DeclarationDescriptorImpl implements Packa
public BuiltinsPackageFragment(@NotNull StorageManager storageManager, @NotNull ModuleDescriptor module) {
super(Collections.<AnnotationDescriptor>emptyList(), KotlinBuiltIns.BUILT_INS_PACKAGE_NAME);
this.module = module;
nameResolver = NameSerializationUtil.deserializeNameResolver(getStream(BuiltInsSerializationUtil.getNameTableFilePath(this)));
nameResolver = NameSerializationUtil.deserializeNameResolver(getStream(BuiltInsSerializationUtil.getNameTableFilePath(getFqName())));
packageFragmentProvider = new BuiltinsPackageFragmentProvider();
@@ -45,7 +45,7 @@ class BuiltinsPackageFragment extends DeclarationDescriptorImpl implements Packa
@NotNull
private ProtoBuf.Package loadPackage() {
String packageFilePath = BuiltInsSerializationUtil.getPackageFilePath(this);
String packageFilePath = BuiltInsSerializationUtil.getPackageFilePath(getFqName());
InputStream stream = getStream(packageFilePath);
try {
return ProtoBuf.Package.parseFrom(stream);
@@ -139,7 +139,7 @@ class BuiltinsPackageFragment extends DeclarationDescriptorImpl implements Packa
@Override
@NotNull
public Collection<Name> invoke() {
InputStream in = getStream(BuiltInsSerializationUtil.getClassNamesFilePath(BuiltinsPackageFragment.this));
InputStream in = getStream(BuiltInsSerializationUtil.getClassNamesFilePath(getFqName()));
try {
DataInputStream data = new DataInputStream(in);
@@ -26,10 +26,7 @@ import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
import org.jetbrains.jet.config.CompilerConfiguration;
import org.jetbrains.jet.descriptors.serialization.*;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestUtil;
@@ -40,7 +37,6 @@ import org.jetbrains.jet.test.util.DescriptorValidator;
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern;
@@ -68,9 +64,10 @@ public class BuiltInsSerializer {
List<JetFile> files = JetTestUtils.loadToJetFiles(environment, sourceFiles);
ModuleDescriptor module = LazyResolveTestUtil.resolveLazily(files, environment, false);
PackageFragmentDescriptor packageFragment = DescriptorUtils.getExactlyOnePackageFragment(
module, KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME);
DescriptorValidator.validate(packageFragment);
PackageViewDescriptor packageView = module.getPackage(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME);
assert packageView != null : "Package not found: " + KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME;
DescriptorValidator.validate(packageView);
if (!FileUtil.delete(destDir)) {
System.err.println("Could not delete: " + destDir);
@@ -89,7 +86,7 @@ public class BuiltInsSerializer {
});
final List<Name> classNames = new ArrayList<Name>();
List<DeclarationDescriptor> allDescriptors = DescriptorSerializer.sort(packageFragment.getMemberScope().getAllDescriptors());
List<DeclarationDescriptor> allDescriptors = DescriptorSerializer.sort(packageView.getMemberScope().getAllDescriptors());
ClassSerializationUtil.serializeClasses(allDescriptors, serializer, new ClassSerializationUtil.Sink() {
@Override
public void writeClass(@NotNull ClassDescriptor classDescriptor, @NotNull ProtoBuf.Class classProto) {
@@ -110,16 +107,18 @@ public class BuiltInsSerializer {
ByteArrayOutputStream classNamesStream = new ByteArrayOutputStream();
writeClassNames(serializer, classNames, classNamesStream);
write(destDir, BuiltInsSerializationUtil.getClassNamesFilePath(packageFragment), classNamesStream, out);
write(destDir, BuiltInsSerializationUtil.getClassNamesFilePath(packageView.getFqName()), classNamesStream, out);
ByteArrayOutputStream packageStream = new ByteArrayOutputStream();
ProtoBuf.Package packageProto = serializer.packageProto(Collections.singleton(packageFragment)).build();
List<PackageFragmentDescriptor> fragments =
module.getPackageFragmentProvider().getPackageFragments(packageView.getFqName());
ProtoBuf.Package packageProto = serializer.packageProto(fragments).build();
packageProto.writeTo(packageStream);
write(destDir, BuiltInsSerializationUtil.getPackageFilePath(packageFragment), packageStream, out);
write(destDir, BuiltInsSerializationUtil.getPackageFilePath(packageView.getFqName()), packageStream, out);
ByteArrayOutputStream nameStream = new ByteArrayOutputStream();
NameSerializationUtil.serializeNameTable(nameStream, serializer.getNameTable());
write(destDir, BuiltInsSerializationUtil.getNameTableFilePath(packageFragment), nameStream, out);
write(destDir, BuiltInsSerializationUtil.getNameTableFilePath(packageView.getFqName()), nameStream, out);
if (out != null) {
out.println("Total bytes written: " + totalSize + " to " + totalFiles + " files");