Index enum classes as if they have "Enum" in supertypes

#KT-13057 Fixed
This commit is contained in:
Pavel V. Talanov
2016-07-20 17:29:30 +03:00
parent 8f006bd4aa
commit 84dae76bd9
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
* Copyright 2010-2016 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.
@@ -22,16 +22,21 @@ import com.intellij.psi.stubs.StubInputStream;
import com.intellij.psi.stubs.StubOutputStream;
import com.intellij.util.io.StringRef;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.fileClasses.JvmFileClassInfo;
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil;
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken;
import org.jetbrains.kotlin.lexer.KtTokens;
import org.jetbrains.kotlin.load.java.JvmAbi;
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.psi.KtClassOrObject;
import org.jetbrains.kotlin.psi.KtDeclarationModifierList;
import org.jetbrains.kotlin.psi.KtFile;
import org.jetbrains.kotlin.psi.KtScript;
import org.jetbrains.kotlin.psi.stubs.*;
import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes;
import org.jetbrains.kotlin.psi.stubs.elements.StubIndexService;
import org.jetbrains.kotlin.util.TypeIndexUtilKt;
@@ -118,6 +123,26 @@ public class IdeStubIndexService extends StubIndexService {
for (String superName : stub.getSuperNames()) {
sink.occurrence(KotlinSuperClassIndex.getInstance().getKey(), superName);
}
if (!(stub instanceof KotlinClassStub)) {
return;
}
KotlinModifierListStub modifierListStub = getModifierListStub(stub);
if (modifierListStub == null) return;
if (modifierListStub.hasModifier(KtTokens.ENUM_KEYWORD)) {
sink.occurrence(KotlinSuperClassIndex.getInstance().getKey(), Enum.class.getSimpleName());
}
}
@Nullable
private static KotlinModifierListStub getModifierListStub(@NotNull KotlinClassOrObjectStub<? extends KtClassOrObject> stub) {
StubElement<?> childStub = stub.findChildStubByType(KtStubElementTypes.MODIFIER_LIST);
if (!(childStub instanceof KotlinModifierListStub)) {
return null;
}
return (KotlinModifierListStub) childStub;
}
@Override