public boolean compatible(Type found, Type req, Warner warn) { if (!allowStructuralMostSpecific || actual == null) { return super.compatible(found, req, warn); } else { switch (actual.getTag()) { case DEFERRED: DeferredType dt = (DeferredType) actual; DeferredType.SpeculativeCache.Entry e = dt.speculativeCache.get(deferredAttrContext.msym, deferredAttrContext.phase); return (e == null || e.speculativeTree == deferredAttr.stuckTree) ? super.compatible(found, req, warn) : mostSpecific(found, req, e.speculativeTree, warn); default: return standaloneMostSpecific(found, req, actual, warn); } } }