This commit is contained in:
Valentin Kipyatkov
2014-11-28 12:23:08 +03:00
parent 8bc7cf3d18
commit 3c07df36c7
4 changed files with 15 additions and 15 deletions
@@ -229,10 +229,10 @@ class SmartCompletionSession(configuration: CompletionSessionConfiguration, para
override fun doComplete() { override fun doComplete() {
if (jetReference != null) { if (jetReference != null) {
val converter = ToFromOriginalFileConverter(parameters.getOriginalFile() as JetFile, position.getContainingFile() as JetFile, parameters.getOffset()) val mapper = ToFromOriginalFileMapper(parameters.getOriginalFile() as JetFile, position.getContainingFile() as JetFile, parameters.getOffset())
val completion = SmartCompletion(jetReference.expression, resolutionFacade, moduleDescriptor, val completion = SmartCompletion(jetReference.expression, resolutionFacade, moduleDescriptor,
bindingContext!!, { isVisibleDescriptor(it) }, originalSearchScope, bindingContext!!, { isVisibleDescriptor(it) }, originalSearchScope,
converter, boldImmediateLookupElementFactory) mapper, boldImmediateLookupElementFactory)
val result = completion.execute() val result = completion.execute()
if (result != null) { if (result != null) {
collector.addElements(result.additionalItems) collector.addElements(result.additionalItems)
@@ -20,7 +20,7 @@ import org.jetbrains.jet.lang.psi.JetFile
import org.jetbrains.jet.lang.psi.JetDeclaration import org.jetbrains.jet.lang.psi.JetDeclaration
import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.util.PsiTreeUtil
class ToFromOriginalFileConverter( class ToFromOriginalFileMapper(
val originalFile: JetFile, val originalFile: JetFile,
val syntheticFile: JetFile, val syntheticFile: JetFile,
val completionOffset: Int val completionOffset: Int
@@ -46,7 +46,7 @@ class SmartCompletion(val expression: JetSimpleNameExpression,
val bindingContext: BindingContext, val bindingContext: BindingContext,
val visibilityFilter: (DeclarationDescriptor) -> Boolean, val visibilityFilter: (DeclarationDescriptor) -> Boolean,
val inheritorSearchScope: GlobalSearchScope, val inheritorSearchScope: GlobalSearchScope,
val toFromOriginalFileConverter: ToFromOriginalFileConverter, val toFromOriginalFileMapper: ToFromOriginalFileMapper,
val boldImmediateLookupElementFactory: LookupElementFactory) { val boldImmediateLookupElementFactory: LookupElementFactory) {
private val project = expression.getProject() private val project = expression.getProject()
@@ -145,8 +145,8 @@ class SmartCompletion(val expression: JetSimpleNameExpression,
val additionalItems = ArrayList<LookupElement>() val additionalItems = ArrayList<LookupElement>()
val inheritanceSearchers = ArrayList<InheritanceItemsSearcher>() val inheritanceSearchers = ArrayList<InheritanceItemsSearcher>()
if (receiver == null) { if (receiver == null) {
TypeInstantiationItems(resolutionFacade, moduleDescriptor, bindingContext, visibilityFilter, toFromOriginalFileConverter, inheritorSearchScope) TypeInstantiationItems(resolutionFacade, moduleDescriptor, bindingContext, visibilityFilter, toFromOriginalFileMapper, inheritorSearchScope)
.add(additionalItems, inheritanceSearchers, expectedInfos) .addTo(additionalItems, inheritanceSearchers, expectedInfos)
StaticMembers(bindingContext, resolutionFacade).addToCollection(additionalItems, expectedInfos, expression, itemsToSkip) StaticMembers(bindingContext, resolutionFacade).addToCollection(additionalItems, expectedInfos, expression, itemsToSkip)
@@ -174,7 +174,7 @@ class SmartCompletion(val expression: JetSimpleNameExpression,
// if our expression is initializer of implicitly typed variable - take type of variable from original file (+ the same for function) // if our expression is initializer of implicitly typed variable - take type of variable from original file (+ the same for function)
val declaration = implicitlyTypedDeclarationFromInitializer(expression) val declaration = implicitlyTypedDeclarationFromInitializer(expression)
if (declaration != null) { if (declaration != null) {
val originalDeclaration = toFromOriginalFileConverter.toOriginalFile(declaration) val originalDeclaration = toFromOriginalFileMapper.toOriginalFile(declaration)
if (originalDeclaration != null) { if (originalDeclaration != null) {
val originalDescriptor = originalDeclaration.resolveToDescriptor() as? CallableDescriptor val originalDescriptor = originalDeclaration.resolveToDescriptor() as? CallableDescriptor
val returnType = originalDescriptor?.getReturnType() val returnType = originalDescriptor?.getReturnType()
@@ -66,10 +66,10 @@ class TypeInstantiationItems(
val moduleDescriptor: ModuleDescriptor, val moduleDescriptor: ModuleDescriptor,
val bindingContext: BindingContext, val bindingContext: BindingContext,
val visibilityFilter: (DeclarationDescriptor) -> Boolean, val visibilityFilter: (DeclarationDescriptor) -> Boolean,
val toFromOriginalFileConverter: ToFromOriginalFileConverter, val toFromOriginalFileMapper: ToFromOriginalFileMapper,
val inheritorSearchScope: GlobalSearchScope val inheritorSearchScope: GlobalSearchScope
) { ) {
public fun add( public fun addTo(
items: MutableCollection<LookupElement>, items: MutableCollection<LookupElement>,
inheritanceSearchers: MutableCollection<InheritanceItemsSearcher>, inheritanceSearchers: MutableCollection<InheritanceItemsSearcher>,
expectedInfos: Collection<ExpectedInfo> expectedInfos: Collection<ExpectedInfo>
@@ -77,11 +77,11 @@ class TypeInstantiationItems(
val expectedInfosGrouped: Map<JetType, List<ExpectedInfo>> = expectedInfos.groupBy { it.type.makeNotNullable() } val expectedInfosGrouped: Map<JetType, List<ExpectedInfo>> = expectedInfos.groupBy { it.type.makeNotNullable() }
for ((type, infos) in expectedInfosGrouped) { for ((type, infos) in expectedInfosGrouped) {
val tail = mergeTails(infos.map { it.tail }) val tail = mergeTails(infos.map { it.tail })
addToCollection(items, inheritanceSearchers, type, tail) addTo(items, inheritanceSearchers, type, tail)
} }
} }
private fun addToCollection( private fun addTo(
items: MutableCollection<LookupElement>, items: MutableCollection<LookupElement>,
inheritanceSearchers: MutableCollection<InheritanceItemsSearcher>, inheritanceSearchers: MutableCollection<InheritanceItemsSearcher>,
type: JetType, type: JetType,
@@ -114,8 +114,8 @@ class TypeInstantiationItems(
descriptor: ClassDescriptor, kotlinClassDescriptor: ClassDescriptor, typeArgs: List<TypeProjection>, tail: Tail? descriptor: ClassDescriptor, kotlinClassDescriptor: ClassDescriptor, typeArgs: List<TypeProjection>, tail: Tail?
) { ) {
val _declaration = DescriptorToSourceUtils.descriptorToDeclaration(descriptor) ?: return val _declaration = DescriptorToSourceUtils.descriptorToDeclaration(descriptor) ?: return
val declaration = if (_declaration.getContainingFile() == toFromOriginalFileConverter.syntheticFile) val declaration = if (_declaration.getContainingFile() == toFromOriginalFileMapper.syntheticFile)
toFromOriginalFileConverter.toOriginalFile(_declaration as JetDeclaration) ?: return toFromOriginalFileMapper.toOriginalFile(_declaration as JetDeclaration) ?: return
else else
_declaration _declaration
@@ -281,8 +281,8 @@ class TypeInstantiationItems(
for (inheritor in ClassInheritorsSearch.search(parameters)) { for (inheritor in ClassInheritorsSearch.search(parameters)) {
val descriptor = if (inheritor is KotlinLightClass) { val descriptor = if (inheritor is KotlinLightClass) {
val origin = inheritor.origin ?: continue val origin = inheritor.origin ?: continue
val declaration = if (origin.getContainingFile() == toFromOriginalFileConverter.originalFile) val declaration = if (origin.getContainingFile() == toFromOriginalFileMapper.originalFile)
toFromOriginalFileConverter.toSyntheticFile(origin) ?: continue toFromOriginalFileMapper.toSyntheticFile(origin) ?: continue
else else
origin origin
resolutionFacade.resolveToDescriptor(declaration) resolutionFacade.resolveToDescriptor(declaration)