< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java

Print this page

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()) &&
< prev index next >