diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidConst.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidConst.kt index 9ca6a2ce5bb..d19662c813b 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidConst.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidConst.kt @@ -32,7 +32,7 @@ object AndroidConst { val ID_ATTRIBUTE_NO_NAMESPACE: String = "id" val CLASS_ATTRIBUTE_NO_NAMESPACE: String = "class" - private val IDENTIFIER_WORD_REGEX = "[(?:\\p{L}\\p{M}*)0-9_\\.]+" + private val IDENTIFIER_WORD_REGEX = "[(?:\\p{L}\\p{M}*)0-9_\\.\\:\\-]+" val IDENTIFIER_REGEX = "^@(\\+)?(($IDENTIFIER_WORD_REGEX)\\:)?id\\/($IDENTIFIER_WORD_REGEX)$".toRegex() val CLEAR_FUNCTION_NAME = "clearFindViewByIdCache" @@ -58,7 +58,21 @@ object AndroidConst { fun androidIdToName(id: String): ResourceIdentifier? { val values = AndroidConst.IDENTIFIER_REGEX.matchEntire(id)?.groupValues ?: return null val packageName = values[3] - return ResourceIdentifier(values[4], if (packageName.isEmpty()) null else packageName) + + return ResourceIdentifier( + getJavaIdentifierNameForResourceName(values[4]), + if (packageName.isEmpty()) null else packageName + ) +} + +// See also AndroidResourceUtil#getFieldNameByResourceName() +fun getJavaIdentifierNameForResourceName(styleName: String) = buildString { + for (char in styleName) { + when (char) { + '.', '-', ':' -> append('_') + else -> append(char) + } + } } fun isWidgetTypeIgnored(xmlType: String): Boolean { diff --git a/plugins/android-extensions/android-extensions-compiler/testData/descriptors/nonLatinNames/res/layout/test.xml b/plugins/android-extensions/android-extensions-compiler/testData/descriptors/nonLatinNames/res/layout/test.xml index f96908bd5cc..a58041bcd9c 100644 --- a/plugins/android-extensions/android-extensions-compiler/testData/descriptors/nonLatinNames/res/layout/test.xml +++ b/plugins/android-extensions/android-extensions-compiler/testData/descriptors/nonLatinNames/res/layout/test.xml @@ -21,4 +21,10 @@ android:layout_height="wrap_content" android:text="Sign in" /> +