Check header kind when deserializing from class files

This commit is contained in:
Andrey Breslav
2013-12-24 19:02:43 +04:00
parent 5f20450053
commit 22bc499b96
@@ -41,6 +41,8 @@ import java.util.Collection;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES; import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES;
import static org.jetbrains.jet.lang.resolve.kotlin.DeserializedResolverUtils.kotlinFqNameToJavaFqName; import static org.jetbrains.jet.lang.resolve.kotlin.DeserializedResolverUtils.kotlinFqNameToJavaFqName;
import static org.jetbrains.jet.lang.resolve.kotlin.header.SerializedDataHeader.Kind.CLASS;
import static org.jetbrains.jet.lang.resolve.kotlin.header.SerializedDataHeader.Kind.PACKAGE;
public final class DeserializedDescriptorResolver { public final class DeserializedDescriptorResolver {
private AnnotationDescriptorDeserializer annotationDeserializer; private AnnotationDescriptorDeserializer annotationDeserializer;
@@ -90,7 +92,7 @@ public final class DeserializedDescriptorResolver {
@Nullable @Nullable
public ClassDescriptor resolveClass(@NotNull KotlinJvmBinaryClass kotlinClass) { public ClassDescriptor resolveClass(@NotNull KotlinJvmBinaryClass kotlinClass) {
String[] data = readData(kotlinClass); String[] data = readData(kotlinClass, CLASS);
if (data != null) { if (data != null) {
ClassData classData = JavaProtoBufUtil.readClassDataFrom(data); ClassData classData = JavaProtoBufUtil.readClassDataFrom(data);
return new DeserializedClassDescriptor(storageManager, annotationDeserializer, javaDescriptorFinder, return new DeserializedClassDescriptor(storageManager, annotationDeserializer, javaDescriptorFinder,
@@ -101,7 +103,7 @@ public final class DeserializedDescriptorResolver {
@Nullable @Nullable
public JetScope createKotlinPackageScope(@NotNull PackageFragmentDescriptor descriptor, @NotNull KotlinJvmBinaryClass kotlinClass) { public JetScope createKotlinPackageScope(@NotNull PackageFragmentDescriptor descriptor, @NotNull KotlinJvmBinaryClass kotlinClass) {
String[] data = readData(kotlinClass); String[] data = readData(kotlinClass, PACKAGE);
if (data != null) { if (data != null) {
return new DeserializedPackageMemberScope(storageManager, descriptor, annotationDeserializer, javaDescriptorFinder, return new DeserializedPackageMemberScope(storageManager, descriptor, annotationDeserializer, javaDescriptorFinder,
JavaProtoBufUtil.readPackageDataFrom(data)); JavaProtoBufUtil.readPackageDataFrom(data));
@@ -110,10 +112,12 @@ public final class DeserializedDescriptorResolver {
} }
@Nullable @Nullable
private String[] readData(@NotNull KotlinJvmBinaryClass kotlinClass) { private String[] readData(@NotNull KotlinJvmBinaryClass kotlinClass, @NotNull SerializedDataHeader.Kind expectedKind) {
KotlinClassHeader header = KotlinClassHeader.read(kotlinClass); KotlinClassHeader header = KotlinClassHeader.read(kotlinClass);
if (header instanceof SerializedDataHeader) { if (header instanceof SerializedDataHeader) {
return ((SerializedDataHeader) header).getAnnotationData(); SerializedDataHeader serializedDataHeader = (SerializedDataHeader) header;
if (serializedDataHeader.getKind() != expectedKind) return null;
return serializedDataHeader.getAnnotationData();
} }
if (header != null) { if (header != null) {