Protect getSingleAbstractMethodOrNull from data binding deadlock

Now it cannot cause resolve re-entrance
Probably #KT-18687 Fixed
This commit is contained in:
Mikhail Glukhikh
2017-06-28 16:40:27 +03:00
parent 3e29f9ed5a
commit 6c274cecff

View File

@@ -129,12 +129,16 @@ public class SingleAbstractMethodUtils {
@Nullable
public static FunctionDescriptor getSingleAbstractMethodOrNull(@NotNull JavaClassDescriptor klass) {
if (klass.isDefinitelyNotSamInterface()) return null;
// NB: this check MUST BE at start. Please do not touch until following to-do is resolved
// Otherwise android data binding can cause resolve re-entrance
// For details see KT-18687, KT-16149
// TODO: prevent resolve re-entrance on architecture level, or (alternatively) ask data binding owners not to do it
if (DescriptorUtilsKt.getFqNameSafe(klass).asString().equals("android.databinding.DataBindingComponent")) {
return null;
}
if (klass.isDefinitelyNotSamInterface()) return null;
List<CallableMemberDescriptor> abstractMembers = getAbstractMembers(klass.getDefaultType());
if (abstractMembers.size() == 1) {
CallableMemberDescriptor member = abstractMembers.get(0);