mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-19 18:44:38 +02:00
8151191: javac error when running javadoc on some inner classes
Reviewed-by: jjg
This commit is contained in:
parent
0fd0374c4f
commit
63eb0ee007
6 changed files with 147 additions and 3 deletions
|
@ -731,4 +731,13 @@ public class ClassFinder {
|
||||||
return diagFactory.fragment(key, file, diag);
|
return diagFactory.fragment(key, file, diag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class BadEnclosingMethodAttr extends BadClassFile {
|
||||||
|
private static final long serialVersionUID = 0;
|
||||||
|
|
||||||
|
public BadEnclosingMethodAttr(TypeSymbol sym, JavaFileObject file, JCDiagnostic diag,
|
||||||
|
JCDiagnostic.Factory diagFactory) {
|
||||||
|
super(sym, file, diag, diagFactory);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,6 +46,7 @@ import javax.lang.model.element.VariableElement;
|
||||||
import javax.tools.JavaFileManager;
|
import javax.tools.JavaFileManager;
|
||||||
import javax.tools.JavaFileObject;
|
import javax.tools.JavaFileObject;
|
||||||
|
|
||||||
|
import com.sun.tools.javac.code.ClassFinder.BadEnclosingMethodAttr;
|
||||||
import com.sun.tools.javac.code.Kinds.Kind;
|
import com.sun.tools.javac.code.Kinds.Kind;
|
||||||
import com.sun.tools.javac.comp.Annotate.AnnotationTypeMetadata;
|
import com.sun.tools.javac.comp.Annotate.AnnotationTypeMetadata;
|
||||||
import com.sun.tools.javac.code.Scope.WriteableScope;
|
import com.sun.tools.javac.code.Scope.WriteableScope;
|
||||||
|
@ -764,8 +765,13 @@ public abstract class Symbol extends AnnoConstruct implements Element {
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
for (Symbol sym : members().getSymbols(NON_RECURSIVE)) {
|
for (Symbol sym : members().getSymbols(NON_RECURSIVE)) {
|
||||||
if (sym != null && (sym.flags() & SYNTHETIC) == 0 && sym.owner == this)
|
try {
|
||||||
list = list.prepend(sym);
|
if (sym != null && (sym.flags() & SYNTHETIC) == 0 && sym.owner == this) {
|
||||||
|
list = list.prepend(sym);
|
||||||
|
}
|
||||||
|
} catch (BadEnclosingMethodAttr badEnclosingMethod) {
|
||||||
|
// ignore the exception
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
|
@ -274,6 +274,14 @@ public class ClassReader {
|
||||||
diagFactory);
|
diagFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ClassFinder.BadEnclosingMethodAttr badEnclosingMethod(Object... args) {
|
||||||
|
return new ClassFinder.BadEnclosingMethodAttr (
|
||||||
|
currentOwner.enclClass(),
|
||||||
|
currentClassFile,
|
||||||
|
diagFactory.fragment("bad.enclosing.method", args),
|
||||||
|
diagFactory);
|
||||||
|
}
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* Buffer Access
|
* Buffer Access
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
|
@ -1297,7 +1305,7 @@ public class ClassReader {
|
||||||
|
|
||||||
MethodSymbol m = findMethod(nt, c.members_field, self.flags());
|
MethodSymbol m = findMethod(nt, c.members_field, self.flags());
|
||||||
if (nt != null && m == null)
|
if (nt != null && m == null)
|
||||||
throw badClassFile("bad.enclosing.method", self);
|
throw badEnclosingMethod(self);
|
||||||
|
|
||||||
self.name = simpleBinaryName(self.flatname, c.flatname) ;
|
self.name = simpleBinaryName(self.flatname, c.flatname) ;
|
||||||
self.owner = m != null ? m : c;
|
self.owner = m != null ? m : c;
|
||||||
|
|
28
langtools/test/tools/javac/T8151191/Anno.java
Normal file
28
langtools/test/tools/javac/T8151191/Anno.java
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Target(ElementType.TYPE)
|
||||||
|
public @interface Anno {}
|
50
langtools/test/tools/javac/T8151191/AnnoProcessor.java
Normal file
50
langtools/test/tools/javac/T8151191/AnnoProcessor.java
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import javax.annotation.processing.*;
|
||||||
|
import javax.lang.model.element.TypeElement;
|
||||||
|
import javax.lang.model.element.*;
|
||||||
|
import javax.lang.model.SourceVersion;
|
||||||
|
|
||||||
|
@SupportedAnnotationTypes("*")
|
||||||
|
public class AnnoProcessor extends AbstractProcessor {
|
||||||
|
@Override
|
||||||
|
public SourceVersion getSupportedSourceVersion() {
|
||||||
|
return SourceVersion.latest();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean process(Set<? extends TypeElement> set, RoundEnvironment re) {
|
||||||
|
for (TypeElement tElement : set) {
|
||||||
|
Element e = tElement.getEnclosingElement();
|
||||||
|
if (e != null) {
|
||||||
|
if (e instanceof PackageElement) {
|
||||||
|
((PackageElement)e).getEnclosedElements();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* bug 8151191
|
||||||
|
* @summary javac error when running javadoc on some inner classes
|
||||||
|
* @library /tools/javac/lib
|
||||||
|
* @modules java.compiler
|
||||||
|
* jdk.compiler
|
||||||
|
* @build JavacTestingAbstractProcessor
|
||||||
|
* @compile Anno.java AnnoProcessor.java ErrorRunningJavadocOnInnerClasses.java
|
||||||
|
* @compile -processor AnnoProcessor ErrorRunningJavadocOnInnerClasses.java
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Anno
|
||||||
|
public class ErrorRunningJavadocOnInnerClasses {
|
||||||
|
ErrorRunningJavadocOnInnerClasses() {
|
||||||
|
Runnable r = () -> {
|
||||||
|
new Object() {};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue