Skip to content

Commit 95cab36

Browse files
Catch InvocationTargetException
1 parent f60cb75 commit 95cab36

File tree

3 files changed

+17
-24
lines changed
  • viewbinding-base/src/main/java/com/dylanc/viewbinding/base
  • viewbinding-ktx/src/main/java/com/dylanc/viewbinding
  • viewbinding-nonreflection-ktx/src/main/java/com/dylanc/viewbinding/nonreflection

3 files changed

+17
-24
lines changed

viewbinding-base/src/main/java/com/dylanc/viewbinding/base/ViewBindingUtil.kt

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import androidx.activity.ComponentActivity
2626
import androidx.databinding.ViewDataBinding
2727
import androidx.fragment.app.Fragment
2828
import androidx.viewbinding.ViewBinding
29-
import java.lang.ClassCastException
29+
import java.lang.reflect.InvocationTargetException
3030
import java.lang.reflect.ParameterizedType
3131

3232

@@ -65,29 +65,22 @@ fun <VB : ViewBinding> Any.bindViewWithGeneric(view: View): VB =
6565
}
6666

6767
private fun <VB : ViewBinding> withGenericBindingClass(any: Any, block: (Class<VB>) -> VB): VB {
68-
any.allParameterizedType.forEach { parameterizedType ->
69-
parameterizedType.actualTypeArguments.forEach {
70-
try {
71-
return block.invoke(it as Class<VB>)
72-
} catch (e: NoSuchMethodException) {
73-
} catch (e: ClassCastException) {
68+
var genericSuperclass = any.javaClass.genericSuperclass
69+
var superclass = any.javaClass.superclass
70+
while (superclass != null) {
71+
if (genericSuperclass is ParameterizedType) {
72+
genericSuperclass.actualTypeArguments.forEach {
73+
try {
74+
return block.invoke(it as Class<VB>)
75+
} catch (e: NoSuchMethodException) {
76+
} catch (e: ClassCastException) {
77+
} catch (e: InvocationTargetException) {
78+
throw e.targetException
79+
}
7480
}
7581
}
82+
genericSuperclass = superclass.genericSuperclass
83+
superclass = superclass.superclass
7684
}
7785
throw IllegalArgumentException("There is no generic of ViewBinding.")
7886
}
79-
80-
private val Any.allParameterizedType: List<ParameterizedType>
81-
get() {
82-
val genericParameterizedType = mutableListOf<ParameterizedType>()
83-
var genericSuperclass = javaClass.genericSuperclass
84-
var superclass = javaClass.superclass
85-
while (superclass != null) {
86-
if (genericSuperclass is ParameterizedType) {
87-
genericParameterizedType.add(genericSuperclass)
88-
}
89-
genericSuperclass = superclass.genericSuperclass
90-
superclass = superclass.superclass
91-
}
92-
return genericParameterizedType
93-
}

viewbinding-ktx/src/main/java/com/dylanc/viewbinding/ViewBinding.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ inline fun <reified VB : ViewBinding> Dialog.binding() = lazy {
5555
inflateBinding<VB>(layoutInflater).also { setContentView(it.root) }
5656
}
5757

58-
inline fun <reified VB : ViewBinding> ViewGroup.binding(attachToParent: Boolean = true) = lazy {
58+
inline fun <reified VB : ViewBinding> ViewGroup.binding(attachToParent: Boolean = false) = lazy {
5959
inflateBinding<VB>(LayoutInflater.from(context), if (attachToParent) this else null, attachToParent)
6060
}
6161

viewbinding-nonreflection-ktx/src/main/java/com/dylanc/viewbinding/nonreflection/ViewBinding.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ fun <VB : ViewBinding> Dialog.binding(inflate: (LayoutInflater) -> VB) = lazy {
5353

5454
fun <VB : ViewBinding> ViewGroup.binding(
5555
inflate: (LayoutInflater, ViewGroup?, Boolean) -> VB,
56-
attachToParent: Boolean = true
56+
attachToParent: Boolean = false
5757
) = lazy {
5858
inflate(LayoutInflater.from(context), if (attachToParent) this else null, attachToParent)
5959
}

0 commit comments

Comments
 (0)