1305 }
1306
1307 /**
1308 * Tests whether one functional interface type can be considered more specific
1309 * than another unrelated functional interface type for the scanned expression.
1310 */
1311 class MostSpecificFunctionReturnChecker extends DeferredAttr.PolyScanner {
1312
1313 final Type tRet;
1314 final Type sRet;
1315 boolean result;
1316
1317 /** Parameters {@code t} and {@code s} are unrelated functional interface types. */
1318 MostSpecificFunctionReturnChecker(Type tRet, Type sRet) {
1319 this.tRet = tRet;
1320 this.sRet = sRet;
1321 result = true;
1322 }
1323
1324 @Override
1325 void skip(JCTree tree) {
1326 result = false;
1327 }
1328
1329 @Override
1330 public void visitConditional(JCConditional tree) {
1331 scan(asExpr(tree.truepart));
1332 scan(asExpr(tree.falsepart));
1333 }
1334
1335 @Override
1336 public void visitReference(JCMemberReference tree) {
1337 if (sRet.hasTag(VOID)) {
1338 // do nothing
1339 } else if (tRet.hasTag(VOID)) {
1340 result = false;
1341 } else if (tRet.isPrimitive() != sRet.isPrimitive()) {
1342 boolean retValIsPrimitive =
1343 tree.refPolyKind == PolyKind.STANDALONE &&
1344 tree.sym.type.getReturnType().isPrimitive();
1345 result &= (retValIsPrimitive == tRet.isPrimitive()) &&
|
1305 }
1306
1307 /**
1308 * Tests whether one functional interface type can be considered more specific
1309 * than another unrelated functional interface type for the scanned expression.
1310 */
1311 class MostSpecificFunctionReturnChecker extends DeferredAttr.PolyScanner {
1312
1313 final Type tRet;
1314 final Type sRet;
1315 boolean result;
1316
1317 /** Parameters {@code t} and {@code s} are unrelated functional interface types. */
1318 MostSpecificFunctionReturnChecker(Type tRet, Type sRet) {
1319 this.tRet = tRet;
1320 this.sRet = sRet;
1321 result = true;
1322 }
1323
1324 @Override
1325 protected void skip(JCTree tree) {
1326 result = false;
1327 }
1328
1329 @Override
1330 public void visitConditional(JCConditional tree) {
1331 scan(asExpr(tree.truepart));
1332 scan(asExpr(tree.falsepart));
1333 }
1334
1335 @Override
1336 public void visitReference(JCMemberReference tree) {
1337 if (sRet.hasTag(VOID)) {
1338 // do nothing
1339 } else if (tRet.hasTag(VOID)) {
1340 result = false;
1341 } else if (tRet.isPrimitive() != sRet.isPrimitive()) {
1342 boolean retValIsPrimitive =
1343 tree.refPolyKind == PolyKind.STANDALONE &&
1344 tree.sym.type.getReturnType().isPrimitive();
1345 result &= (retValIsPrimitive == tRet.isPrimitive()) &&
|