< prev index next >

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

Print this page

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