# HG changeset patch # User sadayapalam # Date 1453198602 -19800 # Node ID 95a9b9409b5096f66488c6716d51d10e3e2c5c7f # Parent 12e87a369cc96250b26c3b8bef2f05c6523d0b49 8144580: java.lang.AssertionError: Missing type variable in where clause: T Summary: Type variable comparisons should ignore type annotations. Reviewed-by: mcimadamore diff -r 12e87a369cc9 -r 95a9b9409b50 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java Mon Jan 18 14:25:29 2016 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java Tue Jan 19 15:46:42 2016 +0530 @@ -368,6 +368,10 @@ accept(stripMetadata, null) : this; } + + public Type stripMetadata() { + return accept(stripMetadata, null); + } //where private final static TypeMapping stripMetadata = new TypeMapping() { @Override diff -r 12e87a369cc9 -r 95a9b9409b50 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/RichDiagnosticFormatter.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/RichDiagnosticFormatter.java Mon Jan 18 14:25:29 2016 +0000 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/RichDiagnosticFormatter.java Tue Jan 19 15:46:42 2016 +0530 @@ -235,16 +235,16 @@ } private boolean unique(TypeVar typevar) { - typevar = (TypeVar)typevar.stripMetadataIfNeeded(); + typevar = (TypeVar) typevar.stripMetadata(); int found = 0; for (Type t : whereClauses.get(WhereClauseKind.TYPEVAR).keySet()) { - if (t.toString().equals(typevar.toString())) { + if (t.stripMetadata().toString().equals(typevar.toString())) { found++; } } if (found < 1) - throw new AssertionError("Missing type variable in where clause " + typevar); + throw new AssertionError("Missing type variable in where clause: " + typevar); return found == 1; } //where diff -r 12e87a369cc9 -r 95a9b9409b50 langtools/test/tools/javac/annotations/typeAnnotations/RichFormatterWithAnnotationsTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/annotations/typeAnnotations/RichFormatterWithAnnotationsTest.java Tue Jan 19 15:46:42 2016 +0530 @@ -0,0 +1,45 @@ +/* + * 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 8144580 + * @summary java.lang.AssertionError: Missing type variable in where clause: T + * @compile -Xlint:unchecked RichFormatterWithAnnotationsTest.java + */ + +import java.lang.annotation.*; +import java.util.*; + +public class RichFormatterWithAnnotationsTest { + + @Target({ElementType.TYPE_USE}) + @interface NonNull { } + + public static void test() { + final Collection<@NonNull T> c = new LinkedList<>(); + final List<@NonNull String> l = new LinkedList<@NonNull String>((Collection<@NonNull String>) c) { + // empty + }; + } +}