diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt index 7ef1119b914..71ddffb834f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration import org.jetbrains.kotlin.asJava.toLightMethods import org.jetbrains.kotlin.asJava.unwrapped +import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.SourceElement @@ -63,6 +64,7 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.visibilityModifierType import org.jetbrains.kotlin.resolve.annotations.JVM_FIELD_ANNOTATION_FQ_NAME import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.Variance @@ -377,7 +379,8 @@ class KotlinElementActionsFactory : JvmElementActionsFactory() { val modifierBuilder = ModifierBuilder(targetContainer).apply { addJvmModifiers(request.modifiers) } if (!modifierBuilder.isValid) return emptyList() - val resolutionFacade = targetContainer.getResolutionFacade() + val resolutionFacade = KotlinCacheService.getInstance(targetContainer.project) + .getResolutionFacadeByFile(targetContainer.containingFile, JvmPlatform) ?: return emptyList() val returnTypeInfo = request.returnType.toKotlinTypeInfo(resolutionFacade) val parameters = request.parameters as List>> val parameterInfos = parameters.map { (suggestedNames, expectedTypes) -> diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt.173 b/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt.173 index 1bd0c0df084..a5e9583aa0a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt.173 +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt.173 @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration import org.jetbrains.kotlin.asJava.toLightMethods import org.jetbrains.kotlin.asJava.unwrapped +import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.SourceElement @@ -58,6 +59,7 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.annotations.JVM_FIELD_ANNOTATION_FQ_NAME import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.Variance @@ -368,7 +370,8 @@ class KotlinElementActionsFactory : JvmElementActionsFactory() { val modifierBuilder = ModifierBuilder(targetContainer).apply { addJvmModifiers(request.modifiers) } if (!modifierBuilder.isValid) return emptyList() - val resolutionFacade = targetContainer.getResolutionFacade() + val resolutionFacade = KotlinCacheService.getInstance(targetContainer.project) + .getResolutionFacadeByFile(targetContainer.containingFile, JvmPlatform) ?: return emptyList() val returnTypeInfo = request.returnType.toKotlinTypeInfo(resolutionFacade) val parameterInfos = request.parameters.map { (suggestedNames, expectedTypes) -> ParameterInfo(expectedTypes.toKotlinTypeInfo(resolutionFacade), suggestedNames.names.toList()) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt.182 b/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt.182 index 0aa63ee29c7..f42539a01f9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt.182 +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt.182 @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration import org.jetbrains.kotlin.asJava.elements.KtLightElement import org.jetbrains.kotlin.asJava.toLightMethods import org.jetbrains.kotlin.asJava.unwrapped +import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.SourceElement @@ -70,6 +71,7 @@ import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer import org.jetbrains.kotlin.psi.psiUtil.visibilityModifierType import org.jetbrains.kotlin.resolve.annotations.JVM_FIELD_ANNOTATION_FQ_NAME import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.Variance @@ -389,7 +391,8 @@ class KotlinElementActionsFactory : JvmElementActionsFactory() { val modifierBuilder = ModifierBuilder(targetContainer).apply { addJvmModifiers(request.modifiers) } if (!modifierBuilder.isValid) return emptyList() - val resolutionFacade = targetContainer.getResolutionFacade() + val resolutionFacade = KotlinCacheService.getInstance(targetContainer.project) + .getResolutionFacadeByFile(targetContainer.containingFile, JvmPlatform) ?: return emptyList() val returnTypeInfo = request.returnType.toKotlinTypeInfo(resolutionFacade) val parameters = request.parameters as List>> val parameterInfos = parameters.map { (suggestedNames, expectedTypes) -> diff --git a/idea/testData/multiModuleQuickFix/addFunctionToCommonClassFromJavaUsage/common/common.kt b/idea/testData/multiModuleQuickFix/addFunctionToCommonClassFromJavaUsage/common/common.kt new file mode 100644 index 00000000000..f466ea06608 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/addFunctionToCommonClassFromJavaUsage/common/common.kt @@ -0,0 +1,5 @@ +package foo + +class Bar { + +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/addFunctionToCommonClassFromJavaUsage/common/common.kt.after b/idea/testData/multiModuleQuickFix/addFunctionToCommonClassFromJavaUsage/common/common.kt.after new file mode 100644 index 00000000000..c2b7c874636 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/addFunctionToCommonClassFromJavaUsage/common/common.kt.after @@ -0,0 +1,8 @@ +package foo + +class Bar { + fun someFun() { + + } + +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/addFunctionToCommonClassFromJavaUsage/jvm/Use.java b/idea/testData/multiModuleQuickFix/addFunctionToCommonClassFromJavaUsage/jvm/Use.java new file mode 100644 index 00000000000..39495782c9e --- /dev/null +++ b/idea/testData/multiModuleQuickFix/addFunctionToCommonClassFromJavaUsage/jvm/Use.java @@ -0,0 +1,7 @@ +// "Add method 'someFun' to 'Bar'" "true" + +public class Use { + public static void use(foo.Bar bar) { + bar.someFun(); + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java index 65056bfd104..6455ee86e89 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java @@ -45,6 +45,11 @@ public class QuickFixMultiModuleTestGenerated extends AbstractQuickFixMultiModul runTest("idea/testData/multiModuleQuickFix/addActualToTopLevelMember/"); } + @TestMetadata("addFunctionToCommonClassFromJavaUsage") + public void testAddFunctionToCommonClassFromJavaUsage() throws Exception { + runTest("idea/testData/multiModuleQuickFix/addFunctionToCommonClassFromJavaUsage/"); + } + @TestMetadata("addOperatorByHeader") public void testAddOperatorByHeader() throws Exception { runTest("idea/testData/multiModuleQuickFix/addOperatorByHeader/");