From d5b18e1e1615afa88ce5b0e81eeb8c4177d26eca Mon Sep 17 00:00:00 2001 From: sadayapalam Date: Wed, 27 May 2015 11:27:42 +0530 Subject: [PATCH] 8080726: Redundant error message on private abstract interface method with body. Reviewed-by: mcimadamore --- .../classes/com/sun/tools/javac/code/Types.java | 2 +- .../classes/com/sun/tools/javac/comp/Attr.java | 2 +- .../javac/defaultMethods/private/Private10.java | 16 ++++++++++++++++ .../javac/defaultMethods/private/Private10.out | 3 +++ 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 langtools/test/tools/javac/defaultMethods/private/Private10.java create mode 100644 langtools/test/tools/javac/defaultMethods/private/Private10.out diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java index f2c141f948..cf0a7aaa38 100644 --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java @@ -2749,7 +2749,7 @@ public class Types { Scope s = c.members(); for (Symbol sym : s.getSymbols(NON_RECURSIVE)) { if (sym.kind == MTH && - (sym.flags() & (ABSTRACT|IPROXY|DEFAULT)) == ABSTRACT) { + (sym.flags() & (ABSTRACT|IPROXY|DEFAULT|PRIVATE)) == ABSTRACT) { MethodSymbol absmeth = (MethodSymbol)sym; MethodSymbol implmeth = absmeth.implementation(impl, this, true); if (implmeth == null || implmeth == absmeth) { diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java index 1d312cf78f..9c7336af39 100644 --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java @@ -985,7 +985,7 @@ public class Attr extends JCTree.Visitor { if (isDefaultMethod || (tree.sym.flags() & (ABSTRACT | NATIVE)) == 0 && !relax) log.error(tree.pos(), "missing.meth.body.or.decl.abstract"); - } else if ((tree.sym.flags() & ABSTRACT) != 0 && !isDefaultMethod) { + } else if ((tree.sym.flags() & (ABSTRACT|DEFAULT|PRIVATE)) == ABSTRACT) { if ((owner.flags() & INTERFACE) != 0) { log.error(tree.body.pos(), "intf.meth.cant.have.body"); } else { diff --git a/langtools/test/tools/javac/defaultMethods/private/Private10.java b/langtools/test/tools/javac/defaultMethods/private/Private10.java new file mode 100644 index 0000000000..2352671101 --- /dev/null +++ b/langtools/test/tools/javac/defaultMethods/private/Private10.java @@ -0,0 +1,16 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8080726 + * @summary Redundant error message on private abstract interface method with body. + * @compile/fail/ref=Private10.out -XDrawDiagnostics Private10.java + */ + + +public class Private10 { + interface I { + private abstract void foo() {} + } + class C { + private abstract void foo() {} + } +} diff --git a/langtools/test/tools/javac/defaultMethods/private/Private10.out b/langtools/test/tools/javac/defaultMethods/private/Private10.out new file mode 100644 index 0000000000..764d438532 --- /dev/null +++ b/langtools/test/tools/javac/defaultMethods/private/Private10.out @@ -0,0 +1,3 @@ +Private10.java:11:31: compiler.err.illegal.combination.of.modifiers: abstract, private +Private10.java:14:31: compiler.err.illegal.combination.of.modifiers: abstract, private +2 errors -- GitLab