mirror of
https://github.com/dart-lang/sdk
synced 2024-09-21 07:41:39 +00:00
Build GenericFunctionTypeElementImpl in both ApiElementBuilder and LocalElementBuilder.
R=brianwilkerson@google.com BUG= Review-Url: https://codereview.chromium.org/2809423003 .
This commit is contained in:
parent
d2a1bdff4a
commit
2143087734
|
@ -397,22 +397,6 @@ class ApiElementBuilder extends _BaseElementBuilder {
|
|||
return null;
|
||||
}
|
||||
|
||||
@override
|
||||
Object visitGenericFunctionType(GenericFunctionType node) {
|
||||
ElementHolder holder = new ElementHolder();
|
||||
_visitChildren(holder, node);
|
||||
GenericFunctionTypeElementImpl element =
|
||||
new GenericFunctionTypeElementImpl.forOffset(node.beginToken.offset);
|
||||
_setCodeRange(element, node);
|
||||
element.parameters = holder.parameters;
|
||||
element.typeParameters = holder.typeParameters;
|
||||
FunctionType type = new FunctionTypeImpl(element);
|
||||
element.type = type;
|
||||
(node as GenericFunctionTypeImpl).type = type;
|
||||
holder.validate();
|
||||
return null;
|
||||
}
|
||||
|
||||
@override
|
||||
Object visitGenericTypeAlias(GenericTypeAlias node) {
|
||||
ElementHolder holder = new ElementHolder();
|
||||
|
@ -1480,6 +1464,22 @@ abstract class _BaseElementBuilder extends RecursiveAstVisitor<Object> {
|
|||
return null;
|
||||
}
|
||||
|
||||
@override
|
||||
Object visitGenericFunctionType(GenericFunctionType node) {
|
||||
ElementHolder holder = new ElementHolder();
|
||||
_visitChildren(holder, node);
|
||||
GenericFunctionTypeElementImpl element =
|
||||
new GenericFunctionTypeElementImpl.forOffset(node.beginToken.offset);
|
||||
_setCodeRange(element, node);
|
||||
element.parameters = holder.parameters;
|
||||
element.typeParameters = holder.typeParameters;
|
||||
FunctionType type = new FunctionTypeImpl(element);
|
||||
element.type = type;
|
||||
(node as GenericFunctionTypeImpl).type = type;
|
||||
holder.validate();
|
||||
return null;
|
||||
}
|
||||
|
||||
@override
|
||||
Object visitSimpleFormalParameter(SimpleFormalParameter node) {
|
||||
ParameterElementImpl parameter;
|
||||
|
|
|
@ -1114,6 +1114,19 @@ main() {
|
|||
expect(variableElement.initializer, isNotNull);
|
||||
}
|
||||
|
||||
void test_genericFunction_isExpression() {
|
||||
buildElementsForText('main(p) { p is Function(int a, String); }');
|
||||
var main = compilationUnit.declarations[0] as FunctionDeclaration;
|
||||
var body = main.functionExpression.body as BlockFunctionBody;
|
||||
var statement = body.block.statements[0] as ExpressionStatement;
|
||||
var expression = statement.expression as IsExpression;
|
||||
var typeNode = expression.type as GenericFunctionType;
|
||||
var typeElement = typeNode.type.element as GenericFunctionTypeElementImpl;
|
||||
expect(typeElement.parameters, hasLength(2));
|
||||
expect(typeElement.parameters[0].name, 'a');
|
||||
expect(typeElement.parameters[1].name, '');
|
||||
}
|
||||
|
||||
void test_visitDefaultFormalParameter_local() {
|
||||
CompilationUnit unit = parseCompilationUnit('''
|
||||
main() {
|
||||
|
@ -1221,6 +1234,16 @@ abstract class _ApiElementBuilderTestMixin {
|
|||
*/
|
||||
void checkMetadata(Element element);
|
||||
|
||||
void test_genericFunction_asTopLevelVariableType() {
|
||||
buildElementsForText('int Function(int a, String) v;');
|
||||
var v = compilationUnit.declarations[0] as TopLevelVariableDeclaration;
|
||||
var typeNode = v.variables.type as GenericFunctionType;
|
||||
var typeElement = typeNode.type.element as GenericFunctionTypeElementImpl;
|
||||
expect(typeElement.parameters, hasLength(2));
|
||||
expect(typeElement.parameters[0].name, 'a');
|
||||
expect(typeElement.parameters[1].name, '');
|
||||
}
|
||||
|
||||
void test_metadata_fieldDeclaration() {
|
||||
List<FieldElement> fields =
|
||||
buildElementsForText('class C { @a int x, y; }').types[0].fields;
|
||||
|
|
Loading…
Reference in a new issue