|  | // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | library mirrors.visitor; | 
|  |  | 
|  | import 'dart:mirrors'; | 
|  |  | 
|  | abstract class MirrorsVisitor { | 
|  | visitMirror(Mirror mirror) { | 
|  | if (mirror == null) return; | 
|  |  | 
|  | if (mirror is FunctionTypeMirror) { | 
|  | visitFunctionTypeMirror(mirror); | 
|  | } else if (mirror is ClassMirror) { | 
|  | visitClassMirror(mirror); | 
|  | } else if (mirror is TypedefMirror) { | 
|  | visitTypedefMirror(mirror); | 
|  | } else if (mirror is TypeVariableMirror) { | 
|  | visitTypeVariableMirror(mirror); | 
|  | } else if (mirror is TypeMirror) { | 
|  | visitTypeMirror(mirror); | 
|  | } else if (mirror is ParameterMirror) { | 
|  | visitParameterMirror(mirror); | 
|  | } else if (mirror is VariableMirror) { | 
|  | visitVariableMirror(mirror); | 
|  | } else if (mirror is MethodMirror) { | 
|  | visitMethodMirror(mirror); | 
|  | } else if (mirror is LibraryMirror) { | 
|  | visitLibraryMirror(mirror); | 
|  | } else if (mirror is InstanceMirror) { | 
|  | visitInstanceMirror(mirror); | 
|  | } else if (mirror is ObjectMirror) { | 
|  | visitObjectMirror(mirror); | 
|  | } else if (mirror is DeclarationMirror) { | 
|  | visitDeclarationMirror(mirror); | 
|  | } else { | 
|  | throw new StateError( | 
|  | 'Unexpected mirror kind ${mirror.runtimeType}: $mirror'); | 
|  | } | 
|  | } | 
|  |  | 
|  | visitClassMirror(ClassMirror mirror) { | 
|  | visitObjectMirror(mirror); | 
|  | visitTypeMirror(mirror); | 
|  | } | 
|  |  | 
|  | visitDeclarationMirror(DeclarationMirror mirror) {} | 
|  |  | 
|  | visitFunctionTypeMirror(FunctionTypeMirror mirror) { | 
|  | visitClassMirror(mirror); | 
|  | } | 
|  |  | 
|  | visitInstanceMirror(InstanceMirror mirror) { | 
|  | visitObjectMirror(mirror); | 
|  | } | 
|  |  | 
|  | visitLibraryMirror(LibraryMirror mirror) { | 
|  | visitObjectMirror(mirror); | 
|  | visitDeclarationMirror(mirror); | 
|  | } | 
|  |  | 
|  | visitMethodMirror(MethodMirror mirror) { | 
|  | visitDeclarationMirror(mirror); | 
|  | } | 
|  |  | 
|  | visitObjectMirror(ObjectMirror mirror) {} | 
|  |  | 
|  | visitParameterMirror(ParameterMirror mirror) { | 
|  | visitVariableMirror(mirror); | 
|  | } | 
|  |  | 
|  | visitTypedefMirror(TypedefMirror mirror) { | 
|  | visitTypeMirror(mirror); | 
|  | } | 
|  |  | 
|  | visitTypeMirror(TypeMirror mirror) { | 
|  | visitDeclarationMirror(mirror); | 
|  | } | 
|  |  | 
|  | visitTypeVariableMirror(TypeVariableMirror mirror) { | 
|  | visitTypeMirror(mirror); | 
|  | } | 
|  |  | 
|  | visitVariableMirror(VariableMirror mirror) { | 
|  | visitDeclarationMirror(mirror); | 
|  | } | 
|  | } |