src/share/classes/com/sun/tools/javac/comp/Infer.java

changeset 1655
c6728c9addff
parent 1628
5ddecb91d843
child 1674
b71a61d39cf7
equal deleted inserted replaced
1654:b6cf07c54c29 1655:c6728c9addff
583 CROSS_UPPER_LOWER() { 583 CROSS_UPPER_LOWER() {
584 public void apply(UndetVar uv, InferenceContext inferenceContext, Warner warn) { 584 public void apply(UndetVar uv, InferenceContext inferenceContext, Warner warn) {
585 Infer infer = inferenceContext.infer(); 585 Infer infer = inferenceContext.infer();
586 for (Type b1 : uv.getBounds(InferenceBound.UPPER)) { 586 for (Type b1 : uv.getBounds(InferenceBound.UPPER)) {
587 for (Type b2 : uv.getBounds(InferenceBound.LOWER)) { 587 for (Type b2 : uv.getBounds(InferenceBound.LOWER)) {
588 if (!inferenceContext.inferenceVars().contains(b1) && 588 infer.types.isSubtypeUnchecked(inferenceContext.asFree(b2), inferenceContext.asFree(b1));
589 !inferenceContext.inferenceVars().contains(b2) &&
590 infer.types.asSuper(b2, b1.tsym) != null) {
591 infer.types.isSubtypeUnchecked(inferenceContext.asFree(b2), inferenceContext.asFree(b1));
592 }
593 } 589 }
594 } 590 }
595 } 591 }
596 }, 592 },
597 /** 593 /**
601 CROSS_UPPER_EQ() { 597 CROSS_UPPER_EQ() {
602 public void apply(UndetVar uv, InferenceContext inferenceContext, Warner warn) { 598 public void apply(UndetVar uv, InferenceContext inferenceContext, Warner warn) {
603 Infer infer = inferenceContext.infer(); 599 Infer infer = inferenceContext.infer();
604 for (Type b1 : uv.getBounds(InferenceBound.UPPER)) { 600 for (Type b1 : uv.getBounds(InferenceBound.UPPER)) {
605 for (Type b2 : uv.getBounds(InferenceBound.EQ)) { 601 for (Type b2 : uv.getBounds(InferenceBound.EQ)) {
606 if (!inferenceContext.inferenceVars().contains(b1) && 602 infer.types.isSubtypeUnchecked(inferenceContext.asFree(b2), inferenceContext.asFree(b1));
607 !inferenceContext.inferenceVars().contains(b2) &&
608 infer.types.asSuper(b2, b1.tsym) != null) {
609 infer.types.isSubtypeUnchecked(inferenceContext.asFree(b2), inferenceContext.asFree(b1));
610 }
611 } 603 }
612 } 604 }
613 } 605 }
614 }, 606 },
615 /** 607 /**
619 CROSS_EQ_LOWER() { 611 CROSS_EQ_LOWER() {
620 public void apply(UndetVar uv, InferenceContext inferenceContext, Warner warn) { 612 public void apply(UndetVar uv, InferenceContext inferenceContext, Warner warn) {
621 Infer infer = inferenceContext.infer(); 613 Infer infer = inferenceContext.infer();
622 for (Type b1 : uv.getBounds(InferenceBound.EQ)) { 614 for (Type b1 : uv.getBounds(InferenceBound.EQ)) {
623 for (Type b2 : uv.getBounds(InferenceBound.LOWER)) { 615 for (Type b2 : uv.getBounds(InferenceBound.LOWER)) {
624 if (!inferenceContext.inferenceVars().contains(b1) && 616 infer.types.isSubtypeUnchecked(inferenceContext.asFree(b2), inferenceContext.asFree(b1));
625 !inferenceContext.inferenceVars().contains(b2) && 617 }
626 infer.types.asSuper(b2, b1.tsym) != null) { 618 }
627 infer.types.isSubtypeUnchecked(inferenceContext.asFree(b2), inferenceContext.asFree(b1)); 619 }
620 },
621 /**
622 * Given a bound set containing {@code alpha == S} and {@code alpha == T}
623 * perform {@code S == T} (which could lead to new bounds).
624 */
625 CROSS_EQ_EQ() {
626 public void apply(UndetVar uv, InferenceContext inferenceContext, Warner warn) {
627 Infer infer = inferenceContext.infer();
628 for (Type b1 : uv.getBounds(InferenceBound.EQ)) {
629 for (Type b2 : uv.getBounds(InferenceBound.EQ)) {
630 if (b1 != b2) {
631 infer.types.isSameType(inferenceContext.asFree(b2), inferenceContext.asFree(b1));
628 } 632 }
629 } 633 }
630 } 634 }
631 } 635 }
632 }, 636 },

mercurial