8151191: javac error when running javadoc on some inner classes

Reviewed-by: jjg
This commit is contained in:
Vicente Romero 2016-04-06 13:49:50 -04:00
parent 0fd0374c4f
commit 63eb0ee007
6 changed files with 147 additions and 3 deletions

View file

@ -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);
}
}
}

View file

@ -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;
}

View file

@ -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;

View 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 {}

View 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;
}
}

View file

@ -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() {};
};
}
}