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

changeset 80
5c9cdeb740f2
parent 79
36df13bde238
child 89
b6d5f53b3b29
equal deleted inserted replaced
79:36df13bde238 80:5c9cdeb740f2
574 */ 574 */
575 boolean checkDisjoint(DiagnosticPosition pos, long flags, long set1, long set2) { 575 boolean checkDisjoint(DiagnosticPosition pos, long flags, long set1, long set2) {
576 if ((flags & set1) != 0 && (flags & set2) != 0) { 576 if ((flags & set1) != 0 && (flags & set2) != 0) {
577 log.error(pos, 577 log.error(pos,
578 "illegal.combination.of.modifiers", 578 "illegal.combination.of.modifiers",
579 TreeInfo.flagNames(TreeInfo.firstFlag(flags & set1)), 579 asFlagSet(TreeInfo.firstFlag(flags & set1)),
580 TreeInfo.flagNames(TreeInfo.firstFlag(flags & set2))); 580 asFlagSet(TreeInfo.firstFlag(flags & set2)));
581 return false; 581 return false;
582 } else 582 } else
583 return true; 583 return true;
584 } 584 }
585 585
668 log.error(pos, "intf.not.allowed.here"); 668 log.error(pos, "intf.not.allowed.here");
669 mask |= INTERFACE; 669 mask |= INTERFACE;
670 } 670 }
671 else { 671 else {
672 log.error(pos, 672 log.error(pos,
673 "mod.not.allowed.here", TreeInfo.flagNames(illegal)); 673 "mod.not.allowed.here", asFlagSet(illegal));
674 } 674 }
675 } 675 }
676 else if ((sym.kind == TYP || 676 else if ((sym.kind == TYP ||
677 // ISSUE: Disallowing abstract&private is no longer appropriate 677 // ISSUE: Disallowing abstract&private is no longer appropriate
678 // in the presence of inner classes. Should it be deleted here? 678 // in the presence of inner classes. Should it be deleted here?
1021 case PUBLIC: return 0; 1021 case PUBLIC: return 0;
1022 case 0: return 2; 1022 case 0: return 2;
1023 } 1023 }
1024 } 1024 }
1025 1025
1026 /** A string describing the access permission given by a flag set.
1027 * This always returns a space-separated list of Java Keywords.
1028 */
1029 private static String protectionString(long flags) {
1030 long flags1 = flags & AccessFlags;
1031 return (flags1 == 0) ? "package" : TreeInfo.flagNames(flags1);
1032 }
1033
1034 /** A customized "cannot override" error message. 1026 /** A customized "cannot override" error message.
1035 * @param m The overriding method. 1027 * @param m The overriding method.
1036 * @param other The overridden method. 1028 * @param other The overridden method.
1037 * @return An internationalized string. 1029 * @return An internationalized string.
1038 */ 1030 */
1122 if ((other.flags() & FINAL) != 0 || 1114 if ((other.flags() & FINAL) != 0 ||
1123 (m.flags() & STATIC) == 0 && 1115 (m.flags() & STATIC) == 0 &&
1124 (other.flags() & STATIC) != 0) { 1116 (other.flags() & STATIC) != 0) {
1125 log.error(TreeInfo.diagnosticPositionFor(m, tree), "override.meth", 1117 log.error(TreeInfo.diagnosticPositionFor(m, tree), "override.meth",
1126 cannotOverride(m, other), 1118 cannotOverride(m, other),
1127 TreeInfo.flagNames(other.flags() & (FINAL | STATIC))); 1119 asFlagSet(other.flags() & (FINAL | STATIC)));
1128 return; 1120 return;
1129 } 1121 }
1130 1122
1131 if ((m.owner.flags() & ANNOTATION) != 0) { 1123 if ((m.owner.flags() & ANNOTATION) != 0) {
1132 // handled in validateAnnotationMethod 1124 // handled in validateAnnotationMethod
1136 // Error if overriding method has weaker access (JLS 8.4.6.3). 1128 // Error if overriding method has weaker access (JLS 8.4.6.3).
1137 if ((origin.flags() & INTERFACE) == 0 && 1129 if ((origin.flags() & INTERFACE) == 0 &&
1138 protection(m.flags()) > protection(other.flags())) { 1130 protection(m.flags()) > protection(other.flags())) {
1139 log.error(TreeInfo.diagnosticPositionFor(m, tree), "override.weaker.access", 1131 log.error(TreeInfo.diagnosticPositionFor(m, tree), "override.weaker.access",
1140 cannotOverride(m, other), 1132 cannotOverride(m, other),
1141 protectionString(other.flags())); 1133 other.flags() == 0 ?
1134 Flag.PACKAGE :
1135 asFlagSet(other.flags() & AccessFlags));
1142 return; 1136 return;
1143
1144 } 1137 }
1145 1138
1146 Type mt = types.memberType(origin.type, m); 1139 Type mt = types.memberType(origin.type, m);
1147 Type ot = types.memberType(origin.type, other); 1140 Type ot = types.memberType(origin.type, other);
1148 // Error if overriding result type is different 1141 // Error if overriding result type is different
2033 Type right) { 2026 Type right) {
2034 if (operator.opcode == ByteCodes.error) { 2027 if (operator.opcode == ByteCodes.error) {
2035 log.error(pos, 2028 log.error(pos,
2036 "operator.cant.be.applied", 2029 "operator.cant.be.applied",
2037 treeinfo.operatorName(tag), 2030 treeinfo.operatorName(tag),
2038 left + "," + right); 2031 List.of(left, right));
2039 } 2032 }
2040 return operator.opcode; 2033 return operator.opcode;
2041 } 2034 }
2042 2035
2043 2036

mercurial