blob: 7e67b3c6e5c3b1bb40034e88cbf1d7b6356d774e [file] [log] [blame]
// 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.resolver;
import com.google.dart.compiler.ast.DartExpression;
import com.google.dart.compiler.ast.DartNode;
import com.google.dart.compiler.ast.Modifiers;
import com.google.dart.compiler.common.SourceInfo;
import com.google.dart.compiler.type.Type;
class VariableElementImplementation extends AbstractNodeElement implements VariableElement {
private final EnclosingElement owner;
private final ElementKind kind;
private final Modifiers modifiers;
private final boolean isNamed;
private final DartExpression defaultValue;
private final SourceInfo nameLocation;
// The field element is set for constructor parameters of the form
// this.foo by the resolver.
private FieldElement fieldElement;
private Type type;
VariableElementImplementation(EnclosingElement owner,
DartNode node,
SourceInfo nameLocation,
String name,
ElementKind kind,
Modifiers modifiers,
boolean isNamed,
DartExpression defaultValue) {
super(node, name);
this.owner = owner;
this.isNamed = isNamed;
this.kind = kind;
this.modifiers = modifiers;
this.defaultValue = defaultValue;
this.nameLocation = nameLocation;
}
@Override
public ElementKind getKind() {
return kind;
}
@Override
public SourceInfo getNameLocation() {
return nameLocation;
}
@Override
public Modifiers getModifiers() {
return modifiers;
}
@Override
void setType(Type type) {
this.type = type;
}
@Override
public Type getType() {
return type;
}
@Override
public boolean isOptional() {
return modifiers.isOptional();
}
@Override
public boolean isNamed() {
return isNamed;
}
@Override
public DartExpression getDefaultValue() {
return defaultValue;
}
void setParameterInitializerElement(FieldElement element) {
this.fieldElement = element;
}
@Override
public FieldElement getParameterInitializerElement() {
return fieldElement;
}
@Override
public EnclosingElement getEnclosingElement() {
return owner;
}
}