Tue, 06 Mar 2012 16:48:29 +0000
7151070: NullPointerException in Resolve.isAccessible
Summary: Spurious accessibility check in TransTypes
Reviewed-by: jjg
1.1 --- a/src/share/classes/com/sun/tools/javac/comp/Resolve.java Tue Mar 06 13:29:45 2012 +0000 1.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Resolve.java Tue Mar 06 16:48:29 2012 +0000 1.3 @@ -2097,9 +2097,10 @@ 1.4 * ResolveError classes, indicating error situations when accessing symbols 1.5 ****************************************************************************/ 1.6 1.7 - public void logAccessError(Env<AttrContext> env, JCTree tree, Type type) { 1.8 - AccessError error = new AccessError(env, type.getEnclosingType(), type.tsym); 1.9 - logResolveError(error, tree.pos(), type.getEnclosingType().tsym, type.getEnclosingType(), null, null, null); 1.10 + //used by TransTypes when checking target type of synthetic cast 1.11 + public void logAccessErrorInternal(Env<AttrContext> env, JCTree tree, Type type) { 1.12 + AccessError error = new AccessError(env, env.enclClass.type, type.tsym); 1.13 + logResolveError(error, tree.pos(), env.enclClass.sym, env.enclClass.type, null, null, null); 1.14 } 1.15 //where 1.16 private void logResolveError(ResolveError error,
2.1 --- a/src/share/classes/com/sun/tools/javac/comp/TransTypes.java Tue Mar 06 13:29:45 2012 +0000 2.2 +++ b/src/share/classes/com/sun/tools/javac/comp/TransTypes.java Tue Mar 06 16:48:29 2012 +0000 2.3 @@ -107,7 +107,7 @@ 2.4 make.at(tree.pos); 2.5 if (!types.isSameType(tree.type, target)) { 2.6 if (!resolve.isAccessible(env, target.tsym)) 2.7 - resolve.logAccessError(env, tree, target); 2.8 + resolve.logAccessErrorInternal(env, tree, target); 2.9 tree = make.TypeCast(make.Type(target), tree).setType(target); 2.10 } 2.11 make.pos = oldpos;
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/test/tools/javac/generics/7151070/T7151070.java Tue Mar 06 16:48:29 2012 +0000 3.3 @@ -0,0 +1,25 @@ 3.4 +/* 3.5 + * @test /nodynamiccopyright/ 3.6 + * @bug 7151070 3.7 + * @summary NullPointerException in Resolve.isAccessible 3.8 + * @compile/fail/ref=T7151070.out -XDrawDiagnostics T7151070.java 3.9 + */ 3.10 + 3.11 +class T7151070a { 3.12 + private static class PrivateCls { } 3.13 + public static class PublicCls extends PrivateCls { } 3.14 + 3.15 + public void m(PrivateCls p) { } 3.16 +} 3.17 + 3.18 +class T7151070b { 3.19 + public void test(Test<T7151070a.PublicCls> obj, T7151070a outer) { 3.20 + outer.m(obj.get()); 3.21 + } 3.22 + 3.23 + public static class Test<T> { 3.24 + public T get() { 3.25 + return null; 3.26 + } 3.27 + } 3.28 +}
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 4.2 +++ b/test/tools/javac/generics/7151070/T7151070.out Tue Mar 06 16:48:29 2012 +0000 4.3 @@ -0,0 +1,2 @@ 4.4 +T7151070.java:17:24: compiler.err.report.access: T7151070a.PrivateCls, private, T7151070a 4.5 +1 error