diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml
index b833b89a417..e44675ffc8e 100644
--- a/.idea/codeStyleSettings.xml
+++ b/.idea/codeStyleSettings.xml
@@ -79,6 +79,11 @@
+
+
+
+
+
diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java
index 1c0af4e6ecc..1aa9664b736 100644
--- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java
+++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java
@@ -163,7 +163,7 @@ public class JetFromJavaDescriptorHelper {
@NotNull
- public static Collection getTopLevelFunctionFqNames(
+ public static Collection getTopLevelCallableFqNames(
@NotNull Project project,
@NotNull GlobalSearchScope scope,
boolean shouldBeExtension
diff --git a/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.kt b/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.kt
index 7d1c44f635c..cb77e54114f 100644
--- a/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.kt
+++ b/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.kt
@@ -163,10 +163,9 @@ public class JetShortNamesCache(private val project: Project) : PsiShortNamesCac
//TODO: this code is temporary and is to be dropped when compiled top level functions are indexed
val identifier = Name.identifier(name)
- val topLevelFunctionFqNames = JetFromJavaDescriptorHelper.getTopLevelFunctionFqNames(project, scope, false)
- for (fqName in topLevelFunctionFqNames) {
+ for (fqName in JetFromJavaDescriptorHelper.getTopLevelCallableFqNames(project, scope, false)) {
if (fqName.lastSegmentIs(identifier)) {
- findCompiledTopLevelEntities(fqName, context, jetScope, resolveSession).filterIsInstanceTo(result, javaClass())
+ findTopLevelCallables(fqName, context, jetScope, resolveSession).filterIsInstanceTo(result, javaClass())
}
}
@@ -175,9 +174,10 @@ public class JetShortNamesCache(private val project: Project) : PsiShortNamesCac
return result
}
- private fun findCompiledTopLevelEntities(fqName: FqName, context: JetExpression, jetScope: JetScope, resolveSession: ResolveSessionForBodies): Collection {
+ private fun findTopLevelCallables(fqName: FqName, context: JetExpression, jetScope: JetScope, resolveSession: ResolveSessionForBodies): Collection {
val importDirective = JetPsiFactory(context.getProject()).createImportDirective(ImportPath(fqName, false))
- return QualifiedExpressionResolver().analyseImportReference(importDirective, jetScope, BindingTraceContext(), resolveSession.getModuleDescriptor())
+ val allDescriptors = QualifiedExpressionResolver().analyseImportReference(importDirective, jetScope, BindingTraceContext(), resolveSession.getModuleDescriptor())
+ return allDescriptors.filterIsInstance(javaClass()).filter { it.getReceiverParameter() == null }
}
private fun MutableCollection.addJetSourceTopLevelFunctions(name: String, resolveSession: ResolveSessionForBodies, scope: GlobalSearchScope) {
@@ -198,19 +198,17 @@ public class JetShortNamesCache(private val project: Project) : PsiShortNamesCac
private fun getJetExtensionFunctionsByName(name: String, scope: GlobalSearchScope): Collection
= JetTopLevelExtensionFunctionShortNameIndex.getInstance().get(name, project, scope)
- // TODO: Make it work for properties
public fun getJetTopLevelCallables(nameFilter: (String) -> Boolean, context: JetExpression /*TODO: to be dropped*/, resolveSession: ResolveSessionForBodies, scope: GlobalSearchScope): Collection {
val result = ArrayList()
- JetTopLevelNonExtensionFunctionShortNameIndex.getInstance().getAllKeys(project)
- .stream()
- .filter(nameFilter)
- .forEach { result.addJetSourceTopLevelFunctions(it, resolveSession, scope) }
+
+ val sourceNames = JetTopLevelFunctionsFqnNameIndex.getInstance().getAllKeys(project).stream() + JetTopLevelPropertiesFqnNameIndex.getInstance().getAllKeys(project).stream()
+ val allFqNames = sourceNames.map { FqName(it) } + JetFromJavaDescriptorHelper.getTopLevelCallableFqNames(project, scope, false).stream()
val jetScope = resolveSession.resolveToElement(context).get(BindingContext.RESOLUTION_SCOPE, context) ?: return listOf()
- JetFromJavaDescriptorHelper.getTopLevelFunctionFqNames(project, scope, false)
- .filter { nameFilter(it.shortName().asString()) }
- .flatMapTo(result) { findCompiledTopLevelEntities(it, context, jetScope, resolveSession) }
+ allFqNames.filter { nameFilter(it.shortName().asString()) }
+ .toList()
+ .flatMapTo(result) { findTopLevelCallables(it, context, jetScope, resolveSession) }
return result
}
@@ -231,7 +229,7 @@ public class JetShortNamesCache(private val project: Project) : PsiShortNamesCac
val functionFQNs = extensionFunctionsFromSourceFqNames(nameFilter, scope)
- JetFromJavaDescriptorHelper.getTopLevelFunctionFqNames(project, scope, true)
+ JetFromJavaDescriptorHelper.getTopLevelCallableFqNames(project, scope, true)
.filterTo(functionFQNs) { nameFilter(it.shortName().asString()) }
// Iterate through the function with attempt to resolve found functions
diff --git a/idea/src/org/jetbrains/jet/plugin/completion/LookupElementsCollector.kt b/idea/src/org/jetbrains/jet/plugin/completion/LookupElementsCollector.kt
index e1314d4df12..0d155124d46 100644
--- a/idea/src/org/jetbrains/jet/plugin/completion/LookupElementsCollector.kt
+++ b/idea/src/org/jetbrains/jet/plugin/completion/LookupElementsCollector.kt
@@ -48,7 +48,7 @@ class LookupElementsCollector(private val prefixMatcher: PrefixMatcher,
}
public fun addDescriptorElements(descriptor: DeclarationDescriptor) {
- if (!descriptorFilter(descriptor)) return
+ if (!descriptorFilter(descriptor)) return
addElement(DescriptorLookupConverter.createLookupElement(resolveSession, descriptor))
diff --git a/idea/testData/completion/basic/custom/TopLevelNonImportedProperty.kt b/idea/testData/completion/basic/custom/TopLevelNonImportedProperty.kt
new file mode 100644
index 00000000000..878efe0ba4b
--- /dev/null
+++ b/idea/testData/completion/basic/custom/TopLevelNonImportedProperty.kt
@@ -0,0 +1,5 @@
+fun foo() {
+ glob
+}
+
+// EXIST: "globalProperty"
diff --git a/idea/testData/completion/basic/custom/TopLevelNonImportedPropertySrc/source.kt b/idea/testData/completion/basic/custom/TopLevelNonImportedPropertySrc/source.kt
new file mode 100644
index 00000000000..ae918267fd7
--- /dev/null
+++ b/idea/testData/completion/basic/custom/TopLevelNonImportedPropertySrc/source.kt
@@ -0,0 +1,3 @@
+package foo.bar
+
+val globalProperty: Int = 1
\ No newline at end of file
diff --git a/idea/testData/completion/basic/multifile/NotImportedFunction/NotImportedFunction.dependency.kt b/idea/testData/completion/basic/multifile/NotImportedFunction/NotImportedFunction.dependency.kt
new file mode 100644
index 00000000000..78598dde93c
--- /dev/null
+++ b/idea/testData/completion/basic/multifile/NotImportedFunction/NotImportedFunction.dependency.kt
@@ -0,0 +1,8 @@
+package test
+
+fun globalFun1(): Int = 1
+fun globalFun2(): Int = 1
+
+object Some {
+ fun globalFun3(): Int = 3
+}
diff --git a/idea/testData/completion/basic/multifile/NotImportedFunction/NotImportedFunction.kt b/idea/testData/completion/basic/multifile/NotImportedFunction/NotImportedFunction.kt
new file mode 100644
index 00000000000..62235cc1883
--- /dev/null
+++ b/idea/testData/completion/basic/multifile/NotImportedFunction/NotImportedFunction.kt
@@ -0,0 +1,8 @@
+package pack
+
+fun testFun() {
+ gl
+}
+
+// EXIST: globalFun1, globalFun2
+// ABSENT: globalFun3
diff --git a/idea/testData/completion/basic/multifile/NotImportedProperty/NotImportedProperty.dependency.kt b/idea/testData/completion/basic/multifile/NotImportedProperty/NotImportedProperty.dependency.kt
new file mode 100644
index 00000000000..04b42379cb1
--- /dev/null
+++ b/idea/testData/completion/basic/multifile/NotImportedProperty/NotImportedProperty.dependency.kt
@@ -0,0 +1,11 @@
+package test
+
+val globalProp1: Int = 1
+var globalProp2: Int = 2
+
+val String.globalExtensionProp: Int get() = 0
+fun String.globalExtensionFun(): Int = 0
+
+object Some {
+ var globalProp3: Int = 3
+}
diff --git a/idea/testData/completion/basic/multifile/NotImportedProperty/NotImportedProperty.kt b/idea/testData/completion/basic/multifile/NotImportedProperty/NotImportedProperty.kt
new file mode 100644
index 00000000000..34041c0accb
--- /dev/null
+++ b/idea/testData/completion/basic/multifile/NotImportedProperty/NotImportedProperty.kt
@@ -0,0 +1,10 @@
+package pack
+
+fun testFun() {
+ gl
+}
+
+// EXIST: globalProp1, globalProp2
+// ABSENT: globalProp3
+// ABSENT: globalExtensionProp
+// ABSENT: globalExtensionFun
diff --git a/idea/tests/org/jetbrains/jet/completion/JvmWithLibBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/JvmWithLibBasicCompletionTestGenerated.java
index 71fb821910f..b11fc22d359 100644
--- a/idea/tests/org/jetbrains/jet/completion/JvmWithLibBasicCompletionTestGenerated.java
+++ b/idea/tests/org/jetbrains/jet/completion/JvmWithLibBasicCompletionTestGenerated.java
@@ -48,9 +48,19 @@ public class JvmWithLibBasicCompletionTestGenerated extends AbstractJvmWithLibBa
doTest("idea/testData/completion/basic/custom/TopLevelNonImportedExtFun.kt");
}
+ @TestMetadata("TopLevelNonImportedExtProp.kt")
+ public void testTopLevelNonImportedExtProp() throws Exception {
+ doTest("idea/testData/completion/basic/custom/TopLevelNonImportedExtProp.kt");
+ }
+
@TestMetadata("TopLevelNonImportedFun.kt")
public void testTopLevelNonImportedFun() throws Exception {
doTest("idea/testData/completion/basic/custom/TopLevelNonImportedFun.kt");
}
+ @TestMetadata("TopLevelNonImportedProperty.kt")
+ public void testTopLevelNonImportedProperty() throws Exception {
+ doTest("idea/testData/completion/basic/custom/TopLevelNonImportedProperty.kt");
+ }
+
}
diff --git a/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java
index 187962bf7f9..c423fac8a15 100644
--- a/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java
+++ b/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java
@@ -98,6 +98,16 @@ public class MultiFileJvmBasicCompletionTestGenerated extends AbstractMultiFileJ
doTest("idea/testData/completion/basic/multifile/NotImportedExtensionFunction/");
}
+ @TestMetadata("NotImportedExtensionProperty")
+ public void testNotImportedExtensionProperty() throws Exception {
+ doTest("idea/testData/completion/basic/multifile/NotImportedExtensionProperty/");
+ }
+
+ @TestMetadata("NotImportedFunction")
+ public void testNotImportedFunction() throws Exception {
+ doTest("idea/testData/completion/basic/multifile/NotImportedFunction/");
+ }
+
@TestMetadata("NotImportedJavaClass")
public void testNotImportedJavaClass() throws Exception {
doTest("idea/testData/completion/basic/multifile/NotImportedJavaClass/");
@@ -108,6 +118,11 @@ public class MultiFileJvmBasicCompletionTestGenerated extends AbstractMultiFileJ
doTest("idea/testData/completion/basic/multifile/NotImportedObject/");
}
+ @TestMetadata("NotImportedProperty")
+ public void testNotImportedProperty() throws Exception {
+ doTest("idea/testData/completion/basic/multifile/NotImportedProperty/");
+ }
+
@TestMetadata("TopLevelFunction")
public void testTopLevelFunction() throws Exception {
doTest("idea/testData/completion/basic/multifile/TopLevelFunction/");