From 1be477c8169dbfc0d839daf8a59387f9fda9978d Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Fri, 27 Apr 2018 15:59:04 +0200 Subject: [PATCH] Fix "add member" quick fix when invoked from java on common class #KT-24115 Fixed --- .../quickfix/crossLanguage/KotlinElementActionsFactory.kt | 5 ++++- .../crossLanguage/KotlinElementActionsFactory.kt.173 | 5 ++++- .../crossLanguage/KotlinElementActionsFactory.kt.182 | 5 ++++- .../common/common.kt | 5 +++++ .../common/common.kt.after | 8 ++++++++ .../addFunctionToCommonClassFromJavaUsage/jvm/Use.java | 7 +++++++ .../idea/quickfix/QuickFixMultiModuleTestGenerated.java | 5 +++++ 7 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 idea/testData/multiModuleQuickFix/addFunctionToCommonClassFromJavaUsage/common/common.kt create mode 100644 idea/testData/multiModuleQuickFix/addFunctionToCommonClassFromJavaUsage/common/common.kt.after create mode 100644 idea/testData/multiModuleQuickFix/addFunctionToCommonClassFromJavaUsage/jvm/Use.java 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/");