435 if (abstracts.isEmpty()) { |
435 if (abstracts.isEmpty()) { |
436 //t must define a suitable non-generic method |
436 //t must define a suitable non-generic method |
437 throw failure("not.a.functional.intf.1", |
437 throw failure("not.a.functional.intf.1", |
438 diags.fragment("no.abstracts", Kinds.kindName(origin), origin)); |
438 diags.fragment("no.abstracts", Kinds.kindName(origin), origin)); |
439 } else if (abstracts.size() == 1) { |
439 } else if (abstracts.size() == 1) { |
440 if (abstracts.first().type.tag == FORALL) { |
440 return new FunctionDescriptor(abstracts.first()); |
441 throw failure("invalid.generic.desc.in.functional.intf", |
|
442 abstracts.first(), |
|
443 Kinds.kindName(origin), |
|
444 origin); |
|
445 } else { |
|
446 return new FunctionDescriptor(abstracts.first()); |
|
447 } |
|
448 } else { // size > 1 |
441 } else { // size > 1 |
449 for (Symbol msym : abstracts) { |
|
450 if (msym.type.tag == FORALL) { |
|
451 throw failure("invalid.generic.desc.in.functional.intf", |
|
452 abstracts.first(), |
|
453 Kinds.kindName(origin), |
|
454 origin); |
|
455 } |
|
456 } |
|
457 FunctionDescriptor descRes = mergeDescriptors(origin, abstracts.toList()); |
442 FunctionDescriptor descRes = mergeDescriptors(origin, abstracts.toList()); |
458 if (descRes == null) { |
443 if (descRes == null) { |
459 //we can get here if the functional interface is ill-formed |
444 //we can get here if the functional interface is ill-formed |
460 ListBuffer<JCDiagnostic> descriptors = ListBuffer.lb(); |
445 ListBuffer<JCDiagnostic> descriptors = ListBuffer.lb(); |
461 for (Symbol desc : abstracts) { |
446 for (Symbol desc : abstracts) { |