Android Extensions: Support LayoutContainer in code generation
This commit is contained in:
+6
-10
@@ -16,11 +16,10 @@
|
||||
|
||||
package org.jetbrains.kotlin.android.synthetic.codegen
|
||||
|
||||
import kotlinx.android.extensions.LayoutContainer
|
||||
import org.jetbrains.kotlin.android.synthetic.AndroidConst
|
||||
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
|
||||
import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaClassDescriptor
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor
|
||||
|
||||
enum class AndroidContainerType(className: String, val doesSupportCache: Boolean = false, val isFragment: Boolean = false) {
|
||||
ACTIVITY(AndroidConst.ACTIVITY_FQNAME, doesSupportCache = true),
|
||||
@@ -29,11 +28,14 @@ enum class AndroidContainerType(className: String, val doesSupportCache: Boolean
|
||||
SUPPORT_FRAGMENT_ACTIVITY(AndroidConst.SUPPORT_FRAGMENT_ACTIVITY_FQNAME, doesSupportCache = true),
|
||||
SUPPORT_FRAGMENT(AndroidConst.SUPPORT_FRAGMENT_FQNAME, doesSupportCache = true, isFragment = true),
|
||||
VIEW(AndroidConst.VIEW_FQNAME, doesSupportCache = true),
|
||||
LAYOUT_CONTAINER(LayoutContainer::class.java.canonicalName, doesSupportCache = true),
|
||||
UNKNOWN("");
|
||||
|
||||
val internalClassName: String = className.replace('.', '/')
|
||||
|
||||
companion object {
|
||||
private val LAYOUT_CONTAINER_FQNAME = LayoutContainer::class.java.canonicalName
|
||||
|
||||
fun get(descriptor: ClassifierDescriptor): AndroidContainerType {
|
||||
fun getClassTypeInternal(name: String): AndroidContainerType? = when (name) {
|
||||
AndroidConst.ACTIVITY_FQNAME -> AndroidContainerType.ACTIVITY
|
||||
@@ -42,17 +44,11 @@ enum class AndroidContainerType(className: String, val doesSupportCache: Boolean
|
||||
AndroidConst.SUPPORT_FRAGMENT_ACTIVITY_FQNAME -> AndroidContainerType.SUPPORT_FRAGMENT_ACTIVITY
|
||||
AndroidConst.SUPPORT_FRAGMENT_FQNAME -> AndroidContainerType.SUPPORT_FRAGMENT
|
||||
AndroidConst.VIEW_FQNAME -> AndroidContainerType.VIEW
|
||||
LAYOUT_CONTAINER_FQNAME -> AndroidContainerType.LAYOUT_CONTAINER
|
||||
else -> null
|
||||
}
|
||||
|
||||
if (descriptor is LazyJavaClassDescriptor) {
|
||||
val androidClassType = getClassTypeInternal(DescriptorUtils.getFqName(descriptor).asString())
|
||||
if (androidClassType != null) return androidClassType
|
||||
}
|
||||
else if (descriptor is LazyClassDescriptor) { // For tests (FakeActivity)
|
||||
val androidClassType = getClassTypeInternal(DescriptorUtils.getFqName(descriptor).toString())
|
||||
if (androidClassType != null) return androidClassType
|
||||
}
|
||||
getClassTypeInternal(DescriptorUtils.getFqName(descriptor).asString())?.let { return it }
|
||||
|
||||
for (supertype in descriptor.typeConstructor.supertypes) {
|
||||
val declarationDescriptor = supertype.constructor.declarationDescriptor
|
||||
|
||||
+12
-4
@@ -93,8 +93,7 @@ class AndroidExpressionCodegenExtension : ExpressionCodegenExtension {
|
||||
return StackValue.functionCall(Type.VOID_TYPE) {}
|
||||
}
|
||||
|
||||
val androidClassType = AndroidContainerType.get(container)
|
||||
if (androidClassType == AndroidContainerType.UNKNOWN) return null
|
||||
if (containerOptions.classType == AndroidContainerType.UNKNOWN) return null
|
||||
|
||||
return StackValue.functionCall(Type.VOID_TYPE) {
|
||||
val bytecodeClassName = c.typeMapper.mapType(container).internalName
|
||||
@@ -248,8 +247,17 @@ class AndroidExpressionCodegenExtension : ExpressionCodegenExtension {
|
||||
loadId()
|
||||
iv.invokevirtual(containerOptions.classType.internalClassName, "findViewById", "(I)Landroid/view/View;", false)
|
||||
}
|
||||
AndroidContainerType.FRAGMENT, AndroidContainerType.SUPPORT_FRAGMENT -> {
|
||||
iv.invokevirtual(containerOptions.classType.internalClassName, "getView", "()Landroid/view/View;", false)
|
||||
AndroidContainerType.FRAGMENT, AndroidContainerType.SUPPORT_FRAGMENT, AndroidContainerType.LAYOUT_CONTAINER -> {
|
||||
val methodName: String
|
||||
val targetClassName: String
|
||||
if (containerOptions.classType == AndroidContainerType.LAYOUT_CONTAINER) {
|
||||
methodName = "getEntityView"
|
||||
targetClassName = classType.internalName
|
||||
} else {
|
||||
methodName = "getView"
|
||||
targetClassName = containerOptions.classType.internalClassName
|
||||
}
|
||||
iv.invokevirtual(targetClassName, methodName, "()Landroid/view/View;", false)
|
||||
iv.dup()
|
||||
val lgetViewNotNull = Label()
|
||||
iv.ifnonnull(lgetViewNotNull)
|
||||
|
||||
+10
@@ -38,6 +38,10 @@ class ResourcePropertyStackValue(
|
||||
) : StackValue(typeMapper.mapType(resource.returnType!!)) {
|
||||
private val androidClassType get() = containerOptions.classType
|
||||
|
||||
init {
|
||||
assert(containerOptions.classType != AndroidContainerType.UNKNOWN)
|
||||
}
|
||||
|
||||
override fun putSelector(type: Type, v: InstructionAdapter) {
|
||||
val returnTypeString = typeMapper.mapType(resource.type.lowerIfFlexible()).className
|
||||
if (AndroidConst.FRAGMENT_FQNAME == returnTypeString || AndroidConst.SUPPORT_FRAGMENT_FQNAME == returnTypeString) {
|
||||
@@ -69,6 +73,12 @@ class ResourcePropertyStackValue(
|
||||
getResourceId(v)
|
||||
v.invokevirtual("android/view/View", "findViewById", "(I)Landroid/view/View;", false)
|
||||
}
|
||||
AndroidContainerType.LAYOUT_CONTAINER -> {
|
||||
receiver.put(Type.getType("L${androidClassType.internalClassName};"), v)
|
||||
v.invokevirtual(androidClassType.internalClassName, "getEntityView", "()Landroid/view/View;", false)
|
||||
getResourceId(v)
|
||||
v.invokevirtual("android/view/View", "findViewById", "(I)Landroid/view/View;", false)
|
||||
}
|
||||
else -> throw IllegalStateException("Invalid Android class type: $androidClassType") // Should never occur
|
||||
}
|
||||
}
|
||||
|
||||
+8
-1
@@ -22,6 +22,7 @@ import kotlinx.android.extensions.CacheImplementation.*
|
||||
import kotlinx.android.extensions.ContainerOptions
|
||||
import org.jetbrains.kotlin.android.synthetic.codegen.AndroidContainerType
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.resolve.constants.EnumValue
|
||||
@@ -35,6 +36,10 @@ class ContainerOptionsProxy(val classType: AndroidContainerType, val cache: Cach
|
||||
private val DEFAULT_CACHE_IMPL = HASH_MAP
|
||||
|
||||
fun get(container: ClassDescriptor): ContainerOptionsProxy {
|
||||
if (container.kind != ClassKind.CLASS) {
|
||||
return ContainerOptionsProxy(AndroidContainerType.UNKNOWN, NO_CACHE)
|
||||
}
|
||||
|
||||
val classType = AndroidContainerType.get(container)
|
||||
|
||||
val anno = container.annotations.findAnnotation(CONTAINER_OPTIONS_FQNAME)
|
||||
@@ -42,7 +47,9 @@ class ContainerOptionsProxy(val classType: AndroidContainerType, val cache: Cach
|
||||
if (anno == null) {
|
||||
// Java classes (and Kotlin classes from other modules) does not support cache by default
|
||||
val supportsCache = container.source is KotlinSourceElement && classType.doesSupportCache
|
||||
return ContainerOptionsProxy(classType, if (supportsCache) DEFAULT_CACHE_IMPL else NO_CACHE)
|
||||
return ContainerOptionsProxy(
|
||||
classType,
|
||||
if (supportsCache) DEFAULT_CACHE_IMPL else NO_CACHE)
|
||||
}
|
||||
|
||||
val cache = anno.getEnumValue(CACHE_NAME, HASH_MAP) { valueOf(it) }
|
||||
|
||||
+30
-24
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.android.synthetic.descriptors
|
||||
|
||||
import kotlinx.android.extensions.LayoutContainer
|
||||
import org.jetbrains.kotlin.android.synthetic.AndroidConst
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.findClassAcrossModuleDependencies
|
||||
@@ -43,56 +44,61 @@ class LazySyntheticElementResolveContext(private val module: ModuleDescriptor, s
|
||||
val dialogDescriptor = find(AndroidConst.DIALOG_FQNAME) ?: return SyntheticElementResolveContext.ERROR_CONTEXT
|
||||
val supportActivityDescriptor = find(AndroidConst.SUPPORT_FRAGMENT_ACTIVITY_FQNAME)
|
||||
val supportFragmentDescriptor = find(AndroidConst.SUPPORT_FRAGMENT_FQNAME)
|
||||
val layoutContainerDescriptor = find(LayoutContainer::class.java.canonicalName)
|
||||
|
||||
return SyntheticElementResolveContext(
|
||||
viewDescriptor.defaultType,
|
||||
activityDescriptor.defaultType,
|
||||
fragmentDescriptor?.defaultType,
|
||||
dialogDescriptor.defaultType,
|
||||
supportActivityDescriptor?.defaultType,
|
||||
supportFragmentDescriptor?.defaultType)
|
||||
view = viewDescriptor.defaultType,
|
||||
activity = activityDescriptor.defaultType,
|
||||
fragment = fragmentDescriptor?.defaultType,
|
||||
dialog = dialogDescriptor.defaultType,
|
||||
supportActivity = supportActivityDescriptor?.defaultType,
|
||||
supportFragment = supportFragmentDescriptor?.defaultType,
|
||||
layoutContainer = layoutContainerDescriptor?.defaultType)
|
||||
}
|
||||
}
|
||||
|
||||
internal class SyntheticElementResolveContext(
|
||||
val viewType: SimpleType,
|
||||
val activityType: SimpleType,
|
||||
val fragmentType: SimpleType?,
|
||||
val dialogType: SimpleType,
|
||||
val supportActivityType: SimpleType?,
|
||||
val supportFragmentType: SimpleType?) {
|
||||
val view: SimpleType,
|
||||
val activity: SimpleType,
|
||||
val fragment: SimpleType?,
|
||||
val dialog: SimpleType,
|
||||
val supportActivity: SimpleType?,
|
||||
val supportFragment: SimpleType?,
|
||||
val layoutContainer: SimpleType?
|
||||
) {
|
||||
companion object {
|
||||
private fun errorType() = ErrorUtils.createErrorType("")
|
||||
val ERROR_CONTEXT = SyntheticElementResolveContext(errorType(), errorType(), null, errorType(), null, null)
|
||||
val ERROR_CONTEXT = SyntheticElementResolveContext(errorType(), errorType(), null, errorType(), null, null, null)
|
||||
}
|
||||
|
||||
private val widgetReceivers by lazy {
|
||||
val receivers = ArrayList<WidgetReceiver>(4)
|
||||
receivers += WidgetReceiver(activityType, mayHaveCache = true)
|
||||
receivers += WidgetReceiver(dialogType, mayHaveCache = false)
|
||||
fragmentType?.let { receivers += WidgetReceiver(it, mayHaveCache = true) }
|
||||
supportFragmentType?.let { receivers += WidgetReceiver(it, mayHaveCache = true) }
|
||||
receivers += WidgetReceiver(activity, mayHaveCache = true)
|
||||
receivers += WidgetReceiver(dialog, mayHaveCache = false)
|
||||
fragment?.let { receivers += WidgetReceiver(it, mayHaveCache = true) }
|
||||
supportFragment?.let { receivers += WidgetReceiver(it, mayHaveCache = true) }
|
||||
layoutContainer?.let { receivers += WidgetReceiver(it, mayHaveCache = true) }
|
||||
receivers
|
||||
}
|
||||
|
||||
val fragmentTypes: List<Pair<SimpleType, SimpleType>> by lazy {
|
||||
if (fragmentType == null) {
|
||||
if (fragment == null) {
|
||||
emptyList<Pair<SimpleType, SimpleType>>()
|
||||
}
|
||||
else {
|
||||
val types = ArrayList<Pair<SimpleType, SimpleType>>(4)
|
||||
types += Pair(activityType, fragmentType)
|
||||
types += Pair(fragmentType, fragmentType)
|
||||
if (supportActivityType != null && supportFragmentType != null) {
|
||||
types += Pair(supportFragmentType, supportFragmentType)
|
||||
types += Pair(supportActivityType, supportFragmentType)
|
||||
types += Pair(activity, fragment)
|
||||
types += Pair(fragment, fragment)
|
||||
if (supportActivity != null && supportFragment != null) {
|
||||
types += Pair(supportFragment, supportFragment)
|
||||
types += Pair(supportActivity, supportFragment)
|
||||
}
|
||||
types
|
||||
}
|
||||
}
|
||||
|
||||
fun getWidgetReceivers(forView: Boolean): List<WidgetReceiver> {
|
||||
if (forView) return listOf(WidgetReceiver(viewType, mayHaveCache = false))
|
||||
if (forView) return listOf(WidgetReceiver(view, mayHaveCache = true))
|
||||
return widgetReceivers
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -79,7 +79,7 @@ abstract class AndroidPackageFragmentProviderExtension : PackageFragmentProvider
|
||||
// Package with clearFindViewByIdCache()
|
||||
AndroidConst.SYNTHETIC_SUBPACKAGES.last().let { s ->
|
||||
val packageDescriptor = PredefinedPackageFragmentDescriptor(s, module, storageManager, packagesToLookupInCompletion) { descriptor ->
|
||||
lazyContext().getWidgetReceivers(false)
|
||||
(lazyContext().getWidgetReceivers(false) + lazyContext().getWidgetReceivers(true))
|
||||
.filter { it.mayHaveCache }
|
||||
.map { genClearCacheFunction(descriptor, it.type) }
|
||||
}
|
||||
|
||||
+1
-1
@@ -69,7 +69,7 @@ internal fun genPropertyForWidget(
|
||||
KotlinTypeFactory.simpleNotNullType(
|
||||
Annotations.EMPTY, classDescriptor, defaultType.constructor.parameters.map(::StarProjectionImpl))
|
||||
}
|
||||
} ?: context.viewType
|
||||
} ?: context.view
|
||||
|
||||
return genProperty(resolvedWidget.widget, receiverType, type, packageFragmentDescriptor, sourceEl, resolvedWidget.errorType)
|
||||
}
|
||||
|
||||
Vendored
+36
@@ -0,0 +1,36 @@
|
||||
package test
|
||||
|
||||
import android.app.Activity
|
||||
import android.view.View
|
||||
import android.widget.*
|
||||
import kotlinx.android.synthetic.main.layout.*
|
||||
import kotlinx.android.extensions.*
|
||||
|
||||
class R {
|
||||
class id {
|
||||
companion object {
|
||||
const val login = 5
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class MyEntity(override val containerView: View) : LayoutContainer
|
||||
|
||||
class MyActivity(): Activity() {
|
||||
val loginItem = Button(this)
|
||||
|
||||
val entity = MyEntity(object : FrameLayout(this) {
|
||||
override fun findViewById(id: Int) : View? = when(id) {
|
||||
R.id.login -> loginItem
|
||||
else -> null
|
||||
}
|
||||
})
|
||||
|
||||
public fun box(): String {
|
||||
return if (entity.login.toString() == "Button") "OK" else ""
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return MyActivity().box()
|
||||
}
|
||||
Vendored
+30
@@ -0,0 +1,30 @@
|
||||
package test
|
||||
|
||||
import android.app.Activity
|
||||
import android.view.View
|
||||
import android.widget.*
|
||||
import kotlinx.android.synthetic.main.layout.*
|
||||
import kotlinx.android.extensions.*
|
||||
|
||||
class R {
|
||||
class id {
|
||||
companion object {
|
||||
const val login = 5
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class MyEntity(override val containerView: View) : LayoutContainer
|
||||
|
||||
class MyActivity(): Activity() {
|
||||
val loginItem = Button(this)
|
||||
val entity = MyEntity(loginItem)
|
||||
|
||||
init {
|
||||
entity.login
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return "OK"
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="test"
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0" >
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS"/>
|
||||
<uses-sdk
|
||||
android:minSdkVersion="18"
|
||||
android:targetSdkVersion="18" />
|
||||
<permission android:name="android"></permission>
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/Theme.Sample" >
|
||||
<activity
|
||||
android:name="com.example.android.basiccontactables.MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:launchMode="singleTop">
|
||||
<meta-data
|
||||
android:name="android.app.searchable"
|
||||
android:resource="@xml/searchable" />
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEARCH" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
</manifest>
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<Button
|
||||
android:id="@+id/login"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
</FrameLayout>
|
||||
+4
-3
@@ -9,13 +9,14 @@ import kotlinx.android.extensions.*
|
||||
@ContainerOptions(cache = CacheImplementation.HASH_MAP)
|
||||
class MyView(context: Context) : View(context)
|
||||
|
||||
@ContainerOptions(cache = CacheImplementation.NO_CACHE)
|
||||
class MyActivity : Activity() {
|
||||
init { MyView(this).login }
|
||||
}
|
||||
|
||||
// 2 public _\$_findCachedViewById
|
||||
// 1 INVOKEVIRTUAL android/app/Activity\.findViewById
|
||||
// 2 public _\$_clearFindViewByIdCache
|
||||
// 1 public _\$_findCachedViewById
|
||||
// 0 INVOKEVIRTUAL android/app/Activity\.findViewById
|
||||
// 1 public _\$_clearFindViewByIdCache
|
||||
// 1 GETSTATIC test/R\$id\.login
|
||||
// 1 INVOKEVIRTUAL android/view/View\.findViewById
|
||||
// 0 INVOKEVIRTUAL test/MyActivity\._\$_findCachedViewById
|
||||
|
||||
+6
@@ -8,6 +8,8 @@ kotlinx.android.synthetic
|
||||
|
||||
public fun android.app.Activity.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.app.Fragment.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.view.View.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun kotlinx.android.extensions.LayoutContainer.clearFindViewByIdCache(): kotlin.Unit
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main
|
||||
@@ -18,15 +20,19 @@ kotlinx.android.synthetic.main.get
|
||||
public val android.app.Activity.item_detail_container: android.widget.FrameLayout!
|
||||
public val android.app.Dialog.item_detail_container: android.widget.FrameLayout!
|
||||
public val android.app.Fragment.item_detail_container: android.widget.FrameLayout!
|
||||
public val kotlinx.android.extensions.LayoutContainer.item_detail_container: android.widget.FrameLayout!
|
||||
public val android.app.Activity.login: android.widget.Button!
|
||||
public val android.app.Dialog.login: android.widget.Button!
|
||||
public val android.app.Fragment.login: android.widget.Button!
|
||||
public val kotlinx.android.extensions.LayoutContainer.login: android.widget.Button!
|
||||
public val android.app.Activity.password: android.widget.EditText!
|
||||
public val android.app.Dialog.password: android.widget.EditText!
|
||||
public val android.app.Fragment.password: android.widget.EditText!
|
||||
public val kotlinx.android.extensions.LayoutContainer.password: android.widget.EditText!
|
||||
public val android.app.Activity.textView1: android.widget.TextView!
|
||||
public val android.app.Dialog.textView1: android.widget.TextView!
|
||||
public val android.app.Fragment.textView1: android.widget.TextView!
|
||||
public val kotlinx.android.extensions.LayoutContainer.textView1: android.widget.TextView!
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main.get.view
|
||||
|
||||
Vendored
+3
@@ -8,6 +8,8 @@ kotlinx.android.synthetic
|
||||
|
||||
public fun android.app.Activity.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.app.Fragment.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.view.View.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun kotlinx.android.extensions.LayoutContainer.clearFindViewByIdCache(): kotlin.Unit
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main
|
||||
@@ -18,6 +20,7 @@ kotlinx.android.synthetic.main.test
|
||||
public val android.app.Activity.MyKeyboardView: android.inputmethodservice.KeyboardView!
|
||||
public val android.app.Dialog.MyKeyboardView: android.inputmethodservice.KeyboardView!
|
||||
public val android.app.Fragment.MyKeyboardView: android.inputmethodservice.KeyboardView!
|
||||
public val kotlinx.android.extensions.LayoutContainer.MyKeyboardView: android.inputmethodservice.KeyboardView!
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main.test.view
|
||||
|
||||
Vendored
+3
@@ -8,6 +8,8 @@ kotlinx.android.synthetic
|
||||
|
||||
public fun android.app.Activity.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.app.Fragment.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.view.View.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun kotlinx.android.extensions.LayoutContainer.clearFindViewByIdCache(): kotlin.Unit
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main
|
||||
@@ -18,6 +20,7 @@ kotlinx.android.synthetic.main.test
|
||||
public val android.app.Activity.MyKeyboardView: android.inputmethodservice.KeyboardView!
|
||||
public val android.app.Dialog.MyKeyboardView: android.inputmethodservice.KeyboardView!
|
||||
public val android.app.Fragment.MyKeyboardView: android.inputmethodservice.KeyboardView!
|
||||
public val kotlinx.android.extensions.LayoutContainer.MyKeyboardView: android.inputmethodservice.KeyboardView!
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main.test.view
|
||||
|
||||
+3
@@ -8,6 +8,8 @@ kotlinx.android.synthetic
|
||||
|
||||
public fun android.app.Activity.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.app.Fragment.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.view.View.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun kotlinx.android.extensions.LayoutContainer.clearFindViewByIdCache(): kotlin.Unit
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main
|
||||
@@ -18,6 +20,7 @@ kotlinx.android.synthetic.main.test
|
||||
public val android.app.Activity.button: android.view.View!
|
||||
public val android.app.Dialog.button: android.view.View!
|
||||
public val android.app.Fragment.button: android.view.View!
|
||||
public val kotlinx.android.extensions.LayoutContainer.button: android.view.View!
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main.test.view
|
||||
|
||||
Vendored
+10
@@ -8,6 +8,8 @@ kotlinx.android.synthetic
|
||||
|
||||
public fun android.app.Activity.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.app.Fragment.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.view.View.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun kotlinx.android.extensions.LayoutContainer.clearFindViewByIdCache(): kotlin.Unit
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main
|
||||
@@ -18,15 +20,19 @@ kotlinx.android.synthetic.main.test
|
||||
public val android.app.Activity.item_detail_container: android.widget.FrameLayout!
|
||||
public val android.app.Dialog.item_detail_container: android.widget.FrameLayout!
|
||||
public val android.app.Fragment.item_detail_container: android.widget.FrameLayout!
|
||||
public val kotlinx.android.extensions.LayoutContainer.item_detail_container: android.widget.FrameLayout!
|
||||
public val android.app.Activity.login: android.widget.Button!
|
||||
public val android.app.Dialog.login: android.widget.Button!
|
||||
public val android.app.Fragment.login: android.widget.Button!
|
||||
public val kotlinx.android.extensions.LayoutContainer.login: android.widget.Button!
|
||||
public val android.app.Activity.password: android.widget.EditText!
|
||||
public val android.app.Dialog.password: android.widget.EditText!
|
||||
public val android.app.Fragment.password: android.widget.EditText!
|
||||
public val kotlinx.android.extensions.LayoutContainer.password: android.widget.EditText!
|
||||
public val android.app.Activity.textView1: android.widget.TextView!
|
||||
public val android.app.Dialog.textView1: android.widget.TextView!
|
||||
public val android.app.Fragment.textView1: android.widget.TextView!
|
||||
public val kotlinx.android.extensions.LayoutContainer.textView1: android.widget.TextView!
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main.test.view
|
||||
@@ -42,15 +48,19 @@ kotlinx.android.synthetic.main.test1
|
||||
public val android.app.Activity.frameLayout: android.widget.FrameLayout!
|
||||
public val android.app.Dialog.frameLayout: android.widget.FrameLayout!
|
||||
public val android.app.Fragment.frameLayout: android.widget.FrameLayout!
|
||||
public val kotlinx.android.extensions.LayoutContainer.frameLayout: android.widget.FrameLayout!
|
||||
public val android.app.Activity.loginButton: android.widget.Button!
|
||||
public val android.app.Dialog.loginButton: android.widget.Button!
|
||||
public val android.app.Fragment.loginButton: android.widget.Button!
|
||||
public val kotlinx.android.extensions.LayoutContainer.loginButton: android.widget.Button!
|
||||
public val android.app.Activity.passwordCaption: android.widget.EditText!
|
||||
public val android.app.Dialog.passwordCaption: android.widget.EditText!
|
||||
public val android.app.Fragment.passwordCaption: android.widget.EditText!
|
||||
public val kotlinx.android.extensions.LayoutContainer.passwordCaption: android.widget.EditText!
|
||||
public val android.app.Activity.passwordField: android.widget.TextView!
|
||||
public val android.app.Dialog.passwordField: android.widget.TextView!
|
||||
public val android.app.Fragment.passwordField: android.widget.TextView!
|
||||
public val kotlinx.android.extensions.LayoutContainer.passwordField: android.widget.TextView!
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main.test1.view
|
||||
|
||||
Vendored
+2
@@ -8,6 +8,8 @@ kotlinx.android.synthetic
|
||||
|
||||
public fun android.app.Activity.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.app.Fragment.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.view.View.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun kotlinx.android.extensions.LayoutContainer.clearFindViewByIdCache(): kotlin.Unit
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main
|
||||
|
||||
Vendored
+4
@@ -8,6 +8,8 @@ kotlinx.android.synthetic
|
||||
|
||||
public fun android.app.Activity.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.app.Fragment.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.view.View.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun kotlinx.android.extensions.LayoutContainer.clearFindViewByIdCache(): kotlin.Unit
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main
|
||||
@@ -18,9 +20,11 @@ kotlinx.android.synthetic.main.test
|
||||
public val android.app.Activity.textView1: android.view.View!
|
||||
public val android.app.Dialog.textView1: android.view.View!
|
||||
public val android.app.Fragment.textView1: android.view.View!
|
||||
public val kotlinx.android.extensions.LayoutContainer.textView1: android.view.View!
|
||||
public val android.app.Activity.textView2: android.widget.TextView!
|
||||
public val android.app.Dialog.textView2: android.widget.TextView!
|
||||
public val android.app.Fragment.textView2: android.widget.TextView!
|
||||
public val kotlinx.android.extensions.LayoutContainer.textView2: android.widget.TextView!
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main.test.view
|
||||
|
||||
+5
@@ -8,6 +8,8 @@ kotlinx.android.synthetic
|
||||
|
||||
public fun android.app.Activity.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.app.Fragment.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.view.View.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun kotlinx.android.extensions.LayoutContainer.clearFindViewByIdCache(): kotlin.Unit
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main
|
||||
@@ -18,12 +20,15 @@ kotlinx.android.synthetic.main.test
|
||||
public val android.app.Activity.button: android.view.View!
|
||||
public val android.app.Dialog.button: android.view.View!
|
||||
public val android.app.Fragment.button: android.view.View!
|
||||
public val kotlinx.android.extensions.LayoutContainer.button: android.view.View!
|
||||
public val android.app.Activity.button2: android.widget.Button!
|
||||
public val android.app.Dialog.button2: android.widget.Button!
|
||||
public val android.app.Fragment.button2: android.widget.Button!
|
||||
public val kotlinx.android.extensions.LayoutContainer.button2: android.widget.Button!
|
||||
public val android.app.Activity.button3: android.widget.Button!
|
||||
public val android.app.Dialog.button3: android.widget.Button!
|
||||
public val android.app.Fragment.button3: android.widget.Button!
|
||||
public val kotlinx.android.extensions.LayoutContainer.button3: android.widget.Button!
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main.test.view
|
||||
|
||||
Vendored
+6
@@ -8,6 +8,8 @@ kotlinx.android.synthetic
|
||||
|
||||
public fun android.app.Activity.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.app.Fragment.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.view.View.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun kotlinx.android.extensions.LayoutContainer.clearFindViewByIdCache(): kotlin.Unit
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main
|
||||
@@ -18,15 +20,19 @@ kotlinx.android.synthetic.main.test
|
||||
public val android.app.Activity.item_detail_container: android.widget.FrameLayout!
|
||||
public val android.app.Dialog.item_detail_container: android.widget.FrameLayout!
|
||||
public val android.app.Fragment.item_detail_container: android.widget.FrameLayout!
|
||||
public val kotlinx.android.extensions.LayoutContainer.item_detail_container: android.widget.FrameLayout!
|
||||
public val android.app.Activity.login: android.widget.Button!
|
||||
public val android.app.Dialog.login: android.widget.Button!
|
||||
public val android.app.Fragment.login: android.widget.Button!
|
||||
public val kotlinx.android.extensions.LayoutContainer.login: android.widget.Button!
|
||||
public val android.app.Activity.password: android.widget.EditText!
|
||||
public val android.app.Dialog.password: android.widget.EditText!
|
||||
public val android.app.Fragment.password: android.widget.EditText!
|
||||
public val kotlinx.android.extensions.LayoutContainer.password: android.widget.EditText!
|
||||
public val android.app.Activity.textView1: android.widget.TextView!
|
||||
public val android.app.Dialog.textView1: android.widget.TextView!
|
||||
public val android.app.Fragment.textView1: android.widget.TextView!
|
||||
public val kotlinx.android.extensions.LayoutContainer.textView1: android.widget.TextView!
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main.test.view
|
||||
|
||||
Vendored
+5
@@ -8,6 +8,8 @@ kotlinx.android.synthetic
|
||||
|
||||
public fun android.app.Activity.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.app.Fragment.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.view.View.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun kotlinx.android.extensions.LayoutContainer.clearFindViewByIdCache(): kotlin.Unit
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main
|
||||
@@ -20,12 +22,15 @@ kotlinx.android.synthetic.main.test
|
||||
public val android.app.Activity.`fun`: android.widget.TextView!
|
||||
public val android.app.Dialog.`fun`: android.widget.TextView!
|
||||
public val android.app.Fragment.`fun`: android.widget.TextView!
|
||||
public val kotlinx.android.extensions.LayoutContainer.`fun`: android.widget.TextView!
|
||||
public val android.app.Activity.includeTag: android.view.View!
|
||||
public val android.app.Dialog.includeTag: android.view.View!
|
||||
public val android.app.Fragment.includeTag: android.view.View!
|
||||
public val kotlinx.android.extensions.LayoutContainer.includeTag: android.view.View!
|
||||
public val android.app.Activity.set: android.widget.Button!
|
||||
public val android.app.Dialog.set: android.widget.Button!
|
||||
public val android.app.Fragment.set: android.widget.Button!
|
||||
public val kotlinx.android.extensions.LayoutContainer.set: android.widget.Button!
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main.test.view
|
||||
|
||||
+6
@@ -8,6 +8,8 @@ kotlinx.android.synthetic
|
||||
|
||||
public fun android.app.Activity.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.app.Fragment.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.view.View.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun kotlinx.android.extensions.LayoutContainer.clearFindViewByIdCache(): kotlin.Unit
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main
|
||||
@@ -18,15 +20,19 @@ kotlinx.android.synthetic.main.test
|
||||
public val android.app.Activity.item_detail_container: android.widget.FrameLayout!
|
||||
public val android.app.Dialog.item_detail_container: android.widget.FrameLayout!
|
||||
public val android.app.Fragment.item_detail_container: android.widget.FrameLayout!
|
||||
public val kotlinx.android.extensions.LayoutContainer.item_detail_container: android.widget.FrameLayout!
|
||||
public val android.app.Activity.login: android.widget.Button!
|
||||
public val android.app.Dialog.login: android.widget.Button!
|
||||
public val android.app.Fragment.login: android.widget.Button!
|
||||
public val kotlinx.android.extensions.LayoutContainer.login: android.widget.Button!
|
||||
public val android.app.Activity.password: android.widget.EditText!
|
||||
public val android.app.Dialog.password: android.widget.EditText!
|
||||
public val android.app.Fragment.password: android.widget.EditText!
|
||||
public val kotlinx.android.extensions.LayoutContainer.password: android.widget.EditText!
|
||||
public val android.app.Activity.textView1: android.widget.TextView!
|
||||
public val android.app.Dialog.textView1: android.widget.TextView!
|
||||
public val android.app.Fragment.textView1: android.widget.TextView!
|
||||
public val kotlinx.android.extensions.LayoutContainer.textView1: android.widget.TextView!
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main.test.view
|
||||
|
||||
+5
@@ -8,6 +8,8 @@ kotlinx.android.synthetic
|
||||
|
||||
public fun android.app.Activity.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.app.Fragment.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.view.View.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun kotlinx.android.extensions.LayoutContainer.clearFindViewByIdCache(): kotlin.Unit
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main
|
||||
@@ -20,12 +22,15 @@ kotlinx.android.synthetic.main.test
|
||||
public val android.app.Activity.`fun`: android.widget.TextView!
|
||||
public val android.app.Dialog.`fun`: android.widget.TextView!
|
||||
public val android.app.Fragment.`fun`: android.widget.TextView!
|
||||
public val kotlinx.android.extensions.LayoutContainer.`fun`: android.widget.TextView!
|
||||
public val android.app.Activity.includeTag: android.view.View!
|
||||
public val android.app.Dialog.includeTag: android.view.View!
|
||||
public val android.app.Fragment.includeTag: android.view.View!
|
||||
public val kotlinx.android.extensions.LayoutContainer.includeTag: android.view.View!
|
||||
public val android.app.Activity.set: android.widget.Button!
|
||||
public val android.app.Dialog.set: android.widget.Button!
|
||||
public val android.app.Fragment.set: android.widget.Button!
|
||||
public val kotlinx.android.extensions.LayoutContainer.set: android.widget.Button!
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main.test.view
|
||||
|
||||
+3
@@ -8,6 +8,8 @@ kotlinx.android.synthetic
|
||||
|
||||
public fun android.app.Activity.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.app.Fragment.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.view.View.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun kotlinx.android.extensions.LayoutContainer.clearFindViewByIdCache(): kotlin.Unit
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main
|
||||
@@ -18,6 +20,7 @@ kotlinx.android.synthetic.main.test
|
||||
public val android.app.Activity.MyView: android.view.View!
|
||||
public val android.app.Dialog.MyView: android.view.View!
|
||||
public val android.app.Fragment.MyView: android.view.View!
|
||||
public val kotlinx.android.extensions.LayoutContainer.MyView: android.view.View!
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main.test.view
|
||||
|
||||
+3
@@ -8,6 +8,8 @@ kotlinx.android.synthetic
|
||||
|
||||
public fun android.app.Activity.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.app.Fragment.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.view.View.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun kotlinx.android.extensions.LayoutContainer.clearFindViewByIdCache(): kotlin.Unit
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main
|
||||
@@ -18,6 +20,7 @@ kotlinx.android.synthetic.main.test
|
||||
public val android.app.Activity.MyKeyboardView: android.view.View!
|
||||
public val android.app.Dialog.MyKeyboardView: android.view.View!
|
||||
public val android.app.Fragment.MyKeyboardView: android.view.View!
|
||||
public val kotlinx.android.extensions.LayoutContainer.MyKeyboardView: android.view.View!
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main.test.view
|
||||
|
||||
Vendored
+3
@@ -8,6 +8,8 @@ kotlinx.android.synthetic
|
||||
|
||||
public fun android.app.Activity.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.app.Fragment.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun android.view.View.clearFindViewByIdCache(): kotlin.Unit
|
||||
public fun kotlinx.android.extensions.LayoutContainer.clearFindViewByIdCache(): kotlin.Unit
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main
|
||||
@@ -18,6 +20,7 @@ kotlinx.android.synthetic.main.test
|
||||
public val android.app.Activity.stub: android.view.ViewStub!
|
||||
public val android.app.Dialog.stub: android.view.ViewStub!
|
||||
public val android.app.Fragment.stub: android.view.ViewStub!
|
||||
public val kotlinx.android.extensions.LayoutContainer.stub: android.view.ViewStub!
|
||||
|
||||
|
||||
kotlinx.android.synthetic.main.test.view
|
||||
|
||||
Reference in New Issue
Block a user