public int boundCheck(Substitution var1, TypeBinding var2) { if (var2 != TypeBinding.field_187 && var2 != this) { boolean var3 = var1 != null; if (!(var2 instanceof ReferenceBinding) && !var2.method_147()) { return 2; } else if (this.superclass == null) { return 0; } else { TypeBinding var8; if (var2.kind() != 516) { boolean var14 = false; if (this.superclass.id != 1) { Object var15 = var3 ? Scope.substitute(var1, this.superclass) : this.superclass; if (var15 != var2) { if (!var2.isCompatibleWith((TypeBinding) var15)) { return 2; } TypeBinding var18 = var2.method_140((TypeBinding) var15); if (var18 != null && var18.method_166() && ((TypeBinding) var15).method_149()) { var14 = true; } } } int var16 = 0; for (int var17 = this.superInterfaces.length; var16 < var17; ++var16) { Object var19 = var3 ? Scope.substitute(var1, this.superInterfaces[var16]) : this.superInterfaces[var16]; if (var19 != var2) { if (!var2.isCompatibleWith((TypeBinding) var19)) { return 2; } var8 = var2.method_140((TypeBinding) var19); if (var8 != null && var8.method_166() && ((TypeBinding) var19).method_149()) { var14 = true; } } } return var14 ? 1 : 0; } else { WildcardBinding var4 = (WildcardBinding) var2; switch (var4.field_215) { case 1: TypeBinding var5 = var4.bound; if (var5 == this) { return 0; } else { ReferenceBinding var6 = var3 ? (ReferenceBinding) Scope.substitute(var1, this.superclass) : this.superclass; boolean var7 = var5.method_147(); if (!var5.method_157() && var6.id != 1) { if (var7) { if (!var5.isCompatibleWith(var6)) { return 2; } } else { var8 = var5.method_140(var6); if (var8 != null) { if (var6.method_164(var8)) { return 2; } } else { var8 = var6.method_140(var5); if (var8 != null) { if (var8.method_164(var5)) { return 2; } } else if (!var5.method_169() && !var6.method_169()) { return 2; } } } } ReferenceBinding[] var20 = var3 ? Scope.substitute(var1, this.superInterfaces) : this.superInterfaces; int var9 = var20.length; boolean var10 = var7 || ((ReferenceBinding) var5).method_221(); for (int var11 = 0; var11 < var9; ++var11) { ReferenceBinding var12 = var20[var11]; if (var7) { if (!var5.isCompatibleWith(var12)) { return 2; } } else { TypeBinding var13 = var5.method_140(var12); if (var13 != null) { if (var12.method_164(var13)) { return 2; } } else if (var10) { return 2; } } } } case 0: default: return 0; case 2: return this.boundCheck(var1, var4.bound); } } } } else { return 0; } }