# HG changeset patch # User mcimadamore # Date 1478517383 0 # Node ID 260c724e5614bf2acdba934ead9daf6530aa7ece # Parent a935ac3f527404ec1a90ddda05f7fe6127def33b 8168854: javac erroneously reject a a service interface inner class in a provides clause Summary: Java SE 9 proposed spec changes do not explicitly forbid a service interface to be an inner class - javac should follow Reviewed-by: jjg diff -r a935ac3f5274 -r 260c724e5614 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java Sun Nov 06 22:50:46 2016 -0800 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java Mon Nov 07 11:16:23 2016 +0000 @@ -777,8 +777,6 @@ log.error(tree.implName.pos(), Errors.ServiceImplementationIsAbstract(impl)); } else if (impl.isInner()) { log.error(tree.implName.pos(), Errors.ServiceImplementationIsInner(impl)); - } else if (service.isInner()) { - log.error(tree.serviceName.pos(), Errors.ServiceDefinitionIsInner(service)); } else { MethodSymbol constr = noArgsConstructor(impl); if (constr == null) { diff -r a935ac3f5274 -r 260c724e5614 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Sun Nov 06 22:50:46 2016 -0800 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties Mon Nov 07 11:16:23 2016 +0000 @@ -2766,10 +2766,6 @@ the service implementation is an inner class: {0} # 0: symbol -compiler.err.service.definition.is.inner=\ - the service definition is an inner class: {0} - -# 0: symbol compiler.err.service.definition.is.enum=\ the service definition is an enum: {0} diff -r a935ac3f5274 -r 260c724e5614 langtools/test/tools/javac/diags/examples/ServiceDefinitionInner/ServiceDefinitionInner.java --- a/langtools/test/tools/javac/diags/examples/ServiceDefinitionInner/ServiceDefinitionInner.java Sun Nov 06 22:50:46 2016 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -// key: compiler.err.service.definition.is.inner -// key: compiler.err.encl.class.required diff -r a935ac3f5274 -r 260c724e5614 langtools/test/tools/javac/diags/examples/ServiceDefinitionInner/modulesourcepath/m/module-info.java --- a/langtools/test/tools/javac/diags/examples/ServiceDefinitionInner/modulesourcepath/m/module-info.java Sun Nov 06 22:50:46 2016 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -module m { - provides p1.C1.InnerDefinition with p2.C2; - exports p1; -} diff -r a935ac3f5274 -r 260c724e5614 langtools/test/tools/javac/diags/examples/ServiceDefinitionInner/modulesourcepath/m/p1/C1.java --- a/langtools/test/tools/javac/diags/examples/ServiceDefinitionInner/modulesourcepath/m/p1/C1.java Sun Nov 06 22:50:46 2016 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package p1; - -public class C1 { - public class InnerDefinition {} -} diff -r a935ac3f5274 -r 260c724e5614 langtools/test/tools/javac/diags/examples/ServiceDefinitionInner/modulesourcepath/m/p2/C2.java --- a/langtools/test/tools/javac/diags/examples/ServiceDefinitionInner/modulesourcepath/m/p2/C2.java Sun Nov 06 22:50:46 2016 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package p2; - -public class C2 extends p1.C1.InnerDefinition {} diff -r a935ac3f5274 -r 260c724e5614 langtools/test/tools/javac/modules/ProvidesTest.java --- a/langtools/test/tools/javac/modules/ProvidesTest.java Sun Nov 06 22:50:46 2016 -0800 +++ b/langtools/test/tools/javac/modules/ProvidesTest.java Mon Nov 07 11:16:23 2016 +0000 @@ -24,6 +24,7 @@ /** * @test * @summary simple tests of module provides + * @bug 8168854 * @library /tools/lib * @modules * jdk.compiler/com.sun.tools.javac.api @@ -39,6 +40,7 @@ import toolbox.JavacTask; import toolbox.Task; +import toolbox.Task.Expect; import toolbox.ToolBox; public class ProvidesTest extends ModuleTestBase { @@ -415,24 +417,13 @@ tb.writeJavaFiles(src, "module m { provides p1.C1.InnerDefinition with p2.C2; }", "package p1; public class C1 { public class InnerDefinition { } }", - "package p2; public class C2 extends p1.C1.InnerDefinition { }"); + "package p2; public class C2 extends p1.C1.InnerDefinition { public C2() { new p1.C1().super(); } }"); - List output = new JavacTask(tb) + new JavacTask(tb) .options("-XDrawDiagnostics") .outdir(Files.createDirectories(base.resolve("classes"))) .files(findJavaFiles(src)) - .run(Task.Expect.FAIL) - .writeAll() - .getOutputLines(Task.OutputKind.DIRECT); - - List expected = Arrays.asList( - "module-info.java:1:26: compiler.err.service.definition.is.inner: p1.C1.InnerDefinition", - "module-info.java:1:12: compiler.warn.service.provided.but.not.exported.or.used: p1.C1.InnerDefinition", - "C2.java:1:20: compiler.err.encl.class.required: p1.C1.InnerDefinition", - "2 errors", - "1 warning"); - if (!output.containsAll(expected)) { - throw new Exception("Expected output not found"); - } + .run(Expect.SUCCESS) + .writeAll(); } } diff -r a935ac3f5274 -r 260c724e5614 langtools/test/tools/javac/modules/T8168854/module-info.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/modules/T8168854/module-info.java Mon Nov 07 11:16:23 2016 +0000 @@ -0,0 +1,10 @@ +/* + * @test + * @bug 8168854 + * @summary javac erroneously reject a a service interface inner class in a provides clause + * @compile module-info.java + */ +module mod { + exports pack1; + provides pack1.Outer.Inter with pack1.Outer1.Implem; +} diff -r a935ac3f5274 -r 260c724e5614 langtools/test/tools/javac/modules/T8168854/pack1/Outer.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/modules/T8168854/pack1/Outer.java Mon Nov 07 11:16:23 2016 +0000 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package pack1; + +public class Outer { + public class Inter { + } +} \ No newline at end of file diff -r a935ac3f5274 -r 260c724e5614 langtools/test/tools/javac/modules/T8168854/pack1/Outer1.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/modules/T8168854/pack1/Outer1.java Mon Nov 07 11:16:23 2016 +0000 @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package pack1; + +public class Outer1 { + public static class Implem extends Outer.Inter { + public Implem () { + new Outer().super(); + } + } +} \ No newline at end of file