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);
|
||||
}
|
||||
}
|
||||
|
||||
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.JavaFileObject;
|
||||
|
||||
import com.sun.tools.javac.code.ClassFinder.BadEnclosingMethodAttr;
|
||||
import com.sun.tools.javac.code.Kinds.Kind;
|
||||
import com.sun.tools.javac.comp.Annotate.AnnotationTypeMetadata;
|
||||
import com.sun.tools.javac.code.Scope.WriteableScope;
|
||||
|
@ -764,8 +765,13 @@ public abstract class Symbol extends AnnoConstruct implements Element {
|
|||
return list;
|
||||
}
|
||||
for (Symbol sym : members().getSymbols(NON_RECURSIVE)) {
|
||||
if (sym != null && (sym.flags() & SYNTHETIC) == 0 && sym.owner == this)
|
||||
list = list.prepend(sym);
|
||||
try {
|
||||
if (sym != null && (sym.flags() & SYNTHETIC) == 0 && sym.owner == this) {
|
||||
list = list.prepend(sym);
|
||||
}
|
||||
} catch (BadEnclosingMethodAttr badEnclosingMethod) {
|
||||
// ignore the exception
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
|
|
@ -274,6 +274,14 @@ public class ClassReader {
|
|||
diagFactory);
|
||||
}
|
||||
|
||||
public ClassFinder.BadEnclosingMethodAttr badEnclosingMethod(Object... args) {
|
||||
return new ClassFinder.BadEnclosingMethodAttr (
|
||||
currentOwner.enclClass(),
|
||||
currentClassFile,
|
||||
diagFactory.fragment("bad.enclosing.method", args),
|
||||
diagFactory);
|
||||
}
|
||||
|
||||
/************************************************************************
|
||||
* Buffer Access
|
||||
***********************************************************************/
|
||||
|
@ -1297,7 +1305,7 @@ public class ClassReader {
|
|||
|
||||
MethodSymbol m = findMethod(nt, c.members_field, self.flags());
|
||||
if (nt != null && m == null)
|
||||
throw badClassFile("bad.enclosing.method", self);
|
||||
throw badEnclosingMethod(self);
|
||||
|
||||
self.name = simpleBinaryName(self.flatname, c.flatname) ;
|
||||
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