Mercurial > hg > openjdk > jdk8 > langtools
changeset 2183:e39bd9401ea5
8027730: Fix release-8 type visitors to support intersection types
Reviewed-by: jjg, jlahoda, sogoel
author | darcy |
---|---|
date | Thu, 07 Nov 2013 20:11:56 -0800 |
parents | 75c8cde12ab6 |
children | 21294feaf311 |
files | src/share/classes/javax/lang/model/util/SimpleTypeVisitor8.java src/share/classes/javax/lang/model/util/TypeKindVisitor8.java test/tools/javac/processing/model/util/TestIntersectionTypeVisitors.java |
diffstat | 3 files changed, 149 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/javax/lang/model/util/SimpleTypeVisitor8.java Wed Nov 06 17:48:25 2013 +0100 +++ b/src/share/classes/javax/lang/model/util/SimpleTypeVisitor8.java Thu Nov 07 20:11:56 2013 -0800 @@ -27,6 +27,7 @@ import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.SourceVersion; +import javax.lang.model.type.IntersectionType; import static javax.lang.model.SourceVersion.*; /** @@ -98,4 +99,17 @@ protected SimpleTypeVisitor8(R defaultValue){ super(defaultValue); } + + /** + * This implementation visits an {@code IntersectionType} by calling + * {@code defaultAction}. + * + * @param t {@inheritDoc} + * @param p {@inheritDoc} + * @return the result of {@code defaultAction} + */ + @Override + public R visitIntersection(IntersectionType t, P p){ + return defaultAction(t, p); + } }
--- a/src/share/classes/javax/lang/model/util/TypeKindVisitor8.java Wed Nov 06 17:48:25 2013 +0100 +++ b/src/share/classes/javax/lang/model/util/TypeKindVisitor8.java Thu Nov 07 20:11:56 2013 -0800 @@ -101,4 +101,17 @@ protected TypeKindVisitor8(R defaultValue) { super(defaultValue); } + + /** + * This implementation visits an {@code IntersectionType} by calling + * {@code defaultAction}. + * + * @param t {@inheritDoc} + * @param p {@inheritDoc} + * @return the result of {@code defaultAction} + */ + @Override + public R visitIntersection(IntersectionType t, P p) { + return defaultAction(t, p); + } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/processing/model/util/TestIntersectionTypeVisitors.java Thu Nov 07 20:11:56 2013 -0800 @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2013, 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 8027730 + * @summary Test visitor support for intersection types + */ + +import java.lang.annotation.Annotation; +import java.util.List; +import javax.lang.model.element.*; +import javax.lang.model.type.*; +import javax.lang.model.util.*; + +public class TestIntersectionTypeVisitors { + public static void main(String... args) throws Exception { + IntersectionType it = new TestIntersectionType(); + + boolean result = it.accept(new TypeKindVisitor8Child(), null) && + it.accept(new SimpleTypeVisitor8Child(), null) && + it.accept(new SimpleTypeVisitor6Child(), null); + + if (!result) + throw new RuntimeException(); + } + + static class TestIntersectionType implements IntersectionType { + TestIntersectionType() {} + + @Override + public List<? extends TypeMirror> getBounds() { + throw new UnsupportedOperationException(); + } + + @Override + public <R,P> R accept(TypeVisitor<R,P> v, + P p) { + return v.visitIntersection(this, p); + } + + @Override + public TypeKind getKind() { + return TypeKind.INTERSECTION; + } + + @Override + public <A extends Annotation> A getAnnotation(Class<A> annotationType) { + throw new UnsupportedOperationException(); + } + + @Override + public List<? extends AnnotationMirror> getAnnotationMirrors() { + throw new UnsupportedOperationException(); + } + + @Override + public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationType) { + throw new UnsupportedOperationException(); + } + } + + static class TypeKindVisitor8Child extends TypeKindVisitor8<Boolean, Void> { + TypeKindVisitor8Child() { + super(false); + } + + @Override + public Boolean visitIntersection(IntersectionType t, Void p) { + super.visitIntersection(t, p); // Make sure overridden method doesn't throw an exception + return true; + } + } + + static class SimpleTypeVisitor8Child extends SimpleTypeVisitor8<Boolean, Void> { + SimpleTypeVisitor8Child() { + super(false); + } + + @Override + public Boolean visitIntersection(IntersectionType t, Void p) { + super.visitIntersection(t, p); // Make sure overridden method doesn't throw an exception + return true; + } + } + + static class SimpleTypeVisitor6Child extends SimpleTypeVisitor6<Boolean, Void> { + SimpleTypeVisitor6Child() { + super(false); + } + + @Override + public Boolean visitIntersection(IntersectionType t, Void p) { + try { + super.visitIntersection(t, p); + return false; + } catch (UnknownTypeException ute) { + return true; // Expected + } + } + } +}