blob: ea4d530e8a0311f862d5ffcac215969f2b653e27 [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.common.collect.Lists;
import com.google.dart.compiler.ast.DartObsoleteMetadata;
import com.google.dart.compiler.ast.LibraryUnit;
import java.util.Collection;
import java.util.List;
class LibraryElementImplementation extends AbstractNodeElement implements LibraryElement {
private final Scope importScope = new Scope("import", this);
private final Scope scope = new Scope("library", this, importScope);
private final List<Element> exportedElements = Lists.newArrayList();
private LibraryUnit libraryUnit;
private MethodElement entryPoint;
private DartObsoleteMetadata metadata;
public LibraryElementImplementation(LibraryUnit libraryUnit) {
// TODO(ngeoffray): What should we pass the super? Should a LibraryUnit be a node?
super(null, libraryUnit.getSource().getName());
this.libraryUnit = libraryUnit;
}
@Override
public boolean isInterface() {
return false;
}
@Override
public Scope getImportScope() {
return importScope;
}
@Override
public Scope getScope() {
return scope;
}
public void addExportedElements(Element element) {
exportedElements.add(element);
}
public List<Element> getExportedElements() {
return exportedElements;
}
@Override
public ElementKind getKind() {
return ElementKind.LIBRARY;
}
@Override
public LibraryUnit getLibraryUnit() {
return libraryUnit;
}
@Override
public void setEntryPoint(MethodElement element) {
this.entryPoint = element;
}
@Override
public MethodElement getEntryPoint() {
return entryPoint;
}
@Override
public Collection<Element> getMembers() {
// TODO(ngeoffray): have a proper way to get all the declared top level elements.
return scope.getElements().values();
}
@Override
public Element lookupLocalElement(String name) {
return scope.findLocalElement(name);
}
void addField(FieldElement field) {
scope.declareElement(field.getName(), field);
}
void addMethod(MethodElement method) {
scope.declareElement(method.getName(), method);
}
@Override
public DartObsoleteMetadata getMetadata() {
return metadata;
}
public void setMetadata(DartObsoleteMetadata metadata) {
this.metadata = metadata;
}
}