# HG changeset patch # User vromero # Date 1557168475 14400 # Node ID c48f141e7c5b3f55a5b348f0705baeeb13d2046f # Parent 4f2fd02922b1ea36e7c2d7d3184d616d836dd694 8219483: j.l.c.ClassDesc::nested(String, String...) doesn't throw NPE if any arg is null Reviewed-by: darcy diff -r 4f2fd02922b1 -r c48f141e7c5b src/java.base/share/classes/java/lang/constant/ClassDesc.java --- a/src/java.base/share/classes/java/lang/constant/ClassDesc.java Mon May 06 09:58:14 2019 -0700 +++ b/src/java.base/share/classes/java/lang/constant/ClassDesc.java Mon May 06 14:47:55 2019 -0400 @@ -213,7 +213,7 @@ * @param moreNestedNames the unqualified name(s) of the remaining levels of * nested class * @return a {@linkplain ClassDesc} describing the nested class - * @throws NullPointerException if any argument is {@code null} + * @throws NullPointerException if any argument or its contents is {@code null} * @throws IllegalStateException if this {@linkplain ClassDesc} does not * describe a class or interface type * @throws IllegalArgumentException if the nested class name is invalid @@ -221,6 +221,11 @@ default ClassDesc nested(String firstNestedName, String... moreNestedNames) { if (!isClassOrInterface()) throw new IllegalStateException("Outer class is not a class or interface type"); + validateMemberName(firstNestedName, false); + requireNonNull(moreNestedNames); + for (String addNestedNames : moreNestedNames) { + validateMemberName(addNestedNames, false); + } return moreNestedNames.length == 0 ? nested(firstNestedName) : nested(firstNestedName + Stream.of(moreNestedNames).collect(joining("$", "$", ""))); diff -r 4f2fd02922b1 -r c48f141e7c5b test/jdk/java/lang/constant/ClassDescTest.java --- a/test/jdk/java/lang/constant/ClassDescTest.java Mon May 06 09:58:14 2019 -0700 +++ b/test/jdk/java/lang/constant/ClassDescTest.java Mon May 06 14:47:55 2019 -0400 @@ -306,4 +306,28 @@ assertEquals(s.resolveConstantDesc(LOOKUP), s); assertEquals(s.describeConstable().get(), s); } + + public void testNullNestedClasses() { + ClassDesc cd = ClassDesc.of("Bar"); + try { + cd.nested(null); + fail(""); + } catch (NullPointerException e) { + // good + } + + try { + cd.nested("good", null); + fail(""); + } catch (NullPointerException e) { + // good + } + + try { + cd.nested("good", "goodToo", null); + fail(""); + } catch (NullPointerException e) { + // good + } + } }