8029301: Confusing error message for array creation method reference
Reviewed-by: vromero
This commit is contained in:
parent
e73411a235
commit
91f407d6fe
@ -4174,6 +4174,8 @@ public class Resolve {
|
|||||||
|
|
||||||
Pair<Symbol, JCDiagnostic> c = errCandidate();
|
Pair<Symbol, JCDiagnostic> c = errCandidate();
|
||||||
Symbol ws = c.fst.asMemberOf(site, types);
|
Symbol ws = c.fst.asMemberOf(site, types);
|
||||||
|
UnaryOperator<JCDiagnostic> rewriter = compactMethodDiags ?
|
||||||
|
d -> MethodResolutionDiagHelper.rewrite(diags, pos, log.currentSource(), dkind, c.snd) : null;
|
||||||
|
|
||||||
// If the problem is due to type arguments, then the method parameters aren't relevant,
|
// If the problem is due to type arguments, then the method parameters aren't relevant,
|
||||||
// so use the error message that omits them to avoid confusion.
|
// so use the error message that omits them to avoid confusion.
|
||||||
@ -4182,18 +4184,25 @@ public class Resolve {
|
|||||||
case "compiler.misc.explicit.param.do.not.conform.to.bounds":
|
case "compiler.misc.explicit.param.do.not.conform.to.bounds":
|
||||||
return diags.create(dkind, log.currentSource(), pos,
|
return diags.create(dkind, log.currentSource(), pos,
|
||||||
"cant.apply.symbol.noargs",
|
"cant.apply.symbol.noargs",
|
||||||
compactMethodDiags ?
|
rewriter,
|
||||||
d -> MethodResolutionDiagHelper.rewrite(diags, pos, log.currentSource(), dkind, c.snd) : null,
|
|
||||||
kindName(ws),
|
kindName(ws),
|
||||||
ws.name == names.init ? ws.owner.name : ws.name,
|
ws.name == names.init ? ws.owner.name : ws.name,
|
||||||
kindName(ws.owner),
|
kindName(ws.owner),
|
||||||
ws.owner.type,
|
ws.owner.type,
|
||||||
c.snd);
|
c.snd);
|
||||||
default:
|
default:
|
||||||
|
// Avoid saying "constructor Array in class Array"
|
||||||
|
if (ws.owner == syms.arrayClass && ws.name == names.init) {
|
||||||
|
return diags.create(dkind, log.currentSource(), pos,
|
||||||
|
"cant.apply.array.ctor",
|
||||||
|
rewriter,
|
||||||
|
methodArguments(ws.type.getParameterTypes()),
|
||||||
|
methodArguments(argtypes),
|
||||||
|
c.snd);
|
||||||
|
}
|
||||||
return diags.create(dkind, log.currentSource(), pos,
|
return diags.create(dkind, log.currentSource(), pos,
|
||||||
"cant.apply.symbol",
|
"cant.apply.symbol",
|
||||||
compactMethodDiags ?
|
rewriter,
|
||||||
d -> MethodResolutionDiagHelper.rewrite(diags, pos, log.currentSource(), dkind, c.snd) : null,
|
|
||||||
kindName(ws),
|
kindName(ws),
|
||||||
ws.name == names.init ? ws.owner.name : ws.name,
|
ws.name == names.init ? ws.owner.name : ws.name,
|
||||||
methodArguments(ws.type.getParameterTypes()),
|
methodArguments(ws.type.getParameterTypes()),
|
||||||
|
@ -260,6 +260,13 @@ compiler.misc.cant.apply.symbol=\
|
|||||||
found: {3}\n\
|
found: {3}\n\
|
||||||
reason: {6}
|
reason: {6}
|
||||||
|
|
||||||
|
# 0: list of type or message segment, 1: list of type or message segment, 2: message segment
|
||||||
|
compiler.misc.cant.apply.array.ctor=\
|
||||||
|
cannot create array from given types\n\
|
||||||
|
required: {0}\n\
|
||||||
|
found: {1}\n\
|
||||||
|
reason: {2}
|
||||||
|
|
||||||
# 0: symbol kind, 1: name, 2: list of type
|
# 0: symbol kind, 1: name, 2: list of type
|
||||||
compiler.misc.cant.apply.symbols=\
|
compiler.misc.cant.apply.symbols=\
|
||||||
no suitable {0} found for {1}({2})
|
no suitable {0} found for {1}({2})
|
||||||
|
@ -26,6 +26,8 @@
|
|||||||
// key: compiler.misc.no.conforming.assignment.exists
|
// key: compiler.misc.no.conforming.assignment.exists
|
||||||
// key: compiler.misc.cant.apply.symbol
|
// key: compiler.misc.cant.apply.symbol
|
||||||
// key: compiler.misc.invalid.mref
|
// key: compiler.misc.invalid.mref
|
||||||
|
// key: compiler.misc.cant.apply.array.ctor
|
||||||
|
// key: compiler.misc.arg.length.mismatch
|
||||||
|
|
||||||
class CantApplySymbolFragment {
|
class CantApplySymbolFragment {
|
||||||
|
|
||||||
@ -38,4 +40,8 @@ class CantApplySymbolFragment {
|
|||||||
void test() {
|
void test() {
|
||||||
SAM s = CantApplySymbolFragment::f;
|
SAM s = CantApplySymbolFragment::f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test2() {
|
||||||
|
Runnable x = String[]::new;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
MethodReference60.java:26:44: compiler.err.prob.found.req: (compiler.misc.invalid.mref: kindname.constructor, (compiler.misc.cant.apply.symbol: kindname.constructor, Array, int, compiler.misc.no.args, kindname.class, Array, (compiler.misc.arg.length.mismatch)))
|
MethodReference60.java:26:44: compiler.err.prob.found.req: (compiler.misc.invalid.mref: kindname.constructor, (compiler.misc.cant.apply.array.ctor: int, compiler.misc.no.args, (compiler.misc.arg.length.mismatch)))
|
||||||
MethodReference60.java:27:44: compiler.err.prob.found.req: (compiler.misc.invalid.mref: kindname.constructor, (compiler.misc.cant.apply.symbol: kindname.constructor, Array, int, int,int, kindname.class, Array, (compiler.misc.arg.length.mismatch)))
|
MethodReference60.java:27:44: compiler.err.prob.found.req: (compiler.misc.invalid.mref: kindname.constructor, (compiler.misc.cant.apply.array.ctor: int, int,int, (compiler.misc.arg.length.mismatch)))
|
||||||
MethodReference60.java:28:44: compiler.err.prob.found.req: (compiler.misc.invalid.mref: kindname.constructor, (compiler.misc.cant.apply.symbol: kindname.constructor, Array, int, java.lang.String, kindname.class, Array, (compiler.misc.no.conforming.assignment.exists: (compiler.misc.inconvertible.types: java.lang.String, int))))
|
MethodReference60.java:28:44: compiler.err.prob.found.req: (compiler.misc.invalid.mref: kindname.constructor, (compiler.misc.cant.apply.array.ctor: int, java.lang.String, (compiler.misc.no.conforming.assignment.exists: (compiler.misc.inconvertible.types: java.lang.String, int))))
|
||||||
MethodReference60.java:29:42: compiler.err.prob.found.req: (compiler.misc.incompatible.ret.type.in.mref: (compiler.misc.inconvertible.types: int[], java.lang.Integer))
|
MethodReference60.java:29:42: compiler.err.prob.found.req: (compiler.misc.incompatible.ret.type.in.mref: (compiler.misc.inconvertible.types: int[], java.lang.Integer))
|
||||||
MethodReference60.java:30:44: compiler.err.prob.found.req: (compiler.misc.incompatible.ret.type.in.mref: (compiler.misc.inconvertible.types: int[], java.lang.Integer[]))
|
MethodReference60.java:30:44: compiler.err.prob.found.req: (compiler.misc.incompatible.ret.type.in.mref: (compiler.misc.inconvertible.types: int[], java.lang.Integer[]))
|
||||||
5 errors
|
5 errors
|
||||||
|
Loading…
x
Reference in New Issue
Block a user