diff --git a/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/AndroidConst.kt b/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/AndroidConst.kt index 3fcc8460aa7..d0357ac9cce 100644 --- a/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/AndroidConst.kt +++ b/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/AndroidConst.kt @@ -22,7 +22,9 @@ import org.jetbrains.kotlin.lexer.JetTokens public object AndroidConst { val ANDROID_USER_PACKAGE: Key = Key.create("ANDROID_USER_PACKAGE") - val SYNTHETIC_FILENAME: String = "ANDROIDXML" + val SYNTHETIC_FILENAME_PREFIX: String = "ANDROIDXML_" + val LAYOUT_POSTFIX: String = "_LAYOUT" + val VIEW_LAYOUT_POSTFIX: String = "_VIEW" val SYNTHETIC_PACKAGE: String = "kotlinx.android.synthetic" val SYNTHETIC_PACKAGE_PATH_LENGTH = SYNTHETIC_PACKAGE.count { it == '.' } + 1 diff --git a/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/AndroidUIXmlProcessor.kt b/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/AndroidUIXmlProcessor.kt index a29f2a8291c..94ab5a79987 100644 --- a/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/AndroidUIXmlProcessor.kt +++ b/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/AndroidUIXmlProcessor.kt @@ -54,6 +54,8 @@ import kotlin.properties.* import com.intellij.psi.impl.* import org.jetbrains.kotlin.types.Flexibility +public class AndroidSyntheticFile(val name: String, val contents: String) + public abstract class AndroidUIXmlProcessor(protected val project: Project) { public class NoAndroidManifestFound : Exception("No android manifest file found in project root") @@ -62,15 +64,16 @@ public abstract class AndroidUIXmlProcessor(protected val project: Project) { public abstract val resourceManager: AndroidResourceManager - protected abstract val cachedSources: CachedValue> + protected abstract val cachedSources: CachedValue> private val cachedJetFiles: CachedValue> by Delegates.lazy { cachedValue { val psiManager = PsiManager.getInstance(project) val applicationPackage = resourceManager.androidModuleInfo?.applicationPackage - val jetFiles = cachedSources.getValue().mapIndexed { index, text -> - val virtualFile = LightVirtualFile(AndroidConst.SYNTHETIC_FILENAME + index + ".kt", text) + val jetFiles = cachedSources.getValue().mapIndexed { index, syntheticFile -> + val fileName = AndroidConst.SYNTHETIC_FILENAME_PREFIX + syntheticFile.name + ".kt" + val virtualFile = LightVirtualFile(fileName, syntheticFile.contents) val jetFile = psiManager.findFile(virtualFile) as JetFile if (applicationPackage != null) { jetFile.putUserData(AndroidConst.ANDROID_USER_PACKAGE, applicationPackage) @@ -82,10 +85,14 @@ public abstract class AndroidUIXmlProcessor(protected val project: Project) { } } - public fun parse(generateCommonFiles: Boolean = true): List { + public fun parse(generateCommonFiles: Boolean = true): List { val commonFiles = if (generateCommonFiles) { - val clearCacheFile = renderLayoutFile(AndroidConst.SYNTHETIC_PACKAGE) {} + - renderClearCacheFunction("android.app.Activity") + renderClearCacheFunction("android.app.Fragment") + val clearCacheFile = renderSyntheticFile("clearCache") { + writePackage(AndroidConst.SYNTHETIC_PACKAGE) + writeAndroidImports() + writeClearCacheFunction("android.app.Activity") + writeClearCacheFunction("android.app.Fragment") + } listOf(clearCacheFile, FLEXIBLE_TYPE_FILE, @@ -98,14 +105,15 @@ public abstract class AndroidUIXmlProcessor(protected val project: Project) { val files = entry.getValue() val widgets = parseLayout(files) - val layoutPackage = files[0].genSyntheticPackageName() + val layoutName = files[0].getName().substringBefore('.') + val packageName = AndroidConst.SYNTHETIC_PACKAGE + "." + files[0].getEscapedLayoutName() - val mainLayoutFile = renderLayoutFile(layoutPackage, widgets) { + val mainLayoutFile = renderLayoutFile(layoutName + AndroidConst.LAYOUT_POSTFIX, packageName, widgets) { writeSyntheticProperty("android.app.Activity", it, "findViewById(0)") writeSyntheticProperty("android.app.Fragment", it, "getView().findViewById(0)") } - val viewLayoutFile = renderLayoutFile("$layoutPackage.view", widgets) { + val viewLayoutFile = renderLayoutFile(layoutName + AndroidConst.VIEW_LAYOUT_POSTFIX, "$packageName.view", widgets) { writeSyntheticProperty("android.view.View", it, "findViewById(0)") } @@ -118,16 +126,23 @@ public abstract class AndroidUIXmlProcessor(protected val project: Project) { protected abstract fun parseLayout(files: List): List private fun renderLayoutFile( + name: String, packageName: String, widgets: List = listOf(), widgetWriter: KotlinStringWriter.(AndroidWidget) -> Unit - ): String { + ): AndroidSyntheticFile { val stringWriter = KotlinStringWriter() stringWriter.writePackage(packageName) stringWriter.writeAndroidImports() widgets.forEach { stringWriter.widgetWriter(it) } - return stringWriter.toStringBuffer().toString() + return AndroidSyntheticFile(name, stringWriter.toStringBuffer().toString()) + } + + private fun renderSyntheticFile(filename: String, init: KotlinStringWriter.() -> Unit): AndroidSyntheticFile { + val stringWriter = KotlinStringWriter() + stringWriter.init() + return AndroidSyntheticFile(filename, stringWriter.toStringBuffer().toString()) } private fun KotlinStringWriter.writeAndroidImports() { @@ -135,8 +150,8 @@ public abstract class AndroidUIXmlProcessor(protected val project: Project) { writeEmptyLine() } - private fun PsiFile.genSyntheticPackageName(): String { - return AndroidConst.SYNTHETIC_PACKAGE + "." + escapeAndroidIdentifier(getName().substringBefore('.')) + private fun PsiFile.getEscapedLayoutName(): String { + return escapeAndroidIdentifier(getName().substringBefore('.')) } private fun KotlinStringWriter.writeSyntheticProperty(receiver: String, widget: AndroidWidget, stubCall: String) { @@ -149,7 +164,9 @@ public abstract class AndroidUIXmlProcessor(protected val project: Project) { getterBody = body) } - private fun renderClearCacheFunction(receiver: String) = "public fun $receiver.${AndroidConst.CLEAR_FUNCTION_NAME}() {}\n" + private fun KotlinStringWriter.writeClearCacheFunction(receiver: String) { + writeText("public fun $receiver.${AndroidConst.CLEAR_FUNCTION_NAME}() {}\n") + } protected fun cachedValue(result: () -> CachedValueProvider.Result): CachedValue { return CachedValuesManager.getManager(project).createCachedValue(result, false) @@ -187,13 +204,14 @@ public abstract class AndroidUIXmlProcessor(protected val project: Project) { "android.support.v4.widget.*", Flexibility.FLEXIBLE_TYPE_CLASSIFIER.asSingleFqName().asString()) - private val FLEXIBLE_TYPE_FILE = "package $EXPLICIT_FLEXIBLE_PACKAGE\n\nclass $EXPLICIT_FLEXIBLE_CLASS_NAME" + private val FLEXIBLE_TYPE_FILE = + AndroidSyntheticFile("ft", "package $EXPLICIT_FLEXIBLE_PACKAGE\n\nclass $EXPLICIT_FLEXIBLE_CLASS_NAME") - private val FAKE_SUPPORT_V4_WIDGET_FILE = "package android.support.v4.widget" + private val FAKE_SUPPORT_V4_WIDGET_FILE = AndroidSyntheticFile("supportv4_widget", "package android.support.v4.widget") - private val FAKE_SUPPORT_V4_VIEW_FILE = "package android.support.v4.view" + private val FAKE_SUPPORT_V4_VIEW_FILE = AndroidSyntheticFile("supportv4_view", "package android.support.v4.view") - private val FAKE_SUPPORT_V4_APP_FILE = "package android.support.v4.app" + private val FAKE_SUPPORT_V4_APP_FILE = AndroidSyntheticFile("supportv4_app", "package android.support.v4.app") } } \ No newline at end of file diff --git a/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/CliAndroidUIXmlProcessor.kt b/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/CliAndroidUIXmlProcessor.kt index 9e9df3a99e0..2a8ad77019f 100644 --- a/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/CliAndroidUIXmlProcessor.kt +++ b/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/CliAndroidUIXmlProcessor.kt @@ -37,7 +37,7 @@ public class CliAndroidUIXmlProcessor( CliAndroidResourceManager(project, manifestPath, mainResDirectory) } - override val cachedSources: CachedValue> by Delegates.lazy { + override val cachedSources: CachedValue> by Delegates.lazy { cachedValue { Result.create(parse(), ModificationTracker.NEVER_CHANGED) } diff --git a/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/KotlinWriter.kt b/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/KotlinWriter.kt index 2837ecaabf2..3d6f6705a65 100644 --- a/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/KotlinWriter.kt +++ b/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/KotlinWriter.kt @@ -69,6 +69,10 @@ class KotlinStringWriter : KotlinWriter { body.newLine() } + fun writeText(text: String) { + body.writeln(text) + } + override fun toStringBuffer(): StringBuffer { ctx.absorbChildren() return ctx.buffer diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/escapedLayoutName/layout.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/escapedLayoutName/get_LAYOUT.kt similarity index 100% rename from plugins/android-compiler-plugin/testData/android/converter/simple/escapedLayoutName/layout.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/escapedLayoutName/get_LAYOUT.kt diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/escapedLayoutName/layout1.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/escapedLayoutName/get_VIEW.kt similarity index 100% rename from plugins/android-compiler-plugin/testData/android/converter/simple/escapedLayoutName/layout1.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/escapedLayoutName/get_VIEW.kt diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInAttr/res/layout/layout.xml b/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInAttr/res/layout/test.xml similarity index 100% rename from plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInAttr/res/layout/layout.xml rename to plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInAttr/res/layout/test.xml diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInAttr/layout.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInAttr/test_LAYOUT.kt similarity index 93% rename from plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInAttr/layout.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInAttr/test_LAYOUT.kt index 5322b90396b..3a772f244f2 100644 --- a/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInAttr/layout.kt +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInAttr/test_LAYOUT.kt @@ -1,4 +1,4 @@ -package kotlinx.android.synthetic.layout +package kotlinx.android.synthetic.test import android.app.* import android.view.* diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInAttr/layout1.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInAttr/test_VIEW.kt similarity index 90% rename from plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInAttr/layout1.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInAttr/test_VIEW.kt index b2b33cc0659..3cd3b9a794f 100644 --- a/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInAttr/layout1.kt +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInAttr/test_VIEW.kt @@ -1,4 +1,4 @@ -package kotlinx.android.synthetic.layout.view +package kotlinx.android.synthetic.test.view import android.app.* import android.view.* diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInTag/res/layout/layout.xml b/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInTag/res/layout/test.xml similarity index 100% rename from plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInTag/res/layout/layout.xml rename to plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInTag/res/layout/test.xml diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInTag/layout.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInTag/test_LAYOUT.kt similarity index 93% rename from plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInTag/layout.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInTag/test_LAYOUT.kt index 5322b90396b..3a772f244f2 100644 --- a/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInTag/layout.kt +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInTag/test_LAYOUT.kt @@ -1,4 +1,4 @@ -package kotlinx.android.synthetic.layout +package kotlinx.android.synthetic.test import android.app.* import android.view.* diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInTag/layout1.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInTag/test_VIEW.kt similarity index 90% rename from plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInTag/layout1.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInTag/test_VIEW.kt index b2b33cc0659..3cd3b9a794f 100644 --- a/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInTag/layout1.kt +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/fqNameInTag/test_VIEW.kt @@ -1,4 +1,4 @@ -package kotlinx.android.synthetic.layout.view +package kotlinx.android.synthetic.test.view import android.app.* import android.view.* diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/res/layout-hdpi/layout.xml b/plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/res/layout-hdpi/test.xml similarity index 100% rename from plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/res/layout-hdpi/layout.xml rename to plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/res/layout-hdpi/test.xml diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/res/layout/layout.xml b/plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/res/layout/test.xml similarity index 100% rename from plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/res/layout/layout.xml rename to plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/res/layout/test.xml diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/layout.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/test_LAYOUT.kt similarity index 92% rename from plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/layout.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/test_LAYOUT.kt index 695d16d3aa7..b8e93fa4a47 100644 --- a/plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/layout.kt +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/test_LAYOUT.kt @@ -1,4 +1,4 @@ -package kotlinx.android.synthetic.layout +package kotlinx.android.synthetic.test import android.app.* import android.view.* diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/layout1.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/test_VIEW.kt similarity index 89% rename from plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/layout1.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/test_VIEW.kt index 2e655f122eb..46fdede50ea 100644 --- a/plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/layout1.kt +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/layoutVariants/test_VIEW.kt @@ -1,4 +1,4 @@ -package kotlinx.android.synthetic.layout.view +package kotlinx.android.synthetic.test.view import android.app.* import android.view.* diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/res/layout/layout.xml b/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/res/layout/test.xml similarity index 100% rename from plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/res/layout/layout.xml rename to plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/res/layout/test.xml diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/res/layout/layout1.xml b/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/res/layout/test1.xml similarity index 100% rename from plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/res/layout/layout1.xml rename to plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/res/layout/test1.xml diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/layout2.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/test1_LAYOUT.kt similarity index 96% rename from plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/layout2.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/test1_LAYOUT.kt index 50fa3eadcff..cb58bd1bc3a 100644 --- a/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/layout2.kt +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/test1_LAYOUT.kt @@ -1,4 +1,4 @@ -package kotlinx.android.synthetic.layout1 +package kotlinx.android.synthetic.test1 import android.app.* import android.view.* diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/layout3.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/test1_VIEW.kt similarity index 93% rename from plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/layout3.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/test1_VIEW.kt index 75f3a600e4f..8bbf0f1bd9a 100644 --- a/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/layout3.kt +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/test1_VIEW.kt @@ -1,4 +1,4 @@ -package kotlinx.android.synthetic.layout1.view +package kotlinx.android.synthetic.test1.view import android.app.* import android.view.* diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/layout.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/test_LAYOUT.kt similarity index 96% rename from plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/layout.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/test_LAYOUT.kt index dd2a685b819..61ac05d05e8 100644 --- a/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/layout.kt +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/test_LAYOUT.kt @@ -1,4 +1,4 @@ -package kotlinx.android.synthetic.layout +package kotlinx.android.synthetic.test import android.app.* import android.view.* diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/singleFile/layout1.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/test_VIEW.kt similarity index 94% rename from plugins/android-compiler-plugin/testData/android/converter/simple/singleFile/layout1.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/test_VIEW.kt index 7edfe963d47..71398780f15 100644 --- a/plugins/android-compiler-plugin/testData/android/converter/simple/singleFile/layout1.kt +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/test_VIEW.kt @@ -1,4 +1,4 @@ -package kotlinx.android.synthetic.layout.view +package kotlinx.android.synthetic.test.view import android.app.* import android.view.* diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/noIds/res/layout/layout.xml b/plugins/android-compiler-plugin/testData/android/converter/simple/noIds/res/layout/test.xml similarity index 100% rename from plugins/android-compiler-plugin/testData/android/converter/simple/noIds/res/layout/layout.xml rename to plugins/android-compiler-plugin/testData/android/converter/simple/noIds/res/layout/test.xml diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/noIds/layout.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/noIds/test_LAYOUT.kt similarity index 88% rename from plugins/android-compiler-plugin/testData/android/converter/simple/noIds/layout.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/noIds/test_LAYOUT.kt index 2f51f6a76bd..fa21af4da2c 100644 --- a/plugins/android-compiler-plugin/testData/android/converter/simple/noIds/layout.kt +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/noIds/test_LAYOUT.kt @@ -1,4 +1,4 @@ -package kotlinx.android.synthetic.layout +package kotlinx.android.synthetic.test import android.app.* import android.view.* diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/noIds/layout1.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/noIds/test_VIEW.kt similarity index 87% rename from plugins/android-compiler-plugin/testData/android/converter/simple/noIds/layout1.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/noIds/test_VIEW.kt index 783f94b8de6..5d6feaa6b35 100644 --- a/plugins/android-compiler-plugin/testData/android/converter/simple/noIds/layout1.kt +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/noIds/test_VIEW.kt @@ -1,4 +1,4 @@ -package kotlinx.android.synthetic.layout.view +package kotlinx.android.synthetic.test.view import android.app.* import android.view.* diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/sameIds/res/layout/layout.xml b/plugins/android-compiler-plugin/testData/android/converter/simple/sameIds/res/layout/test.xml similarity index 100% rename from plugins/android-compiler-plugin/testData/android/converter/simple/sameIds/res/layout/layout.xml rename to plugins/android-compiler-plugin/testData/android/converter/simple/sameIds/res/layout/test.xml diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/sameIds/layout.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/sameIds/test_LAYOUT.kt similarity index 94% rename from plugins/android-compiler-plugin/testData/android/converter/simple/sameIds/layout.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/sameIds/test_LAYOUT.kt index 25ff72530ff..288d8570617 100644 --- a/plugins/android-compiler-plugin/testData/android/converter/simple/sameIds/layout.kt +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/sameIds/test_LAYOUT.kt @@ -1,4 +1,4 @@ -package kotlinx.android.synthetic.layout +package kotlinx.android.synthetic.test import android.app.* import android.view.* diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/sameIds/layout1.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/sameIds/test_VIEW.kt similarity index 91% rename from plugins/android-compiler-plugin/testData/android/converter/simple/sameIds/layout1.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/sameIds/test_VIEW.kt index cf2c8486d6d..4625d7aab38 100644 --- a/plugins/android-compiler-plugin/testData/android/converter/simple/sameIds/layout1.kt +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/sameIds/test_VIEW.kt @@ -1,4 +1,4 @@ -package kotlinx.android.synthetic.layout.view +package kotlinx.android.synthetic.test.view import android.app.* import android.view.* diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/singleFile/res/layout/layout.xml b/plugins/android-compiler-plugin/testData/android/converter/simple/singleFile/res/layout/test.xml similarity index 100% rename from plugins/android-compiler-plugin/testData/android/converter/simple/singleFile/res/layout/layout.xml rename to plugins/android-compiler-plugin/testData/android/converter/simple/singleFile/res/layout/test.xml diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/singleFile/layout.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/singleFile/test_LAYOUT.kt similarity index 96% rename from plugins/android-compiler-plugin/testData/android/converter/simple/singleFile/layout.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/singleFile/test_LAYOUT.kt index dd2a685b819..61ac05d05e8 100644 --- a/plugins/android-compiler-plugin/testData/android/converter/simple/singleFile/layout.kt +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/singleFile/test_LAYOUT.kt @@ -1,4 +1,4 @@ -package kotlinx.android.synthetic.layout +package kotlinx.android.synthetic.test import android.app.* import android.view.* diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/layout1.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/singleFile/test_VIEW.kt similarity index 94% rename from plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/layout1.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/singleFile/test_VIEW.kt index 7edfe963d47..71398780f15 100644 --- a/plugins/android-compiler-plugin/testData/android/converter/simple/multiFile/layout1.kt +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/singleFile/test_VIEW.kt @@ -1,4 +1,4 @@ -package kotlinx.android.synthetic.layout.view +package kotlinx.android.synthetic.test.view import android.app.* import android.view.* diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/specialTags/res/layout/layout.xml b/plugins/android-compiler-plugin/testData/android/converter/simple/specialTags/res/layout/test.xml similarity index 100% rename from plugins/android-compiler-plugin/testData/android/converter/simple/specialTags/res/layout/layout.xml rename to plugins/android-compiler-plugin/testData/android/converter/simple/specialTags/res/layout/test.xml diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/specialTags/layout.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/specialTags/test_LAYOUT.kt similarity index 96% rename from plugins/android-compiler-plugin/testData/android/converter/simple/specialTags/layout.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/specialTags/test_LAYOUT.kt index cacfbd7fecf..e77afc2871d 100644 --- a/plugins/android-compiler-plugin/testData/android/converter/simple/specialTags/layout.kt +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/specialTags/test_LAYOUT.kt @@ -1,4 +1,4 @@ -package kotlinx.android.synthetic.layout +package kotlinx.android.synthetic.test import android.app.* import android.view.* diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/specialTags/layout1.kt b/plugins/android-compiler-plugin/testData/android/converter/simple/specialTags/test_VIEW.kt similarity index 93% rename from plugins/android-compiler-plugin/testData/android/converter/simple/specialTags/layout1.kt rename to plugins/android-compiler-plugin/testData/android/converter/simple/specialTags/test_VIEW.kt index 3dc1927524f..a89210ab802 100644 --- a/plugins/android-compiler-plugin/testData/android/converter/simple/specialTags/layout1.kt +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/specialTags/test_VIEW.kt @@ -1,4 +1,4 @@ -package kotlinx.android.synthetic.layout.view +package kotlinx.android.synthetic.test.view import android.app.* import android.view.* diff --git a/plugins/android-compiler-plugin/tests/org/jetbrains/kotlin/lang/resolve/android/test/AbstractAndroidXml2KConversionTest.kt b/plugins/android-compiler-plugin/tests/org/jetbrains/kotlin/lang/resolve/android/test/AbstractAndroidXml2KConversionTest.kt index f88c727b2b3..b85f95fee2c 100644 --- a/plugins/android-compiler-plugin/tests/org/jetbrains/kotlin/lang/resolve/android/test/AbstractAndroidXml2KConversionTest.kt +++ b/plugins/android-compiler-plugin/tests/org/jetbrains/kotlin/lang/resolve/android/test/AbstractAndroidXml2KConversionTest.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.test.JetTestUtils import org.jetbrains.kotlin.test.ConfigurationKind import org.jetbrains.kotlin.test.TestJdkKind import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles +import org.jetbrains.kotlin.lang.resolve.android.AndroidConst import org.jetbrains.kotlin.lang.resolve.android.CliAndroidUIXmlProcessor import org.jetbrains.kotlin.lang.resolve.android.AndroidUIXmlProcessor import kotlin.test.* @@ -30,19 +31,21 @@ import kotlin.test.* public abstract class AbstractAndroidXml2KConversionTest : UsefulTestCase() { public fun doTest(path: String) { - val jetCoreEnvironment = getEnvironment(path) + val jetCoreEnvironment = getEnvironment() val parser = CliAndroidUIXmlProcessor(jetCoreEnvironment.project, path + "AndroidManifest.xml", path + "/res") - val actual = parser.parse(false) + val actual = parser.parse(false).toMap { it.name } - val layoutFiles = File(path).listFiles { - it.isFile() && it.name.startsWith("layout") && it.name.endsWith(".kt") - }?.sortBy { it.name } ?: listOf() + val expectedLayoutFiles = File(path).listFiles { + it.isFile() && it.name.endsWith(".kt") + }?.toMap { it.name.substringBefore(".kt") } ?: mapOf() - assertEquals(layoutFiles.size(), actual.size()) + assertEquals(expectedLayoutFiles.size(), actual.size()) - for ((index, file) in layoutFiles.withIndex()) { - JetTestUtils.assertEqualsToFile(file, actual[index]) + for ((name, file) in expectedLayoutFiles) { + val actualContents = actual[name] + assertNotNull(actualContents, "File $name was not generated") + JetTestUtils.assertEqualsToFile(file, actualContents!!.contents) } } @@ -55,7 +58,7 @@ public abstract class AbstractAndroidXml2KConversionTest : UsefulTestCase() { } } - private fun getEnvironment(testPath: String): KotlinCoreEnvironment { + private fun getEnvironment(): KotlinCoreEnvironment { val configuration = JetTestUtils.compilerConfigurationForTests(ConfigurationKind.ALL, TestJdkKind.MOCK_JDK) return KotlinCoreEnvironment.createForTests(getTestRootDisposable()!!, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES) } diff --git a/plugins/android-idea-plugin/src/org/jetbrains/kotlin/plugin/android/IDEAndroidUIXmlProcessor.kt b/plugins/android-idea-plugin/src/org/jetbrains/kotlin/plugin/android/IDEAndroidUIXmlProcessor.kt index 17548ef8abe..9eb72db6843 100644 --- a/plugins/android-idea-plugin/src/org/jetbrains/kotlin/plugin/android/IDEAndroidUIXmlProcessor.kt +++ b/plugins/android-idea-plugin/src/org/jetbrains/kotlin/plugin/android/IDEAndroidUIXmlProcessor.kt @@ -35,7 +35,7 @@ class IDEAndroidUIXmlProcessor(val module: Module) : AndroidUIXmlProcessor(modul module.getProject().getExtensions(PsiTreeChangePreprocessor.EP_NAME).first { it is AndroidPsiTreeChangePreprocessor } } - override val cachedSources: CachedValue> by Delegates.lazy { + override val cachedSources: CachedValue> by Delegates.lazy { cachedValue { Result.create(parse(), psiTreeChangePreprocessor) }