TestVisitorDefaults.java revision 3895:4a937fde7b91
1131476Spjd/* 2142727Spjd * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. 3131476Spjd * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4131476Spjd * 5131476Spjd * This code is free software; you can redistribute it and/or modify it 6131476Spjd * under the terms of the GNU General Public License version 2 only, as 7131476Spjd * published by the Free Software Foundation. 8131476Spjd * 9131476Spjd * This code is distributed in the hope that it will be useful, but WITHOUT 10131476Spjd * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11131476Spjd * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12131476Spjd * version 2 for more details (a copy is included in the LICENSE file that 13155175Spjd * accompanied this code). 14131476Spjd * 15131476Spjd * You should have received a copy of the GNU General Public License version 16131476Spjd * 2 along with this work; if not, write to the Free Software Foundation, 17131476Spjd * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18131476Spjd * 19131476Spjd * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20131476Spjd * or visit www.oracle.com if you need additional information or have any 21131476Spjd * questions. 22131476Spjd */ 23131476Spjd 24131476Spjd/* 25131476Spjd * @test 26131476Spjd * @bug 8172910 27131476Spjd * @summary Test behavior of default methods on visitors. 28131476Spjd * @modules java.compiler 29131476Spjd */ 30131476Spjd 31131476Spjdimport java.util.List; 32131476Spjdimport javax.lang.model.SourceVersion; 33131476Spjdimport javax.lang.model.element.*; 34131476Spjdimport javax.lang.model.type.*; 35131476Spjdimport javax.lang.model.util.*; 36131476Spjd 37131476Spjd/** 38131476Spjd * Verify expected behavior of default methods on visitors. 39131476Spjd */ 40131476Spjdpublic class TestVisitorDefaults { 41131476Spjd public static void main(String... args) { 42131476Spjd DirectElementVisitorChild dvc = new DirectElementVisitorChild(); 43179550Smarcel if (!"visitUnknown".equals(dvc.visitModule(null, null))) { 44176852Sdelphij throw new RuntimeException("Problem with DirectElementVisitorChild"); 45176852Sdelphij } 46176852Sdelphij if (!"visit".equals(dvc.visit(null))) { 47176852Sdelphij throw new RuntimeException("Problem with DirectElementVisitorChild"); 48131476Spjd } 49176852Sdelphij 50176852Sdelphij IndirectElementVisitorChild ivc = new IndirectElementVisitorChild(); 51131476Spjd if (!"visitUnknown".equals(ivc.visitModule(null, null))) { 52131476Spjd throw new RuntimeException("Problem with IndirectElementVisitorChild"); 53132344Spjd } 54132344Spjd 55131476Spjd DirectTypeVisitorChild dtvc = new DirectTypeVisitorChild(); 56131476Spjd if (!"visit".equals(dtvc.visit(null))) { 57176852Sdelphij throw new RuntimeException("Problem with DirectTypeVisitorChild"); 58212554Spjd } 59143586Spjd 60143586Spjd DirectAnnotationVisitorChild davc = new DirectAnnotationVisitorChild(); 61143586Spjd if (!"visit".equals(davc.visit(null))) { 62212554Spjd throw new RuntimeException("Problem with DirectAnnotationVisitorChild"); 63143586Spjd } 64131476Spjd } 65131476Spjd 66162868Spjd private static class DirectElementVisitorChild 67131476Spjd implements ElementVisitor<String, Object> { 68143586Spjd 69212554Spjd public DirectElementVisitorChild() { 70131476Spjd super(); 71212554Spjd } 72143586Spjd 73143586Spjd @Override 74143586Spjd public String visitModule(ModuleElement e, Object o) { 75212554Spjd return ElementVisitor.super.visitModule(e, null); 76143586Spjd } 77131649Spjd 78131649Spjd @Override 79162868Spjd public String visitUnknown(Element e, Object o) { 80131649Spjd return "visitUnknown"; 81143586Spjd } 82212554Spjd 83131649Spjd @Override 84131476Spjd public String visit(Element e) { 85131476Spjd return ElementVisitor.super.visit(e); 86131476Spjd } 87131476Spjd 88131476Spjd @Override 89131476Spjd public String visit(Element e, Object o) { 90131476Spjd return "visit"; 91131476Spjd } 92131476Spjd 93131476Spjd @Override 94131476Spjd public String visitExecutable(ExecutableElement e, Object o) { return throwUOE(); } 95131476Spjd @Override 96131476Spjd public String visitPackage(PackageElement e, Object o) { return throwUOE(); } 97153190Spjd @Override 98131476Spjd public String visitType(TypeElement e, Object o) { return throwUOE(); } 99131476Spjd @Override 100131476Spjd public String visitTypeParameter(TypeParameterElement e, Object o) { return throwUOE(); } 101131476Spjd @Override 102131476Spjd public String visitVariable(VariableElement e, Object o) { return throwUOE(); } 103131476Spjd } 104131476Spjd 105131476Spjd private static class IndirectElementVisitorChild 106132344Spjd extends AbstractElementVisitor6<String, Object> { 107132344Spjd 108131476Spjd public IndirectElementVisitorChild() { 109131476Spjd super(); 110131476Spjd } 111131476Spjd 112131476Spjd @Override 113131476Spjd public String visitModule(ModuleElement e, Object o) { 114131476Spjd return super.visitModule(e, o); 115131476Spjd } 116131476Spjd 117131476Spjd 118153190Spjd @Override 119131476Spjd public String visitUnknown(Element e, Object o) { 120153190Spjd return "visitUnknown"; 121153190Spjd } 122131476Spjd 123131476Spjd @Override 124131476Spjd public String visitExecutable(ExecutableElement e, Object o) { return throwUOE(); } 125131476Spjd @Override 126131476Spjd public String visitPackage(PackageElement e, Object o) { return throwUOE(); } 127131476Spjd @Override 128131476Spjd public String visitType(TypeElement e, Object o) { return throwUOE(); } 129153190Spjd @Override 130131476Spjd public String visitTypeParameter(TypeParameterElement e, Object o) { return throwUOE(); } 131131476Spjd @Override 132131476Spjd public String visitVariable(VariableElement e, Object o) { return throwUOE(); } 133131476Spjd } 134131476Spjd 135131476Spjd 136131476Spjd private static class DirectTypeVisitorChild 137131476Spjd implements TypeVisitor<String, Object> { 138131476Spjd 139153190Spjd public DirectTypeVisitorChild() { 140131476Spjd super(); 141142727Spjd } 142142727Spjd 143142727Spjd @Override 144142727Spjd public String visit(TypeMirror t) { 145142727Spjd return TypeVisitor.super.visit(t); 146142727Spjd } 147131476Spjd 148131476Spjd @Override 149131476Spjd public String visit(TypeMirror t, Object o) { 150131476Spjd return "visit"; 151131476Spjd } 152131476Spjd 153131476Spjd @Override 154131476Spjd public String visitUnknown(TypeMirror t, Object o) { return throwUOE(); } 155131476Spjd @Override 156131476Spjd public String visitArray(ArrayType t, Object o) { return throwUOE(); } 157131476Spjd @Override 158131476Spjd public String visitDeclared(DeclaredType t, Object o) { return throwUOE(); } 159131476Spjd @Override 160131476Spjd public String visitError(ErrorType t, Object o) { return throwUOE(); } 161131476Spjd @Override 162131476Spjd public String visitExecutable(ExecutableType t, Object o) { return throwUOE(); } 163131476Spjd @Override 164131476Spjd public String visitIntersection(IntersectionType t, Object o) { return throwUOE(); } 165131476Spjd @Override 166153190Spjd public String visitNoType(NoType t, Object o) { return throwUOE(); } 167131476Spjd @Override 168153190Spjd public String visitNull(NullType t, Object o) { return throwUOE(); } 169153190Spjd @Override 170131476Spjd public String visitPrimitive(PrimitiveType t, Object o) { return throwUOE(); } 171131476Spjd @Override 172131476Spjd public String visitTypeVariable(TypeVariable t, Object o) { return throwUOE(); } 173131476Spjd @Override 174153190Spjd public String visitUnion(UnionType t, Object o) { return throwUOE(); } 175153190Spjd @Override 176131476Spjd public String visitWildcard(WildcardType t, Object o) { return throwUOE(); } 177131476Spjd } 178131476Spjd 179131476Spjd private static class DirectAnnotationVisitorChild 180131476Spjd implements AnnotationValueVisitor<String, Object> { 181131476Spjd 182131476Spjd @Override 183131476Spjd public String visit(AnnotationValue av) { 184155175Spjd return AnnotationValueVisitor.super.visit(av); 185131476Spjd } 186131476Spjd 187132344Spjd @Override 188155175Spjd public String visit(AnnotationValue av, Object o) { 189132344Spjd return "visit"; 190132344Spjd } 191132344Spjd 192155175Spjd @Override 193132344Spjd public String visitAnnotation(AnnotationMirror a, Object o) { return throwUOE(); } 194132344Spjd @Override 195132344Spjd public String visitArray(List<? extends AnnotationValue> vals, 196132344Spjd Object o) { return throwUOE(); } 197132344Spjd @Override 198132344Spjd public String visitBoolean(boolean b, Object o) { return throwUOE(); } 199132344Spjd @Override 200132344Spjd public String visitByte(byte b, Object o) { return throwUOE(); } 201132344Spjd @Override 202153190Spjd public String visitChar(char c, Object o) { return throwUOE(); } 203132344Spjd @Override 204153190Spjd public String visitDouble(double d, Object o) { return throwUOE(); } 205153190Spjd @Override 206132344Spjd public String visitEnumConstant(VariableElement c, Object o) { return throwUOE(); } 207132344Spjd @Override 208132344Spjd public String visitFloat(float f, Object o) { return throwUOE(); } 209132344Spjd @Override 210153190Spjd public String visitInt(int i, Object o) { return throwUOE(); } 211153190Spjd @Override 212132344Spjd public String visitLong(long i, Object o) { return throwUOE(); } 213132344Spjd @Override 214132344Spjd public String visitShort(short s, Object o) { return throwUOE(); } 215132344Spjd @Override 216132344Spjd public String visitString(String s, Object o) { return throwUOE(); } 217132344Spjd @Override 218132344Spjd public String visitType(TypeMirror t, Object o) { return throwUOE(); } 219132344Spjd @Override 220132344Spjd public String visitUnknown(AnnotationValue av, Object o) { return throwUOE(); } 221132344Spjd } 222132344Spjd 223132344Spjd private static String throwUOE() { 224132344Spjd throw new UnsupportedOperationException(); 225132344Spjd } 226} 227