| // Copyright (c) 2012, 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. |
| |
| package com.google.dart.compiler.ast; |
| |
| import com.google.common.base.Preconditions; |
| import com.google.dart.compiler.resolver.Element; |
| import com.google.dart.compiler.resolver.VariableElement; |
| |
| import java.util.List; |
| |
| /** |
| * Represents a Dart function parameter. |
| */ |
| public class DartParameter extends DartDeclaration<DartExpression> { |
| |
| private VariableElement element; |
| private DartTypeNode typeNode; |
| private final NodeList<DartParameter> functionParameters; |
| private DartExpression defaultExpr; |
| private final Modifiers modifiers; |
| |
| public DartParameter(DartExpression name, |
| DartTypeNode typeNode, |
| List<DartParameter> functionParameters, |
| DartExpression defaultExpr, |
| Modifiers modifiers) { |
| super(name); |
| Preconditions.checkArgument(name instanceof DartIdentifier |
| || name instanceof DartPropertyAccess, "name"); |
| this.typeNode = becomeParentOf(typeNode); |
| if (functionParameters != null) { |
| this.functionParameters = NodeList.create(this); |
| this.functionParameters.addAll(functionParameters); |
| } else { |
| this.functionParameters = null; |
| } |
| this.defaultExpr = becomeParentOf(defaultExpr); |
| this.modifiers = modifiers; |
| } |
| |
| public DartExpression getDefaultExpr() { |
| return defaultExpr; |
| } |
| |
| public String getParameterName() { |
| // TODO(fabiomfv) remove instanceof (http://b/issue?id=4729144) |
| if (getName() instanceof DartIdentifier) { |
| return ((DartIdentifier)getName()).getName(); |
| } |
| return ((DartPropertyAccess)getName()).getPropertyName(); |
| } |
| |
| @Override |
| public VariableElement getElement() { |
| return element; |
| } |
| |
| public List<DartParameter> getFunctionParameters() { |
| return functionParameters; |
| } |
| |
| public DartTypeNode getTypeNode() { |
| return typeNode; |
| } |
| |
| public Modifiers getModifiers() { |
| return modifiers; |
| } |
| |
| public DartNode getQualifier() { |
| if (getName() instanceof DartPropertyAccess) { |
| return ((DartPropertyAccess)getName()).getQualifier(); |
| } |
| return null; |
| } |
| |
| @Override |
| public void setElement(Element element) { |
| this.element = (VariableElement) element; |
| } |
| |
| public void setTypeNode(DartTypeNode typeNode) { |
| this.typeNode = becomeParentOf(typeNode); |
| } |
| |
| @Override |
| public void visitChildren(ASTVisitor<?> visitor) { |
| super.visitChildren(visitor); |
| safelyVisitChild(typeNode, visitor); |
| safelyVisitChild(defaultExpr, visitor); |
| if (functionParameters != null) { |
| functionParameters.accept(visitor); |
| } |
| } |
| |
| @Override |
| public <R> R accept(ASTVisitor<R> visitor) { |
| return visitor.visitParameter(this); |
| } |
| } |