blob: ef9d9ab36318b2d4f32d78551508a7c40f47d517 [file] [log] [blame]
// 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 docgen.models.parameter;
import '../exports/mirrors_util.dart' as dart2js_util;
import '../exports/source_mirrors.dart';
import 'annotation.dart';
import 'closure.dart';
import 'doc_gen_type.dart';
import 'library.dart';
import 'mirror_based.dart';
import 'model_helpers.dart';
/// Docgen wrapper around the dart2js mirror for a Dart
/// method/function parameter.
class Parameter extends MirrorBased {
final ParameterMirror mirror;
final String name;
final bool isOptional;
final bool isNamed;
final bool hasDefaultValue;
final DocGenType type;
final String defaultValue;
/// List of the meta annotations on the parameter.
final List<Annotation> annotations;
final Library owningLibrary;
// Only non-null if this parameter is a function declaration.
Closure functionDeclaration;
Parameter(ParameterMirror mirror, Library owningLibrary)
: this.mirror = mirror,
name = dart2js_util.nameOf(mirror),
isOptional = mirror.isOptional,
isNamed = mirror.isNamed,
hasDefaultValue = mirror.hasDefaultValue,
defaultValue = getDefaultValue(mirror),
type = new DocGenType(mirror.type, owningLibrary),
annotations = createAnnotations(mirror, owningLibrary),
owningLibrary = owningLibrary {
if (mirror.type is FunctionTypeMirror) {
functionDeclaration =
new Closure(mirror.type as FunctionTypeMirror, owningLibrary);
}
}
/// Generates a map describing the [Parameter] object.
Map toMap() {
var map = {
'name': name,
'optional': isOptional,
'named': isNamed,
'default': hasDefaultValue,
'type': new List.filled(1, type.toMap()),
'value': defaultValue,
'annotations': annotations.map((a) => a.toMap()).toList()
};
if (functionDeclaration != null) {
map['functionDeclaration'] = functionDeclaration.toMap();
}
return map;
}
}