Index properties defined in primary constructor
#KT-15029 Fixed
This commit is contained in:
@@ -23,12 +23,12 @@ object KotlinStubVersions {
|
||||
// Though only kotlin declarations (no code in the bodies) are stubbed, please do increase this version
|
||||
// if you are not 100% sure it can be avoided.
|
||||
// Increasing this version will lead to reindexing of all kotlin source files on the first IDE startup with the new version.
|
||||
const val SOURCE_STUB_VERSION = 121
|
||||
const val SOURCE_STUB_VERSION = 122
|
||||
|
||||
// Binary stub version should be increased if stub format (org.jetbrains.kotlin.psi.stubs.impl) is changed
|
||||
// or changes are made to the core stub building code (org.jetbrains.kotlin.idea.decompiler.stubBuilder).
|
||||
// Increasing this version will lead to reindexing of all binary files that are potentially kotlin binaries (including all class files).
|
||||
private const val BINARY_STUB_VERSION = 58
|
||||
private const val BINARY_STUB_VERSION = 59
|
||||
|
||||
// Classfile stub version should be increased if changes are made to classfile stub building subsystem (org.jetbrains.kotlin.idea.decompiler.classFile)
|
||||
// Increasing this version will lead to reindexing of all classfiles.
|
||||
|
||||
+6
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.psi.stubs.elements;
|
||||
|
||||
import com.intellij.psi.stubs.IndexSink;
|
||||
import com.intellij.psi.stubs.StubElement;
|
||||
import com.intellij.psi.stubs.StubInputStream;
|
||||
import com.intellij.psi.stubs.StubOutputStream;
|
||||
@@ -63,4 +64,9 @@ public class KtParameterElementType extends KtStubElementType<KotlinParameterStu
|
||||
|
||||
return new KotlinParameterStubImpl(parentStub, fqName, name, isMutable, hasValOrValNode, hasDefaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void indexStub(@NotNull KotlinParameterStub stub, @NotNull IndexSink sink) {
|
||||
StubIndexService.getInstance().indexParameter(stub, sink);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,6 +44,9 @@ open class StubIndexService protected constructor() {
|
||||
open fun indexProperty(stub: KotlinPropertyStub, sink: IndexSink) {
|
||||
}
|
||||
|
||||
open fun indexParameter(stub: KotlinParameterStub, sink: IndexSink) {
|
||||
}
|
||||
|
||||
open fun indexAnnotation(stub: KotlinAnnotationEntryStub, sink: IndexSink) {
|
||||
}
|
||||
|
||||
|
||||
@@ -247,3 +247,11 @@ object LightClassUtil {
|
||||
override fun iterator(): Iterator<PsiMethod> = allMethods.iterator()
|
||||
}
|
||||
}
|
||||
|
||||
fun KtNamedDeclaration.getAccessorLightMethods(): LightClassUtil.PropertyAccessorsPsiMethods {
|
||||
return when (this) {
|
||||
is KtProperty -> LightClassUtil.getLightClassPropertyMethods(this)
|
||||
is KtParameter -> LightClassUtil.getLightClassPropertyMethods(this)
|
||||
else -> throw IllegalStateException("Unexpected property type: ${this}")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ import com.intellij.util.containers.HashSet
|
||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||
import org.jetbrains.kotlin.asJava.defaultImplsChild
|
||||
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
|
||||
import org.jetbrains.kotlin.asJava.getAccessorLightMethods
|
||||
import org.jetbrains.kotlin.asJava.getAccessorNamesCandidatesByPropertyName
|
||||
import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
|
||||
import org.jetbrains.kotlin.idea.stubindex.*
|
||||
@@ -103,7 +104,7 @@ class KotlinShortNamesCache(private val project: Project) : PsiShortNamesCache()
|
||||
val propertyAccessorsPsi = sequenceOfLazyValues({ getPropertyNamesCandidatesByAccessorName(Name.identifier(name)) })
|
||||
.flatMap { it.asSequence() }
|
||||
.flatMap { propertiesIndex.get(it.asString(), project, scope).asSequence() }
|
||||
.flatMap { LightClassUtil.getLightClassPropertyMethods(it).allDeclarations.asSequence() }
|
||||
.flatMap { it.getAccessorLightMethods().allDeclarations.asSequence() }
|
||||
.filter { it.name == name }
|
||||
.map { it as? PsiMethod }
|
||||
|
||||
|
||||
@@ -214,6 +214,14 @@ public class IdeStubIndexService extends StubIndexService {
|
||||
IndexUtilsKt.indexInternals(stub, sink);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void indexParameter(@NotNull KotlinParameterStub stub, @NotNull IndexSink sink) {
|
||||
String name = stub.getName();
|
||||
if (name != null && stub.hasValOrVar()) {
|
||||
sink.occurrence(KotlinPropertyShortNameIndex.getInstance().getKey(), name);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void indexAnnotation(KotlinAnnotationEntryStub stub, IndexSink sink) {
|
||||
sink.occurrence(KotlinAnnotationsIndex.getInstance().getKey(), stub.getShortName());
|
||||
|
||||
+6
-6
@@ -22,12 +22,12 @@ import com.intellij.psi.stubs.StringStubIndexExtension;
|
||||
import com.intellij.psi.stubs.StubIndex;
|
||||
import com.intellij.psi.stubs.StubIndexKey;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.psi.KtProperty;
|
||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public class KotlinPropertyShortNameIndex extends StringStubIndexExtension<KtProperty> {
|
||||
private static final StubIndexKey<String, KtProperty> KEY = KotlinIndexUtil.createIndexKey(KotlinPropertyShortNameIndex.class);
|
||||
public class KotlinPropertyShortNameIndex extends StringStubIndexExtension<KtNamedDeclaration> {
|
||||
private static final StubIndexKey<String, KtNamedDeclaration> KEY = KotlinIndexUtil.createIndexKey(KotlinPropertyShortNameIndex.class);
|
||||
|
||||
private static final KotlinPropertyShortNameIndex ourInstance = new KotlinPropertyShortNameIndex();
|
||||
|
||||
@@ -39,13 +39,13 @@ public class KotlinPropertyShortNameIndex extends StringStubIndexExtension<KtPro
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public StubIndexKey<String, KtProperty> getKey() {
|
||||
public StubIndexKey<String, KtNamedDeclaration> getKey() {
|
||||
return KEY;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<KtProperty> get(@NotNull String s, @NotNull Project project, @NotNull GlobalSearchScope scope) {
|
||||
return StubIndex.getElements(KEY, s, project, scope, KtProperty.class);
|
||||
public Collection<KtNamedDeclaration> get(@NotNull String s, @NotNull Project project, @NotNull GlobalSearchScope scope) {
|
||||
return StubIndex.getElements(KEY, s, project, scope, KtNamedDeclaration.class);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -27,9 +27,9 @@ import org.jetbrains.kotlin.idea.core.KotlinIndicesHelper
|
||||
import org.jetbrains.kotlin.idea.core.targetDescriptors
|
||||
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.psi.KtCallableDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtClass
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtObjectDeclaration
|
||||
import org.jetbrains.kotlin.resolve.ImportedFromObjectCallableDescriptor
|
||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindExclude
|
||||
@@ -99,7 +99,7 @@ class StaticMembersCompletion(
|
||||
val descriptorKindFilter = DescriptorKindFilter.CALLABLES exclude DescriptorKindExclude.Extensions
|
||||
val nameFilter: (String) -> Boolean = { prefixMatcher.prefixMatches(it) }
|
||||
|
||||
val filter = { declaration: KtCallableDeclaration, objectDeclaration: KtObjectDeclaration ->
|
||||
val filter = { declaration: KtNamedDeclaration, objectDeclaration: KtObjectDeclaration ->
|
||||
!declaration.hasModifier(KtTokens.OVERRIDE_KEYWORD) && objectDeclaration.isTopLevelOrCompanion()
|
||||
}
|
||||
indicesHelper.processObjectMembers(descriptorKindFilter, nameFilter, filter) {
|
||||
|
||||
@@ -75,7 +75,7 @@ class KotlinIndicesHelper(
|
||||
}
|
||||
|
||||
fun getTopLevelCallablesByName(name: String): Collection<CallableDescriptor> {
|
||||
val declarations = LinkedHashSet<KtCallableDeclaration>()
|
||||
val declarations = LinkedHashSet<KtNamedDeclaration>()
|
||||
declarations.addTopLevelNonExtensionCallablesByName(KotlinFunctionShortNameIndex.getInstance(), name)
|
||||
declarations.addTopLevelNonExtensionCallablesByName(KotlinPropertyShortNameIndex.getInstance(), name)
|
||||
return declarations
|
||||
@@ -83,11 +83,11 @@ class KotlinIndicesHelper(
|
||||
.filter { descriptorFilter(it) }
|
||||
}
|
||||
|
||||
private fun MutableSet<KtCallableDeclaration>.addTopLevelNonExtensionCallablesByName(
|
||||
index: StringStubIndexExtension<out KtCallableDeclaration>,
|
||||
private fun MutableSet<KtNamedDeclaration>.addTopLevelNonExtensionCallablesByName(
|
||||
index: StringStubIndexExtension<out KtNamedDeclaration>,
|
||||
name: String
|
||||
) {
|
||||
index.get(name, project, scope).filterTo(this) { it.parent is KtFile && it.receiverTypeReference == null }
|
||||
index.get(name, project, scope).filterTo(this) { it.parent is KtFile && it is KtCallableDeclaration && it.receiverTypeReference == null }
|
||||
}
|
||||
|
||||
fun getTopLevelExtensionOperatorsByName(name: String): Collection<FunctionDescriptor> {
|
||||
@@ -336,11 +336,11 @@ class KotlinIndicesHelper(
|
||||
|
||||
fun processKotlinCallablesByName(
|
||||
name: String,
|
||||
filter: (KtCallableDeclaration) -> Boolean,
|
||||
filter: (KtNamedDeclaration) -> Boolean,
|
||||
processor: (CallableDescriptor) -> Unit
|
||||
) {
|
||||
val functions: Sequence<KtCallableDeclaration> = KotlinFunctionShortNameIndex.getInstance().get(name, project, scope).asSequence()
|
||||
val properties: Sequence<KtCallableDeclaration> = KotlinPropertyShortNameIndex.getInstance().get(name, project, scope).asSequence()
|
||||
val properties: Sequence<KtNamedDeclaration> = KotlinPropertyShortNameIndex.getInstance().get(name, project, scope).asSequence()
|
||||
val processed = HashSet<CallableDescriptor>()
|
||||
for (declaration in functions + properties) {
|
||||
ProgressManager.checkCanceled()
|
||||
@@ -390,10 +390,10 @@ class KotlinIndicesHelper(
|
||||
fun processObjectMembers(
|
||||
descriptorKindFilter: DescriptorKindFilter,
|
||||
nameFilter: (String) -> Boolean,
|
||||
filter: (KtCallableDeclaration, KtObjectDeclaration) -> Boolean,
|
||||
filter: (KtNamedDeclaration, KtObjectDeclaration) -> Boolean,
|
||||
processor: (DeclarationDescriptor) -> Unit
|
||||
) {
|
||||
fun processIndex(index: StringStubIndexExtension<out KtCallableDeclaration>) {
|
||||
fun processIndex(index: StringStubIndexExtension<out KtNamedDeclaration>) {
|
||||
for (name in index.getAllKeys(project)) {
|
||||
ProgressManager.checkCanceled()
|
||||
if (!nameFilter(name)) continue
|
||||
|
||||
@@ -34,6 +34,7 @@ import com.intellij.psi.PsiMethod
|
||||
import com.intellij.psi.PsiNameIdentifierOwner
|
||||
import com.intellij.psi.search.searches.ClassInheritorsSearch
|
||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||
import org.jetbrains.kotlin.asJava.getAccessorLightMethods
|
||||
import org.jetbrains.kotlin.asJava.toLightClass
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.MemberDescriptor
|
||||
@@ -323,14 +324,6 @@ private fun collectHeaderMarkers(declaration: KtNamedDeclaration,
|
||||
))
|
||||
}
|
||||
|
||||
fun KtNamedDeclaration.getAccessorLightMethods(): LightClassUtil.PropertyAccessorsPsiMethods {
|
||||
return when (this) {
|
||||
is KtProperty -> LightClassUtil.getLightClassPropertyMethods(this)
|
||||
is KtParameter -> LightClassUtil.getLightClassPropertyMethods(this)
|
||||
else -> throw IllegalStateException("Unexpected property type: ${this}")
|
||||
}
|
||||
}
|
||||
|
||||
private fun collectOverriddenFunctions(functions: Collection<KtNamedFunction>, result: MutableCollection<LineMarkerInfo<*>>) {
|
||||
val mappingToJava = HashMap<PsiMethod, KtNamedFunction>()
|
||||
for (function in functions) {
|
||||
|
||||
@@ -34,6 +34,7 @@ import com.intellij.util.AdapterProcessor
|
||||
import com.intellij.util.CommonProcessors
|
||||
import com.intellij.util.Function
|
||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||
import org.jetbrains.kotlin.asJava.getAccessorLightMethods
|
||||
import org.jetbrains.kotlin.idea.KotlinBundle
|
||||
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinDefinitionsSearcher
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
|
||||
@@ -60,6 +60,7 @@ import com.intellij.util.VisibilityUtil
|
||||
import com.intellij.util.containers.MultiMap
|
||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||
import org.jetbrains.kotlin.asJava.getAccessorLightMethods
|
||||
import org.jetbrains.kotlin.asJava.namedUnwrappedElement
|
||||
import org.jetbrains.kotlin.asJava.toLightClass
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
@@ -75,7 +76,6 @@ import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
||||
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
|
||||
import org.jetbrains.kotlin.idea.core.*
|
||||
import org.jetbrains.kotlin.idea.core.util.showYesNoCancelDialog
|
||||
import org.jetbrains.kotlin.idea.highlighter.markers.getAccessorLightMethods
|
||||
import org.jetbrains.kotlin.idea.intentions.RemoveCurlyBracesFromTemplateIntention
|
||||
import org.jetbrains.kotlin.idea.j2k.IdeaJavaToKotlinServices
|
||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinValVar
|
||||
|
||||
@@ -16,8 +16,11 @@ class Some() {
|
||||
}
|
||||
}
|
||||
|
||||
class SomePrimary(val testInPrimary: Int)
|
||||
|
||||
// SEARCH_TEXT: test
|
||||
// REF: (<root>).testGlobal
|
||||
// REF: (in Some).testInClass
|
||||
// REF: (in Some.Companion).testInClassObject
|
||||
// REF: (in SomePrimary).testInPrimary
|
||||
// REF: (in SomeTrait).testInTrait
|
||||
Reference in New Issue
Block a user