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