From 08ca477e25c52704ff6f039239f4078603d4c62f Mon Sep 17 00:00:00 2001 From: noti0na1 Date: Mon, 11 Nov 2019 15:49:58 -0500 Subject: [PATCH 1/2] Fix #7525: Allow static methods having body in JavaParser --- compiler/src/dotty/tools/dotc/parsing/JavaParsers.scala | 2 +- tests/pos/i7525/Interface.java | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 tests/pos/i7525/Interface.java diff --git a/compiler/src/dotty/tools/dotc/parsing/JavaParsers.scala b/compiler/src/dotty/tools/dotc/parsing/JavaParsers.scala index fed445077d8a..75fc55970e5a 100644 --- a/compiler/src/dotty/tools/dotc/parsing/JavaParsers.scala +++ b/compiler/src/dotty/tools/dotc/parsing/JavaParsers.scala @@ -521,7 +521,7 @@ object JavaParsers { val vparams = formalParams() if (!isVoid) rtpt = optArrayBrackets(rtpt) optThrows() - val bodyOk = !inInterface || (mods.is(Flags.DefaultMethod)) + val bodyOk = !inInterface || mods.is(Flags.DefaultMethod) || mods.is(Flags.JavaStatic) val body = if (bodyOk && in.token == LBRACE) methodBody() diff --git a/tests/pos/i7525/Interface.java b/tests/pos/i7525/Interface.java new file mode 100644 index 000000000000..2b5b38e292c7 --- /dev/null +++ b/tests/pos/i7525/Interface.java @@ -0,0 +1,5 @@ +// Test static methods in interface can also have body. + +public interface Interface { + static void s() {} +} \ No newline at end of file From d4531f090afa4986e2a8116aa07be7f610f8c240 Mon Sep 17 00:00:00 2001 From: noti0na1 Date: Mon, 11 Nov 2019 17:28:59 -0500 Subject: [PATCH 2/2] simplify flag check --- compiler/src/dotty/tools/dotc/parsing/JavaParsers.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/src/dotty/tools/dotc/parsing/JavaParsers.scala b/compiler/src/dotty/tools/dotc/parsing/JavaParsers.scala index 75fc55970e5a..203fa0c91b84 100644 --- a/compiler/src/dotty/tools/dotc/parsing/JavaParsers.scala +++ b/compiler/src/dotty/tools/dotc/parsing/JavaParsers.scala @@ -521,7 +521,7 @@ object JavaParsers { val vparams = formalParams() if (!isVoid) rtpt = optArrayBrackets(rtpt) optThrows() - val bodyOk = !inInterface || mods.is(Flags.DefaultMethod) || mods.is(Flags.JavaStatic) + val bodyOk = !inInterface || mods.isOneOf(Flags.DefaultMethod | Flags.JavaStatic) val body = if (bodyOk && in.token == LBRACE) methodBody()