mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-19 18:44:38 +02:00
8023545: Misleading error message when using diamond operator with private constructor
Reviewed-by: jjg
This commit is contained in:
parent
06caeea3d6
commit
cab6b226ff
3 changed files with 38 additions and 16 deletions
|
@ -2546,22 +2546,26 @@ public class Resolve {
|
|||
@Override
|
||||
Symbol access(Env<AttrContext> env, DiagnosticPosition pos, Symbol location, Symbol sym) {
|
||||
if (sym.kind >= AMBIGUOUS) {
|
||||
final JCDiagnostic details = sym.kind == WRONG_MTH ?
|
||||
((InapplicableSymbolError)sym).errCandidate().snd :
|
||||
null;
|
||||
sym = new InapplicableSymbolError(sym.kind, "diamondError", currentResolutionContext) {
|
||||
@Override
|
||||
JCDiagnostic getDiagnostic(DiagnosticType dkind, DiagnosticPosition pos,
|
||||
Symbol location, Type site, Name name, List<Type> argtypes, List<Type> typeargtypes) {
|
||||
String key = details == null ?
|
||||
"cant.apply.diamond" :
|
||||
"cant.apply.diamond.1";
|
||||
return diags.create(dkind, log.currentSource(), pos, key,
|
||||
diags.fragment("diamond", site.tsym), details);
|
||||
}
|
||||
};
|
||||
sym = accessMethod(sym, pos, site, names.init, true, argtypes, typeargtypes);
|
||||
env.info.pendingResolutionPhase = currentResolutionContext.step;
|
||||
if (sym.kind == HIDDEN) {
|
||||
sym = super.access(env, pos, location, sym);
|
||||
} else {
|
||||
final JCDiagnostic details = sym.kind == WRONG_MTH ?
|
||||
((InapplicableSymbolError)sym).errCandidate().snd :
|
||||
null;
|
||||
sym = new InapplicableSymbolError(sym.kind, "diamondError", currentResolutionContext) {
|
||||
@Override
|
||||
JCDiagnostic getDiagnostic(DiagnosticType dkind, DiagnosticPosition pos,
|
||||
Symbol location, Type site, Name name, List<Type> argtypes, List<Type> typeargtypes) {
|
||||
String key = details == null ?
|
||||
"cant.apply.diamond" :
|
||||
"cant.apply.diamond.1";
|
||||
return diags.create(dkind, log.currentSource(), pos, key,
|
||||
diags.fragment("diamond", site.tsym), details);
|
||||
}
|
||||
};
|
||||
sym = accessMethod(sym, pos, site, names.init, true, argtypes, typeargtypes);
|
||||
env.info.pendingResolutionPhase = currentResolutionContext.step;
|
||||
}
|
||||
}
|
||||
return sym;
|
||||
}});
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
/*
|
||||
* @test /nodynamiccopyright/
|
||||
* @bug 8023545
|
||||
* @summary Misleading error message when using diamond operator with private constructor
|
||||
* @compile/fail/ref=MisleadingErrorMsgDiamondPlusPrivateCtorTest.out -XDrawDiagnostics MisleadingErrorMsgDiamondPlusPrivateCtorTest.java
|
||||
*/
|
||||
|
||||
public class MisleadingErrorMsgDiamondPlusPrivateCtorTest {
|
||||
public void foo() {
|
||||
MyClass<Object> foo = new MyClass<>();
|
||||
}
|
||||
}
|
||||
|
||||
class MyClass<E> {
|
||||
private MyClass() {}
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
MisleadingErrorMsgDiamondPlusPrivateCtorTest.java:10:31: compiler.err.report.access: <E>MyClass(), private, MyClass
|
||||
1 error
|
Loading…
Add table
Add a link
Reference in a new issue