Drop ClassDataFinder#getClassNames()

This commit is contained in:
Pavel V. Talanov
2014-06-19 15:43:09 +04:00
parent 0c8956a36e
commit 123523d1dc
7 changed files with 53 additions and 65 deletions
@@ -115,7 +115,7 @@ public class IncrementalPackageFragmentProvider(
}
private inner class IncrementalPackageScope(val packageData: PackageData) : DeserializedPackageMemberScope(
this@IncrementalPackageFragment, packageData, deserializationContext
this@IncrementalPackageFragment, packageData, deserializationContext, { listOf() }
) {
override fun filteredMemberProtos(allMemberProtos: Collection<ProtoBuf.Callable>): Collection<ProtoBuf.Callable> {
return allMemberProtos
@@ -16,6 +16,7 @@
package org.jetbrains.jet.lang.resolve.kotlin;
import kotlin.Function0;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.descriptors.serialization.ClassData;
@@ -27,10 +28,14 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor;
import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter;
import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import javax.inject.Inject;
import java.util.Collection;
import java.util.Collections;
import static org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader.Kind.CLASS;
import static org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader.Kind.PACKAGE_FACADE;
@@ -65,7 +70,14 @@ public final class DeserializedDescriptorResolver {
public JetScope createKotlinPackageScope(@NotNull PackageFragmentDescriptor descriptor, @NotNull KotlinJvmBinaryClass kotlinClass) {
String[] data = readData(kotlinClass, PACKAGE_FACADE);
if (data != null) {
return new DeserializedPackageMemberScope(descriptor, JavaProtoBufUtil.readPackageDataFrom(data), context);
//all classes are included in java scope
return new DeserializedPackageMemberScope(descriptor, JavaProtoBufUtil.readPackageDataFrom(data), context,
new Function0<Collection<Name>>() {
@Override
public Collection<Name> invoke() {
return Collections.emptyList();
}
});
}
return null;
}
@@ -45,8 +45,4 @@ public class JavaClassDataFinder(
val data = deserializedDescriptorResolver.readData(kotlinJvmBinaryClass, KotlinClassHeader.Kind.CLASS) ?: return null
return JavaProtoBufUtil.readClassDataFrom(data)
}
override fun getClassNames(packageName: FqName): Collection<Name> {
return Collections.emptyList()
}
}
@@ -48,14 +48,40 @@ class BuiltinsPackageFragment extends PackageFragmentDescriptorImpl {
packageFragmentProvider = new BuiltinsPackageFragmentProvider();
BuiltInsClassDataFinder builtInsClassDataFinder = new BuiltInsClassDataFinder(storageManager);
Function0<Collection<Name>> classNames = new Function0<Collection<Name>>() {
@Override
@NotNull
public Collection<Name> invoke() {
InputStream in = getStream(BuiltInsSerializationUtil.getClassNamesFilePath(getFqName()));
try {
DataInputStream data = new DataInputStream(in);
try {
int size = data.readInt();
List<Name> result = new ArrayList<Name>(size);
for (int i = 0; i < size; i++) {
result.add(nameResolver.getName(data.readInt()));
}
return result;
}
finally {
data.close();
}
}
catch (IOException e) {
throw new IllegalStateException(e);
}
}
};
BuiltInsClassDataFinder builtInsClassDataFinder = new BuiltInsClassDataFinder();
DeserializationContext deserializationContext = new DeserializationContext(
storageManager, module, builtInsClassDataFinder,
// TODO: support annotations
AnnotationLoader.UNSUPPORTED, ConstantLoader.UNSUPPORTED, packageFragmentProvider,
new ClassDeserializer(storageManager, builtInsClassDataFinder), nameResolver
);
members = new DeserializedPackageMemberScope(this, loadPackage(), deserializationContext);
members = new DeserializedPackageMemberScope(this, loadPackage(), deserializationContext, classNames);
}
@NotNull
@@ -116,37 +142,6 @@ class BuiltinsPackageFragment extends PackageFragmentDescriptorImpl {
}
private class BuiltInsClassDataFinder implements ClassDataFinder {
private final NotNullLazyValue<Collection<Name>> classNames;
public BuiltInsClassDataFinder(@NotNull StorageManager storageManager) {
// TODO: support annotations
classNames = storageManager.createLazyValue(new Function0<Collection<Name>>() {
@Override
@NotNull
public Collection<Name> invoke() {
InputStream in = getStream(BuiltInsSerializationUtil.getClassNamesFilePath(getFqName()));
try {
DataInputStream data = new DataInputStream(in);
try {
int size = data.readInt();
List<Name> result = new ArrayList<Name>(size);
for (int i = 0; i < size; i++) {
result.add(nameResolver.getName(data.readInt()));
}
return result;
}
finally {
data.close();
}
}
catch (IOException e) {
throw new IllegalStateException(e);
}
}
});
}
@Nullable
@Override
public ClassData findClassData(@NotNull ClassId classId) {
@@ -172,11 +167,5 @@ class BuiltinsPackageFragment extends PackageFragmentDescriptorImpl {
throw new IllegalStateException(e);
}
}
@NotNull
@Override
public Collection<Name> getClassNames(@NotNull FqName packageName) {
return packageName.equals(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME) ? classNames.invoke() : Collections.<Name>emptyList();
}
}
}
@@ -18,19 +18,8 @@ package org.jetbrains.jet.descriptors.serialization;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.ReadOnly;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
import java.util.Collection;
import java.util.Collections;
public interface ClassDataFinder {
@Nullable
ClassData findClassData(@NotNull ClassId classId);
@ReadOnly
@NotNull
Collection<Name> getClassNames(@NotNull FqName packageName);
}
@@ -16,6 +16,7 @@
package org.jetbrains.jet.descriptors.serialization.descriptors;
import kotlin.Function0;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.descriptors.serialization.ClassId;
@@ -31,6 +32,7 @@ import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.storage.NotNullLazyValue;
import java.util.Collection;
@@ -38,23 +40,27 @@ public class DeserializedPackageMemberScope extends DeserializedMemberScope {
private final FqName packageFqName;
private final DeserializationContext context;
private final NotNullLazyValue<Collection<Name>> classNames;
public DeserializedPackageMemberScope(
@NotNull PackageFragmentDescriptor packageDescriptor,
@NotNull ProtoBuf.Package proto,
@NotNull DeserializationContext context
@NotNull DeserializationContext context,
@NotNull Function0<Collection<Name>> classNames
) {
super(context.withTypes(packageDescriptor), proto.getMemberList());
this.context = context;
this.packageFqName = packageDescriptor.getFqName();
this.classNames = context.getStorageManager().createLazyValue(classNames);
}
public DeserializedPackageMemberScope(
@NotNull PackageFragmentDescriptor packageDescriptor,
@NotNull PackageData packageData,
@NotNull DeserializationGlobalContext context
@NotNull DeserializationGlobalContext context,
@NotNull Function0<Collection<Name>> classNames
) {
this(packageDescriptor, packageData.getPackageProto(), context.withNameResolver(packageData.getNameResolver()));
this(packageDescriptor, packageData.getPackageProto(), context.withNameResolver(packageData.getNameResolver()), classNames);
}
@Nullable
@Override
@@ -64,7 +70,7 @@ public class DeserializedPackageMemberScope extends DeserializedMemberScope {
@Override
protected void addAllClassDescriptors(@NotNull Collection<DeclarationDescriptor> result) {
for (Name className : context.getClassDataFinder().getClassNames(packageFqName)) {
for (Name className : classNames.invoke()) {
ClassDescriptor classDescriptor = getClassDescriptor(className);
if (classDescriptor != null) {
@@ -72,7 +72,7 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di
createDummyPackageFragment(packageFqName),
JavaProtoBufUtil.readPackageDataFrom(annotationData),
deserializationContext
)
) { listOf() }
return membersScope.getAllDescriptors()
}
@@ -126,10 +126,6 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di
}
return JavaProtoBufUtil.readClassDataFrom(data)
}
override fun getClassNames(packageName: FqName): Collection<Name> {
return Collections.emptyList()
}
}
private val packageFragmentProvider = object : PackageFragmentProvider {