diff --git a/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/InnerClassesScopeWrapper.kt b/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/InnerClassesScopeWrapper.kt index 6b50491b2d9..dba67ccf3b6 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/InnerClassesScopeWrapper.kt +++ b/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/InnerClassesScopeWrapper.kt @@ -27,7 +27,7 @@ public class InnerClassesScopeWrapper(override val workerScope: JetScope) : Abst override fun getDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean): List { - val restrictedFilter = kindFilter.restrictedToKinds(DescriptorKindFilter.CLASSIFIERS_MASK) ?: return listOf() + val restrictedFilter = kindFilter.restrictedToKindsOrNull(DescriptorKindFilter.CLASSIFIERS_MASK) ?: return listOf() return workerScope.getDescriptors(restrictedFilter, nameFilter).filterIsInstance() } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/JetScope.kt b/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/JetScope.kt index 784bdebdb8a..c12a09f83fd 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/JetScope.kt +++ b/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/JetScope.kt @@ -91,6 +91,7 @@ public fun JetScope.getDescriptorsFiltered( kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean ): Collection { + if (kindFilter.kindMask == 0) return listOf() return getDescriptors(kindFilter, nameFilter).filter { kindFilter.accepts(it) && nameFilter(it.getName()) } } @@ -113,7 +114,10 @@ public class DescriptorKindFilter( public fun withKinds(kinds: Int): DescriptorKindFilter = DescriptorKindFilter(kindMask or kinds, excludes) - public fun restrictedToKinds(kinds: Int): DescriptorKindFilter? { + public fun restrictedToKinds(kinds: Int): DescriptorKindFilter + = DescriptorKindFilter(kindMask and kinds, excludes) + + public fun restrictedToKindsOrNull(kinds: Int): DescriptorKindFilter? { val mask = kindMask and kinds if (mask == 0) return null return DescriptorKindFilter(mask, excludes) diff --git a/idea/ide-common/src/org/jetbrains/jet/plugin/codeInsight/ReferenceVariantsHelper.kt b/idea/ide-common/src/org/jetbrains/jet/plugin/codeInsight/ReferenceVariantsHelper.kt index 15d1cd9baf1..0a6aafaad7b 100644 --- a/idea/ide-common/src/org/jetbrains/jet/plugin/codeInsight/ReferenceVariantsHelper.kt +++ b/idea/ide-common/src/org/jetbrains/jet/plugin/codeInsight/ReferenceVariantsHelper.kt @@ -38,6 +38,7 @@ import org.jetbrains.jet.lang.types.checker.JetTypeChecker import org.jetbrains.jet.lexer.JetTokens import org.jetbrains.jet.plugin.util.CallType import org.jetbrains.jet.plugin.util.substituteExtensionIfCallable +import org.jetbrains.jet.plugin.util.getImplicitReceiversWithInstance public class ReferenceVariantsHelper( private val context: BindingContext, @@ -72,13 +73,11 @@ public class ReferenceVariantsHelper( val resolutionScope = context[BindingContext.RESOLUTION_SCOPE, expression] ?: return listOf() if (parent is JetImportDirective || parent is JetPackageDirective) { - val restrictedFilter = kindFilter.restrictedToKinds(DescriptorKindFilter.PACKAGES_MASK) ?: return listOf() - return resolutionScope.getDescriptorsFiltered(restrictedFilter, nameFilter) + return resolutionScope.getDescriptorsFiltered(kindFilter.restrictedToKinds(DescriptorKindFilter.PACKAGES_MASK), nameFilter) } if (parent is JetUserType) { - val restrictedFilter = kindFilter.restrictedToKinds(DescriptorKindFilter.CLASSIFIERS_MASK or DescriptorKindFilter.PACKAGES_MASK) ?: return listOf() - return resolutionScope.getDescriptorsFiltered(restrictedFilter, nameFilter) + return resolutionScope.getDescriptorsFiltered(kindFilter.restrictedToKinds(DescriptorKindFilter.CLASSIFIERS_MASK or DescriptorKindFilter.PACKAGES_MASK), nameFilter) } val pair = getExplicitReceiverData(expression) @@ -112,7 +111,8 @@ public class ReferenceVariantsHelper( else { val descriptorsSet = HashSet() - val receivers = resolutionScope.getImplicitReceiversHierarchy() + // process instance members that can be called via implicit receiver's instances + val receivers = resolutionScope.getImplicitReceiversWithInstance() receivers.flatMapTo(descriptorsSet) { it.getType().getMemberScope().getDescriptorsFiltered(kindFilter exclude DescriptorKindExclude.Extensions, nameFilter) } @@ -120,7 +120,10 @@ public class ReferenceVariantsHelper( val dataFlowInfo = context.getDataFlowInfo(expression) val receiverValues = receivers.map { it.getValue() } + // process extensions and non-instance members for (descriptor in resolutionScope.getDescriptorsFiltered(kindFilter, nameFilter)) { + if (descriptor is CallableDescriptor && descriptor.getDispatchReceiverParameter() != null) continue // should already be processed via implicit receivers + if (descriptor is CallableDescriptor && descriptor.getExtensionReceiverParameter() != null) { descriptorsSet.addAll(descriptor.substituteExtensionIfCallable(receiverValues, context, dataFlowInfo, CallType.NORMAL)) } @@ -164,7 +167,7 @@ public class ReferenceVariantsHelper( } else { val resolutionScope = context[BindingContext.RESOLUTION_SCOPE, expression] ?: return ReceiversData.Empty - return ReceiversData(resolutionScope.getImplicitReceiversHierarchy().map { it.getValue() }, CallType.NORMAL) + return ReceiversData(resolutionScope.getImplicitReceiversWithInstance().map { it.getValue() }, CallType.NORMAL) } } @@ -185,9 +188,23 @@ public class ReferenceVariantsHelper( kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean ) { - if (!kindFilter.excludes.contains(DescriptorKindExclude.Extensions)) { - for (callable in resolutionScope.getDescriptorsFiltered(kindFilter.exclude(DescriptorKindExclude.NonExtensions), nameFilter)) { - addAll((callable as CallableDescriptor).substituteExtensionIfCallable(receiver, callType, context, dataFlowInfo)) + if (kindFilter.excludes.contains(DescriptorKindExclude.Extensions)) return + val extensionsFilter = kindFilter.exclude(DescriptorKindExclude.NonExtensions) + + fun processExtension(descriptor: DeclarationDescriptor) { + addAll((descriptor as CallableDescriptor).substituteExtensionIfCallable(receiver, callType, context, dataFlowInfo)) + } + + // process member extensions from implicit receivers separately to filter out ones from implicit receivers with no instance + for (implicitReceiver in resolutionScope.getImplicitReceiversWithInstance()) { + for (extension in implicitReceiver.getType().getMemberScope().getDescriptorsFiltered(extensionsFilter, nameFilter)) { + processExtension(extension) + } + } + + for (extension in resolutionScope.getDescriptorsFiltered(extensionsFilter, nameFilter)) { + if ((extension as CallableDescriptor).getDispatchReceiverParameter() == null) { // otherwise it should already be processed via implicit receivers + processExtension(extension) } } } diff --git a/idea/ide-common/src/org/jetbrains/jet/plugin/util/extensionsUtils.kt b/idea/ide-common/src/org/jetbrains/jet/plugin/util/extensionsUtils.kt index 32390ebe48e..efeda7ad9d0 100644 --- a/idea/ide-common/src/org/jetbrains/jet/plugin/util/extensionsUtils.kt +++ b/idea/ide-common/src/org/jetbrains/jet/plugin/util/extensionsUtils.kt @@ -56,7 +56,7 @@ public fun CallableDescriptor.substituteExtensionIfCallable(receivers: Collectio } public fun CallableDescriptor.substituteExtensionIfCallableWithImplicitReceiver(scope: JetScope, context: BindingContext, dataFlowInfo: DataFlowInfo): Collection - = substituteExtensionIfCallable(scope.getImplicitReceiversHierarchy().map { it.getValue() }, context, dataFlowInfo, CallType.NORMAL) + = substituteExtensionIfCallable(scope.getImplicitReceiversWithInstance().map { it.getValue() }, context, dataFlowInfo, CallType.NORMAL) public fun CallableDescriptor.substituteExtensionIfCallable( receiver: ReceiverValue, diff --git a/idea/ide-common/src/org/jetbrains/jet/plugin/util/implicitReceiversUtils.kt b/idea/ide-common/src/org/jetbrains/jet/plugin/util/implicitReceiversUtils.kt new file mode 100644 index 00000000000..15588117570 --- /dev/null +++ b/idea/ide-common/src/org/jetbrains/jet/plugin/util/implicitReceiversUtils.kt @@ -0,0 +1,43 @@ +/* + * Copyright 2010-2014 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.util + +import org.jetbrains.jet.lang.resolve.scopes.JetScope +import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor +import java.util.LinkedHashSet +import org.jetbrains.jet.lang.descriptors.ClassDescriptor +import java.util.HashSet + +public fun JetScope.getImplicitReceiversWithInstance(): List { + // we use a set to workaround a bug with receiver for class object present twice in the result of getImplicitReceiversHierarchy() + val receivers = LinkedHashSet(getImplicitReceiversHierarchy()) + + val withInstance = HashSet() + var current: DeclarationDescriptor? = getContainingDeclaration() + while (current != null) { + withInstance.add(current) + val classDescriptor = current as? ClassDescriptor + if (classDescriptor != null && !classDescriptor.isInner()) break + current = current!!.getContainingDeclaration() + } + + return receivers.filter { + val owner = it.getContainingDeclaration() + owner is ClassDescriptor && owner.getKind().isSingleton() || owner in withInstance + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/caches/KotlinIndicesHelper.kt b/idea/src/org/jetbrains/jet/plugin/caches/KotlinIndicesHelper.kt index 64848cce670..5c7d1088406 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/KotlinIndicesHelper.kt +++ b/idea/src/org/jetbrains/jet/plugin/caches/KotlinIndicesHelper.kt @@ -37,6 +37,7 @@ import org.jetbrains.jet.plugin.util.substituteExtensionIfCallable import org.jetbrains.jet.plugin.util.CallType import org.jetbrains.jet.plugin.codeInsight.ReferenceVariantsHelper import org.jetbrains.jet.utils.addToStdlib.singletonOrEmptyList +import org.jetbrains.jet.plugin.util.getImplicitReceiversWithInstance public class KotlinIndicesHelper( private val project: Project, @@ -123,7 +124,7 @@ public class KotlinIndicesHelper( else { val resolutionScope = bindingContext[BindingContext.RESOLUTION_SCOPE, expression] ?: return - for (receiver in resolutionScope.getImplicitReceiversHierarchy()) { + for (receiver in resolutionScope.getImplicitReceiversWithInstance()) { matchingNames.flatMapTo(this) { findSuitableExtensions(it, index, receiver.getValue(), dataFlowInfo, CallType.NORMAL, resolutionScope, moduleDescriptor, bindingContext) } diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/ThisItems.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/ThisItems.kt index 4a57b2bd53a..80c82cee753 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/ThisItems.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/ThisItems.kt @@ -31,14 +31,13 @@ import org.jetbrains.jet.plugin.completion.ExpectedInfo import org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils import org.jetbrains.jet.lang.psi.JetFunctionLiteralExpression import org.jetbrains.jet.plugin.util.FuzzyType +import org.jetbrains.jet.plugin.util.getImplicitReceiversWithInstance class ThisItems(val bindingContext: BindingContext) { public fun addToCollection(collection: MutableCollection, context: JetExpression, expectedInfos: Collection) { val scope = bindingContext[BindingContext.RESOLUTION_SCOPE, context] ?: return - val receivers: List = scope.getImplicitReceiversHierarchy() - for (i in 0..receivers.size - 1) { - val receiver = receivers[i] + for ((i, receiver) in scope.getImplicitReceiversWithInstance().withIndex()) { val thisType = receiver.getType() val fuzzyType = FuzzyType(thisType, listOf()) val classifier = { (expectedInfo: ExpectedInfo) -> fuzzyType.classifyExpectedInfo(expectedInfo) } diff --git a/idea/testData/completion/basic/common/InClassObject.kt b/idea/testData/completion/basic/common/InClassObject.kt new file mode 100644 index 00000000000..8508b24d0c3 --- /dev/null +++ b/idea/testData/completion/basic/common/InClassObject.kt @@ -0,0 +1,25 @@ +class C { + val field = 0 + class NestedClass + inner class InnerClass + object AnObject + + class object { + val classObjectField = 0 + class ClassObjectClass + + fun foo(){ + + } + } +} + +fun C.extensionForC(){} + +// ABSENT: field +// EXIST: NestedClass +// EXIST: InnerClass +// EXIST: AnObject +// EXIST: classObjectField +// EXIST: ClassObjectClass +// ABSENT: extensionForC diff --git a/idea/testData/completion/basic/common/InInnerClass.kt b/idea/testData/completion/basic/common/InInnerClass.kt new file mode 100644 index 00000000000..d941c387c56 --- /dev/null +++ b/idea/testData/completion/basic/common/InInnerClass.kt @@ -0,0 +1,18 @@ +class C { + val field = 0 + class NestedClass + inner class InnerClass + + inner class N { + fun foo(){ + + } + } +} + +fun C.extensionForC(){} + +// EXIST: field +// EXIST: NestedClass +// EXIST: InnerClass +// EXIST: extensionForC diff --git a/idea/testData/completion/basic/common/InNestedClass.kt b/idea/testData/completion/basic/common/InNestedClass.kt new file mode 100644 index 00000000000..55e50ee7d05 --- /dev/null +++ b/idea/testData/completion/basic/common/InNestedClass.kt @@ -0,0 +1,23 @@ +class C { + val field = 0 + class NestedClass + inner class InnerClass + + class N { + fun foo(){ + + } + } + + class object { + fun fromClassObject(){} + } +} + +fun C.extensionForC(){} + +// ABSENT: field +// EXIST: NestedClass +// EXIST: InnerClass +// EXIST: fromClassObject +// ABSENT: extensionForC diff --git a/idea/testData/completion/basic/common/ObjectMembersFromNested.kt b/idea/testData/completion/basic/common/ObjectMembersFromNested.kt new file mode 100644 index 00000000000..bd7a921c478 --- /dev/null +++ b/idea/testData/completion/basic/common/ObjectMembersFromNested.kt @@ -0,0 +1,11 @@ +object O { + fun foo() {} + + class Nested { + fun bar() { + + } + } +} + +// EXIST: foo diff --git a/idea/testData/completion/basic/common/extensions/Extensions.kt b/idea/testData/completion/basic/common/extensions/Extensions.kt index 745aaceb7e3..2da87f2994a 100644 --- a/idea/testData/completion/basic/common/extensions/Extensions.kt +++ b/idea/testData/completion/basic/common/extensions/Extensions.kt @@ -1,7 +1,7 @@ package a.b class Some { - class Nested { + inner class Inner { fun foo() { "". } @@ -17,5 +17,5 @@ val String.extProp: Int get() = 1 // EXIST: { lookupString: "extFun", itemText: "extFun", tailText: "() for String in a.b", typeText: "Unit" } // EXIST: { lookupString: "extProp", itemText: "extProp", tailText: " for String in a.b", typeText: "Int" } -// EXIST: { lookupString: "memberExtFun", itemText: "memberExtFun", tailText: "() for String in Some.Nested", typeText: "Unit" } +// EXIST: { lookupString: "memberExtFun", itemText: "memberExtFun", tailText: "() for String in Some.Inner", typeText: "Unit" } // EXIST: { lookupString: "memberExtProp", itemText: "memberExtProp", tailText: " for String in Some", typeText: "Int" } diff --git a/idea/testData/completion/basic/common/extensions/MemberExtensionFromWith.kt b/idea/testData/completion/basic/common/extensions/MemberExtensionFromWith.kt new file mode 100644 index 00000000000..be228423596 --- /dev/null +++ b/idea/testData/completion/basic/common/extensions/MemberExtensionFromWith.kt @@ -0,0 +1,11 @@ +class X { + fun String.f() {} +} + +fun fn() { + with (X()) { + "sss". + } +} + +// EXIST: f diff --git a/idea/testData/completion/basic/common/extensions/NoExtensionFromOuter.kt b/idea/testData/completion/basic/common/extensions/NoExtensionFromOuter.kt new file mode 100644 index 00000000000..45fbabdba84 --- /dev/null +++ b/idea/testData/completion/basic/common/extensions/NoExtensionFromOuter.kt @@ -0,0 +1,11 @@ +class C { + fun String.memberExtForString(){} + + class object { + fun foo() { + "". + } + } +} + +// ABSENT: memberExtForString diff --git a/idea/testData/completion/basic/multifile/NoExtForOuterFromNested/NoExtForOuterFromNested.dependency.kt b/idea/testData/completion/basic/multifile/NoExtForOuterFromNested/NoExtForOuterFromNested.dependency.kt new file mode 100644 index 00000000000..3c44a4e81a7 --- /dev/null +++ b/idea/testData/completion/basic/multifile/NoExtForOuterFromNested/NoExtForOuterFromNested.dependency.kt @@ -0,0 +1,6 @@ +package second + +import first.OuterClass + +fun OuterClass.outerExtension() { +} \ No newline at end of file diff --git a/idea/testData/completion/basic/multifile/NoExtForOuterFromNested/NoExtForOuterFromNested.kt b/idea/testData/completion/basic/multifile/NoExtForOuterFromNested/NoExtForOuterFromNested.kt new file mode 100644 index 00000000000..9b258d43649 --- /dev/null +++ b/idea/testData/completion/basic/multifile/NoExtForOuterFromNested/NoExtForOuterFromNested.kt @@ -0,0 +1,12 @@ +package first + +class OuterClass { + class Nested { + fun foo() { + out + } + } +} + +// INVOCATION_COUNT: 2 +// ABSENT: outerExtension \ No newline at end of file diff --git a/idea/testData/completion/smart/InClassObject.kt b/idea/testData/completion/smart/InClassObject.kt new file mode 100644 index 00000000000..93551c75ba0 --- /dev/null +++ b/idea/testData/completion/smart/InClassObject.kt @@ -0,0 +1,9 @@ +class C { + class object { + fun foo(): C { + return + } + } +} + +// ABSENT: this@C diff --git a/idea/testData/completion/smart/InNestedClass.kt b/idea/testData/completion/smart/InNestedClass.kt new file mode 100644 index 00000000000..76638f0dc70 --- /dev/null +++ b/idea/testData/completion/smart/InNestedClass.kt @@ -0,0 +1,9 @@ +class Outer { + class Nested { + fun foo(): Outer { + return + } + } +} + +// ABSENT: this@Outer diff --git a/idea/tests/org/jetbrains/jet/completion/JSBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/JSBasicCompletionTestGenerated.java index 4943c419be8..1ca39c2ecd3 100644 --- a/idea/tests/org/jetbrains/jet/completion/JSBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/JSBasicCompletionTestGenerated.java @@ -400,6 +400,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("InClassObject.kt") + public void testInClassObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/InClassObject.kt"); + doTest(fileName); + } + @TestMetadata("InClassPropertyAccessor.kt") public void testInClassPropertyAccessor() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/InClassPropertyAccessor.kt"); @@ -472,6 +478,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("InInnerClass.kt") + public void testInInnerClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/InInnerClass.kt"); + doTest(fileName); + } + @TestMetadata("InLocalObjectDeclaration.kt") public void testInLocalObjectDeclaration() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/InLocalObjectDeclaration.kt"); @@ -496,6 +508,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("InNestedClass.kt") + public void testInNestedClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/InNestedClass.kt"); + doTest(fileName); + } + @TestMetadata("InObjectInDelegationSpecifier.kt") public void testInObjectInDelegationSpecifier() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/InObjectInDelegationSpecifier.kt"); @@ -724,6 +742,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("ObjectMembersFromNested.kt") + public void testObjectMembersFromNested() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/ObjectMembersFromNested.kt"); + doTest(fileName); + } + @TestMetadata("ObjectRedeclaration1.kt") public void testObjectRedeclaration1() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/ObjectRedeclaration1.kt"); @@ -918,12 +942,24 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("MemberExtensionFromWith.kt") + public void testMemberExtensionFromWith() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/MemberExtensionFromWith.kt"); + doTest(fileName); + } + @TestMetadata("NoDuplicatedMethodForSmartCast.kt") public void testNoDuplicatedMethodForSmartCast() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/NoDuplicatedMethodForSmartCast.kt"); doTest(fileName); } + @TestMetadata("NoExtensionFromOuter.kt") + public void testNoExtensionFromOuter() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/NoExtensionFromOuter.kt"); + doTest(fileName); + } + @TestMetadata("WrongExplicitReceiver.kt") public void testWrongExplicitReceiver() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/WrongExplicitReceiver.kt"); diff --git a/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java index 4df785d01c9..8cb8948c2a5 100644 --- a/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java @@ -400,6 +400,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } + @TestMetadata("InClassObject.kt") + public void testInClassObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/InClassObject.kt"); + doTest(fileName); + } + @TestMetadata("InClassPropertyAccessor.kt") public void testInClassPropertyAccessor() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/InClassPropertyAccessor.kt"); @@ -472,6 +478,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } + @TestMetadata("InInnerClass.kt") + public void testInInnerClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/InInnerClass.kt"); + doTest(fileName); + } + @TestMetadata("InLocalObjectDeclaration.kt") public void testInLocalObjectDeclaration() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/InLocalObjectDeclaration.kt"); @@ -496,6 +508,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } + @TestMetadata("InNestedClass.kt") + public void testInNestedClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/InNestedClass.kt"); + doTest(fileName); + } + @TestMetadata("InObjectInDelegationSpecifier.kt") public void testInObjectInDelegationSpecifier() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/InObjectInDelegationSpecifier.kt"); @@ -724,6 +742,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } + @TestMetadata("ObjectMembersFromNested.kt") + public void testObjectMembersFromNested() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/ObjectMembersFromNested.kt"); + doTest(fileName); + } + @TestMetadata("ObjectRedeclaration1.kt") public void testObjectRedeclaration1() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/ObjectRedeclaration1.kt"); @@ -918,12 +942,24 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } + @TestMetadata("MemberExtensionFromWith.kt") + public void testMemberExtensionFromWith() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/MemberExtensionFromWith.kt"); + doTest(fileName); + } + @TestMetadata("NoDuplicatedMethodForSmartCast.kt") public void testNoDuplicatedMethodForSmartCast() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/NoDuplicatedMethodForSmartCast.kt"); doTest(fileName); } + @TestMetadata("NoExtensionFromOuter.kt") + public void testNoExtensionFromOuter() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/NoExtensionFromOuter.kt"); + doTest(fileName); + } + @TestMetadata("WrongExplicitReceiver.kt") public void testWrongExplicitReceiver() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/WrongExplicitReceiver.kt"); diff --git a/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java index 11fbd4a2c43..ac2706e3063 100644 --- a/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java @@ -372,6 +372,12 @@ public class JvmSmartCompletionTestGenerated extends AbstractJvmSmartCompletionT doTest(fileName); } + @TestMetadata("InClassObject.kt") + public void testInClassObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/smart/InClassObject.kt"); + doTest(fileName); + } + @TestMetadata("InElvisOperator1.kt") public void testInElvisOperator1() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/smart/InElvisOperator1.kt"); @@ -408,6 +414,12 @@ public class JvmSmartCompletionTestGenerated extends AbstractJvmSmartCompletionT doTest(fileName); } + @TestMetadata("InNestedClass.kt") + public void testInNestedClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/smart/InNestedClass.kt"); + doTest(fileName); + } + @TestMetadata("InaccessibleConstructor.kt") public void testInaccessibleConstructor() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/smart/InaccessibleConstructor.kt"); diff --git a/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java index e3746b97440..95ae9eeb5c6 100644 --- a/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java @@ -120,6 +120,12 @@ public class MultiFileJvmBasicCompletionTestGenerated extends AbstractMultiFileJ doTest(fileName); } + @TestMetadata("NoExtForOuterFromNested") + public void testNoExtForOuterFromNested() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/multifile/NoExtForOuterFromNested/"); + doTest(fileName); + } + @TestMetadata("NoExtensionMethodDuplication") public void testNoExtensionMethodDuplication() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/multifile/NoExtensionMethodDuplication/");