Minor. Added some util methods for LexicalScope
This commit is contained in:
@@ -73,20 +73,36 @@ public fun LexicalScope.getDeclarationsByLabel(labelName: Name): Collection<Decl
|
||||
}
|
||||
}
|
||||
|
||||
// Result is guaranteed to be filtered by kind and name.
|
||||
public fun LexicalScope.getDescriptorsFiltered(
|
||||
kindFilter: DescriptorKindFilter = DescriptorKindFilter.ALL,
|
||||
nameFilter: (Name) -> Boolean = { true }
|
||||
): Collection<DeclarationDescriptor> {
|
||||
if (kindFilter.kindMask == 0) return listOf()
|
||||
return collectAllFromMeAndParent {
|
||||
if (it is FileScope) {
|
||||
it.getDescriptors(kindFilter, nameFilter)
|
||||
} else {
|
||||
it.getDeclaredDescriptors()
|
||||
}
|
||||
}.filter { kindFilter.accepts(it) && nameFilter(it.name) }
|
||||
}
|
||||
|
||||
|
||||
@deprecated("Use getOwnProperties instead")
|
||||
public fun LexicalScope.getLocalVariable(name: Name, location: LookupLocation = NoLookupLocation.UNSORTED): VariableDescriptor? {
|
||||
public fun LexicalScope.getLocalVariable(name: Name): VariableDescriptor? {
|
||||
processForMeAndParent {
|
||||
if (it is MemberScopeToFileScopeAdapter) { // todo remove hack
|
||||
return it.memberScope.getLocalVariable(name)
|
||||
}
|
||||
else if (it !is FileScope) { // todo check this
|
||||
it.getDeclaredVariables(name, location).singleOrNull()?.let { return it }
|
||||
it.getDeclaredVariables(name, NoLookupLocation.UNSORTED).singleOrNull()?.let { return it }
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
public fun LexicalScope.getClassifier(name: Name, location: LookupLocation = NoLookupLocation.UNSORTED): ClassifierDescriptor? {
|
||||
public fun LexicalScope.getClassifier(name: Name, location: LookupLocation): ClassifierDescriptor? {
|
||||
processForMeAndParent {
|
||||
it.getDeclaredClassifier(name, location)?.let { return it }
|
||||
}
|
||||
@@ -99,9 +115,17 @@ public fun LexicalScope.asJetScope(): JetScope {
|
||||
return LexicalToJetScopeAdapter(this)
|
||||
}
|
||||
|
||||
@deprecated("Remove this method after scope refactoring")
|
||||
public fun JetScope.memberScopeAsFileScope(): FileScope = MemberScopeToFileScopeAdapter(this)
|
||||
|
||||
@deprecated("Remove this method after scope refactoring")
|
||||
public fun JetScope.asLexicalScope(): LexicalScope
|
||||
= if (this is LexicalToJetScopeAdapter) {
|
||||
lexicalScope
|
||||
}
|
||||
else {
|
||||
memberScopeAsFileScope()
|
||||
}
|
||||
|
||||
private class LexicalToJetScopeAdapter(val lexicalScope: LexicalScope): JetScope {
|
||||
|
||||
override fun getClassifier(name: Name, location: LookupLocation) = lexicalScope.getClassifier(name, location)
|
||||
@@ -191,9 +215,7 @@ private class MemberScopeToFileScopeAdapter(val memberScope: JetScope) : FileSco
|
||||
|
||||
override fun getDeclaredClassifier(name: Name, location: LookupLocation) = memberScope.getClassifier(name, location)
|
||||
|
||||
override fun getDeclaredVariables(name: Name, location: LookupLocation): Collection<VariableDescriptor> {
|
||||
throw IllegalStateException()
|
||||
}
|
||||
override fun getDeclaredVariables(name: Name, location: LookupLocation) = memberScope.getProperties(name, location)
|
||||
|
||||
override fun getDeclaredFunctions(name: Name, location: LookupLocation) = memberScope.getFunctions(name, location)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user