Create descriptors directly in Android Extensions (IDEA plugin)
This commit is contained in:
+4
-9
@@ -52,15 +52,14 @@ public object AndroidConst {
|
||||
|
||||
val IGNORED_XML_WIDGET_TYPES = setOf("requestFocus", "merge", "tag", "check", "blink")
|
||||
|
||||
val ESCAPED_IDENTIFIERS = (KtTokens.KEYWORDS.types + KtTokens.SOFT_KEYWORDS.types)
|
||||
.map { it as? KtKeywordToken }.filterNotNull().map { it.value }.toSet()
|
||||
|
||||
val FQNAME_RESOLVE_PACKAGES = listOf("android.widget", "android.webkit", "android.view")
|
||||
}
|
||||
|
||||
public fun idToName(id: String): String? {
|
||||
public fun androidIdToName(id: String): String? {
|
||||
for (prefix in AndroidConst.XML_ID_PREFIXES) {
|
||||
if (id.startsWith(prefix)) return escapeAndroidIdentifier(id.replace(prefix, ""))
|
||||
if (id.startsWith(prefix)) {
|
||||
return id.substring(prefix.length)
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
@@ -69,10 +68,6 @@ public fun isWidgetTypeIgnored(xmlType: String): Boolean {
|
||||
return (xmlType.isEmpty() || xmlType in AndroidConst.IGNORED_XML_WIDGET_TYPES)
|
||||
}
|
||||
|
||||
fun escapeAndroidIdentifier(id: String): String {
|
||||
return if (id in AndroidConst.ESCAPED_IDENTIFIERS) "`$id`" else id
|
||||
}
|
||||
|
||||
internal fun <T> List<T>.forEachUntilLast(operation: (T) -> Unit) {
|
||||
val lastIndex = lastIndex
|
||||
forEachIndexed { i, t ->
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ class AndroidXmlHandler(private val elementCallback: (String, String) -> Unit) :
|
||||
val attributesMap = attributes.toMap()
|
||||
val idAttribute = attributesMap[AndroidConst.ID_ATTRIBUTE_NO_NAMESPACE]
|
||||
val widgetType = attributesMap[AndroidConst.CLASS_ATTRIBUTE_NO_NAMESPACE] ?: localName
|
||||
val name = idAttribute?.let { idToName(idAttribute) }
|
||||
val name = idAttribute?.let { androidIdToName(idAttribute) }
|
||||
if (name != null) elementCallback(name, widgetType)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user