diff --git a/idea/idea-android/idea-android.iml b/idea/idea-android/idea-android.iml
index cab9a35a6e2..e77992da27e 100644
--- a/idea/idea-android/idea-android.iml
+++ b/idea/idea-android/idea-android.iml
@@ -19,5 +19,6 @@
+
\ No newline at end of file
diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/intentions/KotlinAndroidAddStringResource.kt b/idea/idea-android/src/org/jetbrains/kotlin/android/intentions/KotlinAndroidAddStringResource.kt
index d2c50f10c8f..f308d4fae4c 100644
--- a/idea/idea-android/src/org/jetbrains/kotlin/android/intentions/KotlinAndroidAddStringResource.kt
+++ b/idea/idea-android/src/org/jetbrains/kotlin/android/intentions/KotlinAndroidAddStringResource.kt
@@ -21,24 +21,22 @@ import com.intellij.CommonBundle
import com.intellij.codeInsight.template.*
import com.intellij.codeInsight.template.impl.*
import com.intellij.codeInsight.template.macro.VariableOfTypeMacro
-import com.intellij.openapi.application.Application
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.command.undo.UndoUtil
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.module.Module
import com.intellij.openapi.ui.Messages
import com.intellij.psi.*
-import com.intellij.psi.codeStyle.JavaCodeStyleManager
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.android.actions.CreateXmlResourceDialog
import org.jetbrains.android.facet.AndroidFacet
import org.jetbrains.android.util.AndroidBundle
import org.jetbrains.android.util.AndroidResourceUtil
import org.jetbrains.kotlin.builtins.isExtensionFunctionType
-import org.jetbrains.kotlin.descriptors.ClassDescriptor
-import org.jetbrains.kotlin.descriptors.FunctionDescriptor
+import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
+import org.jetbrains.kotlin.idea.core.ShortenReferences
import org.jetbrains.kotlin.idea.intentions.SelfTargetingIntention
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.BindingContext
@@ -48,15 +46,24 @@ import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
class KotlinAndroidAddStringResource : SelfTargetingIntention(KtLiteralStringTemplateEntry::class.java,
"Extract string resource") {
- private val GET_STRING_METHOD = "getString"
- private val EXTRACT_RESOURCE_DIALOG_TITLE = "Extract Resource"
- private val PACKAGE_NOT_FOUND_ERROR = "package.not.found.error"
+ private companion object {
+ private val CLASS_CONTEXT = "android.content.Context"
+ private val CLASS_FRAGMENT = "android.app.Fragment"
+ private val CLASS_SUPPORT_FRAGMENT = "android.support.v4.app.Fragment"
+ private val CLASS_VIEW = "android.view.View"
+
+ private val GET_STRING_METHOD = "getString"
+ private val EXTRACT_RESOURCE_DIALOG_TITLE = "Extract Resource"
+ private val PACKAGE_NOT_FOUND_ERROR = "package.not.found.error"
+ }
override fun isApplicableTo(element: KtLiteralStringTemplateEntry, caretOffset: Int): Boolean {
if (AndroidFacet.getInstance(element.containingFile) == null) {
return false
}
+ // Should not be available to strings with template expressions
+ // only to strings with single KtLiteralStringTemplateEntry inside
return element.parent.children.size == 1
}
@@ -70,7 +77,7 @@ class KotlinAndroidAddStringResource : SelfTargetingIntention): Boolean {
val descriptor = resolveToDescriptor() as FunctionDescriptor
- val extendedTypeDescriptor = descriptor.extensionReceiverParameter?.type?.constructor?.declarationDescriptor as? ClassDescriptor
+ val extendedTypeDescriptor = descriptor.extensionReceiverParameter?.type?.constructor?.declarationDescriptor
return extendedTypeDescriptor != null && baseClasses.any { extendedTypeDescriptor.isSubclassOf(it) }
}
@@ -197,7 +202,7 @@ class KotlinAndroidAddStringResource : SelfTargetingIntention
-This intention extracts string literal to android resources.
+This intention extracts string literal to Android resources.