From 8b37db12b950ac26ddd0a05eafd2056e2c40ece2 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 7 Jan 2014 21:04:05 +0400 Subject: [PATCH] Concrete header classes replaced by kinds AS a consequence, instanceof checks removed, code simplified --- .../DeserializedDescriptorResolver.java | 20 ++++--- .../header/IncompatibleAnnotationHeader.java | 23 -------- .../kotlin/header/KotlinClassHeader.java | 54 ++++++++++++++++++- .../header/PackageFragmentClassHeader.java | 23 -------- ...eadKotlinClassHeaderAnnotationVisitor.java | 24 ++++----- .../kotlin/header/SerializedDataHeader.java | 45 ---------------- .../kotlin/header/TraitImplClassHeader.java | 23 -------- .../caches/JetFromJavaDescriptorHelper.java | 5 +- .../libraries/DecompiledDataFactory.java | 13 +++-- .../jet/plugin/libraries/DecompiledUtils.java | 5 +- ...yPackageFragmentClsStubBuilderFactory.java | 7 ++- .../vfilefinder/KotlinClassFileIndex.java | 3 +- 12 files changed, 85 insertions(+), 160 deletions(-) delete mode 100644 core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/IncompatibleAnnotationHeader.java delete mode 100644 core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/PackageFragmentClassHeader.java delete mode 100644 core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/SerializedDataHeader.java delete mode 100644 core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/TraitImplClassHeader.java diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DeserializedDescriptorResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DeserializedDescriptorResolver.java index ce479da6823..a1b627ded76 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DeserializedDescriptorResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DeserializedDescriptorResolver.java @@ -30,7 +30,6 @@ import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter; import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassResolver; import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProvider; import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader; -import org.jetbrains.jet.lang.resolve.kotlin.header.SerializedDataHeader; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; @@ -41,8 +40,8 @@ import java.util.Collection; 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.header.SerializedDataHeader.Kind.CLASS; -import static org.jetbrains.jet.lang.resolve.kotlin.header.SerializedDataHeader.Kind.PACKAGE; +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; public final class DeserializedDescriptorResolver { private AnnotationDescriptorDeserializer annotationDeserializer; @@ -103,7 +102,7 @@ public final class DeserializedDescriptorResolver { @Nullable public JetScope createKotlinPackageScope(@NotNull PackageFragmentDescriptor descriptor, @NotNull KotlinJvmBinaryClass kotlinClass) { - String[] data = readData(kotlinClass, PACKAGE); + String[] data = readData(kotlinClass, PACKAGE_FACADE); if (data != null) { return new DeserializedPackageMemberScope(storageManager, descriptor, annotationDeserializer, javaDescriptorFinder, JavaProtoBufUtil.readPackageDataFrom(data)); @@ -112,17 +111,16 @@ public final class DeserializedDescriptorResolver { } @Nullable - private String[] readData(@NotNull KotlinJvmBinaryClass kotlinClass, @NotNull SerializedDataHeader.Kind expectedKind) { + private String[] readData(@NotNull KotlinJvmBinaryClass kotlinClass, @NotNull KotlinClassHeader.Kind expectedKind) { KotlinClassHeader header = kotlinClass.getClassHeader(); - if (header instanceof SerializedDataHeader) { - SerializedDataHeader serializedDataHeader = (SerializedDataHeader) header; - if (serializedDataHeader.getKind() != expectedKind) return null; - return serializedDataHeader.getAnnotationData(); - } + if (header == null) return null; - if (header != null) { + if (header.getKind() == KotlinClassHeader.Kind.INCOMPATIBLE_ABI_VERSION) { errorReporter.reportIncompatibleAbiVersion(kotlinClass, header.getVersion()); } + else if (header.getKind() == expectedKind) { + return header.getAnnotationData(); + } return null; } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/IncompatibleAnnotationHeader.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/IncompatibleAnnotationHeader.java deleted file mode 100644 index 3d97707d26f..00000000000 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/IncompatibleAnnotationHeader.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2010-2013 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.lang.resolve.kotlin.header; - -public class IncompatibleAnnotationHeader extends KotlinClassHeader { - protected IncompatibleAnnotationHeader(int version) { - super(version); - } -} diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/KotlinClassHeader.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/KotlinClassHeader.java index 8dcb0356147..ab1e5d568c6 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/KotlinClassHeader.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/KotlinClassHeader.java @@ -16,15 +16,65 @@ package org.jetbrains.jet.lang.resolve.kotlin.header; -public abstract class KotlinClassHeader { +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +public class KotlinClassHeader { + + @NotNull + public static KotlinClassHeader createClassHeader(int version, @NotNull String[] annotationData) { + return new KotlinClassHeader(Kind.CLASS, version, annotationData); + } + + @NotNull + public static KotlinClassHeader createPackageFacadeHeader(int version, @NotNull String[] annotationData) { + return new KotlinClassHeader(Kind.PACKAGE_FACADE, version, annotationData); + } + + @NotNull + public static KotlinClassHeader createPackageFragmentHeader(int version) { + return new KotlinClassHeader(Kind.PACKAGE_FRAGMENT, version, null); + } + + @NotNull + public static KotlinClassHeader createTraitImplHeader(int version) { + return new KotlinClassHeader(Kind.TRAIT_IMPL, version, null); + } + + @NotNull + public static KotlinClassHeader createIncompatibleVersionErrorHeader(int version) { + return new KotlinClassHeader(Kind.INCOMPATIBLE_ABI_VERSION, version, null); + } + + public enum Kind { + CLASS, + PACKAGE_FACADE, + PACKAGE_FRAGMENT, + TRAIT_IMPL, + INCOMPATIBLE_ABI_VERSION + } + + private final Kind kind; private final int version; + private final String[] data; - protected KotlinClassHeader(int version) { + private KotlinClassHeader(@NotNull Kind kind, int version, @Nullable String[] annotationData) { + this.kind = kind; this.version = version; + this.data = annotationData; + } + + @NotNull + public Kind getKind() { + return kind; } public int getVersion() { return version; } + + @Nullable + public String[] getAnnotationData() { + return data; + } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/PackageFragmentClassHeader.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/PackageFragmentClassHeader.java deleted file mode 100644 index ea41901e8d6..00000000000 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/PackageFragmentClassHeader.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2010-2013 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.lang.resolve.kotlin.header; - -public class PackageFragmentClassHeader extends KotlinClassHeader { - protected PackageFragmentClassHeader(int version) { - super(version); - } -} diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor.java index 2fac7d44e92..01a4bfee913 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/ReadKotlinClassHeaderAnnotationVisitor.java @@ -83,33 +83,27 @@ public class ReadKotlinClassHeaderAnnotationVisitor implements AnnotationVisitor } if (!AbiVersionUtil.isAbiVersionCompatible(version)) { - return new IncompatibleAnnotationHeader(version); + return KotlinClassHeader.createIncompatibleVersionErrorHeader(version); } switch (foundType) { case CLASS: - return serializedDataHeader(SerializedDataHeader.Kind.CLASS); + // This means that the annotation is found and its ABI version is compatible, but there's no "data" string array in it. + // We tell the outside world that there's really no annotation at all + if (annotationData == null) return null; + return KotlinClassHeader.createClassHeader(version, annotationData); case PACKAGE: - return serializedDataHeader(SerializedDataHeader.Kind.PACKAGE); + if (annotationData == null) return null; + return KotlinClassHeader.createPackageFacadeHeader(version, annotationData); case PACKAGE_FRAGMENT: - return new PackageFragmentClassHeader(version); + return KotlinClassHeader.createPackageFragmentHeader(version); case TRAIT_IMPL: - return new TraitImplClassHeader(version); + return KotlinClassHeader.createTraitImplHeader(version); default: throw new UnsupportedOperationException("Unknown compatible HeaderType: " + foundType); } } - @Nullable - private SerializedDataHeader serializedDataHeader(@NotNull SerializedDataHeader.Kind kind) { - if (annotationData == null) { - // This means that the annotation is found and its ABI version is compatible, but there's no "data" string array in it. - // We tell the outside world that there's really no annotation at all - return null; - } - return new SerializedDataHeader(version, annotationData, kind); - } - @Nullable @Override public AnnotationArgumentVisitor visitAnnotation(@NotNull JvmClassName annotationClassName) { diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/SerializedDataHeader.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/SerializedDataHeader.java deleted file mode 100644 index 74cd0e90711..00000000000 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/SerializedDataHeader.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2010-2013 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.lang.resolve.kotlin.header; - -import org.jetbrains.annotations.NotNull; - -public class SerializedDataHeader extends KotlinClassHeader { - public enum Kind { - CLASS, - PACKAGE - } - - private final String[] data; - private final Kind kind; - - protected SerializedDataHeader(int version, @NotNull String[] annotationData, @NotNull Kind kind) { - super(version); - this.data = annotationData; - this.kind = kind; - } - - @NotNull - public String[] getAnnotationData() { - return data; - } - - @NotNull - public Kind getKind() { - return kind; - } -} diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/TraitImplClassHeader.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/TraitImplClassHeader.java deleted file mode 100644 index 5fa4eb7d9d7..00000000000 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/header/TraitImplClassHeader.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2010-2013 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.lang.resolve.kotlin.header; - -/* package */ class TraitImplClassHeader extends KotlinClassHeader { - protected TraitImplClassHeader(int version) { - super(version); - } -} diff --git a/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java b/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java index f818f60177a..7c99f178047 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java +++ b/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java @@ -32,7 +32,6 @@ import org.jetbrains.jet.lang.resolve.java.JavaResolverPsiUtils; import org.jetbrains.jet.lang.resolve.kotlin.KotlinJvmBinaryClass; import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder; import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader; -import org.jetbrains.jet.lang.resolve.kotlin.header.SerializedDataHeader; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.util.QualifiedNamesUtil; @@ -120,8 +119,8 @@ public class JetFromJavaDescriptorHelper { if (virtualFile != null) { KotlinJvmBinaryClass kotlinClass = VirtualFileFinder.SERVICE.getInstance(psiClass.getProject()).createKotlinClass(virtualFile); KotlinClassHeader header = kotlinClass.getClassHeader(); - if (header instanceof SerializedDataHeader) { - return ((SerializedDataHeader) header).getAnnotationData(); + if (header != null) { + return header.getAnnotationData(); } } return null; diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java b/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java index 3f221be24fd..ac499b006b9 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java +++ b/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java @@ -31,7 +31,6 @@ import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.kotlin.KotlinJvmBinaryClass; import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder; import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader; -import org.jetbrains.jet.lang.resolve.kotlin.header.SerializedDataHeader; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.renderer.DescriptorRenderer; import org.jetbrains.jet.renderer.DescriptorRendererBuilder; @@ -54,7 +53,7 @@ public final class DecompiledDataFactory { @NotNull private final JavaDescriptorResolver javaDescriptorResolver; @NotNull - private final SerializedDataHeader classFileHeader; + private final KotlinClassHeader classFileHeader; @NotNull private final FqName classFqName; @NotNull @@ -72,8 +71,8 @@ public final class DecompiledDataFactory { this.classFqName = kotlinClass.getClassName().getFqNameForClassNameWithoutDollars(); KotlinClassHeader header = kotlinClass.getClassHeader(); - assert header instanceof SerializedDataHeader : "Decompiled data factory shouldn't be called on an unsupported file: " + classFile; - this.classFileHeader = (SerializedDataHeader) header; + assert header != null : "Decompiled data factory shouldn't be called on an unsupported file: " + classFile; + this.classFileHeader = header; } @NotNull @@ -84,8 +83,8 @@ public final class DecompiledDataFactory { private JetDecompiledData build() { FqName packageFqName = classFqName.parent(); appendDecompiledTextAndPackageName(packageFqName); - SerializedDataHeader.Kind kind = classFileHeader.getKind(); - if (kind == SerializedDataHeader.Kind.PACKAGE) { + KotlinClassHeader.Kind kind = classFileHeader.getKind(); + if (kind == KotlinClassHeader.Kind.PACKAGE_FACADE) { PackageFragmentDescriptor pf = javaDescriptorResolver.getPackageFragmentProvider().getPackageFragment(packageFqName); if (pf != null) { for (DeclarationDescriptor member : sortDeclarations(pf.getMemberScope().getAllDescriptors())) { @@ -96,7 +95,7 @@ public final class DecompiledDataFactory { } } } - else if (kind == SerializedDataHeader.Kind.CLASS) { + else if (kind == KotlinClassHeader.Kind.CLASS) { ClassDescriptor cd = javaDescriptorResolver.resolveClass(classFqName, INCLUDE_KOTLIN_SOURCES); if (cd != null) { appendDescriptor(cd, ""); diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledUtils.java b/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledUtils.java index 15f148d505e..fb04feb02cd 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledUtils.java +++ b/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledUtils.java @@ -22,7 +22,7 @@ import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.resolve.kotlin.KotlinJvmBinaryClass; import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder; -import org.jetbrains.jet.lang.resolve.kotlin.header.SerializedDataHeader; +import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader; public final class DecompiledUtils { @@ -32,7 +32,8 @@ public final class DecompiledUtils { } //TODO: check index KotlinJvmBinaryClass kotlinClass = VirtualFileFinder.SERVICE.getInstance(project).createKotlinClass(file); - return kotlinClass.getClassHeader() instanceof SerializedDataHeader; + KotlinClassHeader header = kotlinClass.getClassHeader(); + return header != null && header.getAnnotationData() != null; } private DecompiledUtils() { diff --git a/idea/src/org/jetbrains/jet/plugin/stubindex/builder/EmptyPackageFragmentClsStubBuilderFactory.java b/idea/src/org/jetbrains/jet/plugin/stubindex/builder/EmptyPackageFragmentClsStubBuilderFactory.java index 371e23bda01..b91928a8af4 100644 --- a/idea/src/org/jetbrains/jet/plugin/stubindex/builder/EmptyPackageFragmentClsStubBuilderFactory.java +++ b/idea/src/org/jetbrains/jet/plugin/stubindex/builder/EmptyPackageFragmentClsStubBuilderFactory.java @@ -25,9 +25,8 @@ import com.intellij.psi.stubs.PsiFileStub; import com.intellij.util.cls.ClsFormatException; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; -import org.jetbrains.jet.lang.resolve.kotlin.KotlinJvmBinaryClass; import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileKotlinClass; -import org.jetbrains.jet.lang.resolve.kotlin.header.PackageFragmentClassHeader; +import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader; import org.jetbrains.jet.storage.LockBasedStorageManager; /** @@ -46,8 +45,8 @@ public class EmptyPackageFragmentClsStubBuilderFactory extends ClsStubBuilderFac public boolean canBeProcessed(VirtualFile file, byte[] bytes) { if (file.getName().contains(PackageClassUtils.PACKAGE_CLASS_NAME_SUFFIX + "-") && StdFileTypes.CLASS.getDefaultExtension().equals(file.getExtension())) { - KotlinJvmBinaryClass kotlinClass = new VirtualFileKotlinClass(LockBasedStorageManager.NO_LOCKS, file); - return kotlinClass.getClassHeader() instanceof PackageFragmentClassHeader; + KotlinClassHeader header = new VirtualFileKotlinClass(LockBasedStorageManager.NO_LOCKS, file).getClassHeader(); + return header != null && header.getKind() == KotlinClassHeader.Kind.PACKAGE_FRAGMENT; } return false; } diff --git a/idea/src/org/jetbrains/jet/plugin/vfilefinder/KotlinClassFileIndex.java b/idea/src/org/jetbrains/jet/plugin/vfilefinder/KotlinClassFileIndex.java index df9e7dfe37f..388cd1e8dda 100644 --- a/idea/src/org/jetbrains/jet/plugin/vfilefinder/KotlinClassFileIndex.java +++ b/idea/src/org/jetbrains/jet/plugin/vfilefinder/KotlinClassFileIndex.java @@ -24,7 +24,6 @@ import com.intellij.util.io.KeyDescriptor; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.resolve.kotlin.KotlinJvmBinaryClass; import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder; -import org.jetbrains.jet.lang.resolve.kotlin.header.IncompatibleAnnotationHeader; import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -79,7 +78,7 @@ public final class KotlinClassFileIndex extends ScalarIndexExtension { KotlinJvmBinaryClass kotlinClass = VirtualFileFinder.SERVICE.getInstance(inputData.getProject()) .createKotlinClass(inputData.getFile()); KotlinClassHeader header = kotlinClass.getClassHeader(); - if (header != null && !(header instanceof IncompatibleAnnotationHeader)) { + if (header != null && header.getKind() != KotlinClassHeader.Kind.INCOMPATIBLE_ABI_VERSION) { return Collections.singletonMap(kotlinClass.getClassName().getFqNameForClassNameWithoutDollars(), null); } }