Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(654)

Unified Diff: dart/compiler/java/com/google/dart/compiler/resolver/TopLevelElementBuilder.java

Issue 20722006: Removed compiler/ directory from repository (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: dart/compiler/java/com/google/dart/compiler/resolver/TopLevelElementBuilder.java
diff --git a/dart/compiler/java/com/google/dart/compiler/resolver/TopLevelElementBuilder.java b/dart/compiler/java/com/google/dart/compiler/resolver/TopLevelElementBuilder.java
deleted file mode 100644
index 9e461a1232de21c949289ffd1d8919f2659f9081..0000000000000000000000000000000000000000
--- a/dart/compiler/java/com/google/dart/compiler/resolver/TopLevelElementBuilder.java
+++ /dev/null
@@ -1,323 +0,0 @@
-// 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.annotations.VisibleForTesting;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-import com.google.dart.compiler.DartCompilationError;
-import com.google.dart.compiler.DartCompilerContext;
-import com.google.dart.compiler.DartCompilerListener;
-import com.google.dart.compiler.ErrorCode;
-import com.google.dart.compiler.ast.ASTVisitor;
-import com.google.dart.compiler.ast.DartClass;
-import com.google.dart.compiler.ast.DartClassTypeAlias;
-import com.google.dart.compiler.ast.DartField;
-import com.google.dart.compiler.ast.DartFieldDefinition;
-import com.google.dart.compiler.ast.DartFunctionTypeAlias;
-import com.google.dart.compiler.ast.DartIdentifier;
-import com.google.dart.compiler.ast.DartLibraryDirective;
-import com.google.dart.compiler.ast.DartMethodDefinition;
-import com.google.dart.compiler.ast.DartNode;
-import com.google.dart.compiler.ast.DartTypeParameter;
-import com.google.dart.compiler.ast.DartUnit;
-import com.google.dart.compiler.ast.LibraryExport;
-import com.google.dart.compiler.ast.LibraryImport;
-import com.google.dart.compiler.ast.LibraryUnit;
-import com.google.dart.compiler.ast.Modifiers;
-import com.google.dart.compiler.common.SourceInfo;
-import com.google.dart.compiler.type.Type;
-import com.google.dart.compiler.type.TypeVariable;
-import com.google.dart.compiler.type.Types;
-import com.google.dart.compiler.util.apache.StringUtils;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Builds all class elements and types of a library. Once all libraries
- * of an application have built their types, the library scope per
- * library can be computed.
- */
-public class TopLevelElementBuilder {
-
- public void exec(LibraryUnit library, DartCompilerContext context) {
- assert library.getElement().getScope().isClear();
- for (DartUnit unit : library.getUnits()) {
- unit.accept(new Builder(library.getElement()));
- }
- }
-
- public void exec(LibraryUnit library, DartUnit unit, DartCompilerContext context) {
- unit.accept(new Builder(library.getElement()));
- }
-
- public void exec(LibraryUnit library, DartClass cls, DartCompilerContext context) {
- cls.accept(new Builder(library.getElement()));
- }
-
- /**
- * Fill the scope for this library, using its own top-level elements and elements from imported
- * libraries.
- */
- public void fillInLibraryScope(LibraryUnit library, DartCompilerListener listener) {
- fillInLibraryScope(library, listener, Sets.newHashSet());
- }
-
- /**
- * Fill the scope for this library, using its own top-level elements and elements from imported
- * libraries.
- */
- private void fillInLibraryScope(LibraryUnit library, DartCompilerListener listener,
- Set<Object> processedObjects) {
- Scope importScope = library.getElement().getImportScope();
- Scope scope = library.getElement().getScope();
-
- // We are done with this library.
- if (library.getElement().getScope().isStateReady()) {
- return;
- }
-
- // Fill "library" scope.
- if (processedObjects.add(library)) {
- List<Element> exportedElements = Lists.newArrayList();
- {
- DartUnit selfUnit = library.getSelfDartUnit();
- if (selfUnit != null && !selfUnit.getDirectives().isEmpty()
- && selfUnit.getDirectives().get(0) instanceof DartLibraryDirective) {
- DartLibraryDirective libraryDirective = (DartLibraryDirective) selfUnit.getDirectives().get(
- 0);
- if (!libraryDirective.isObsoleteFormat()) {
- String name = libraryDirective.getLibraryName();
- if (name != null) {
- String elementName = "__library_" + name;
- scope.declareElement(elementName, library.getElement());
- }
- }
- }
- }
- for (DartUnit unit : library.getUnits()) {
- fillInUnitScope(unit, listener, scope, exportedElements);
- }
- // Remember exported elements.
- for (Element exportedElement : exportedElements) {
- Elements.addExportedElement(library.getElement(), exportedElement);
- }
- }
-
- // Fill "import" scope.
- Map<String, LibraryPrefixElement> libraryPrefixElements = Maps.newHashMap();
- for (LibraryImport libraryImport : library.getImports()) {
- if (!processedObjects.add(libraryImport)) {
- continue;
- }
- LibraryUnit lib = libraryImport.getLibrary();
- // Prepare scope for this import.
- Scope scopeForImport;
- String prefix = libraryImport.getPrefix();
- {
- if (prefix != null) {
- // Put the prefix in the scope.
- LibraryPrefixElement libraryPrefixElement = libraryPrefixElements.get(prefix);
- if (libraryPrefixElement == null) {
- libraryPrefixElement = new LibraryPrefixElementImplementation(prefix, scope);
- libraryPrefixElements.put(prefix, libraryPrefixElement);
- Element existingElement = scope.declareElement(prefix, libraryPrefixElement);
- // Check for conflict between import prefix and top-level element.
- if (existingElement != null) {
- listener.onError(new DartCompilationError(existingElement.getNameLocation(),
- ResolverErrorCode.CANNOT_HIDE_IMPORT_PREFIX, prefix));
- }
- }
- libraryPrefixElement.addLibrary(lib.getElement());
- // Fill prefix scope.
- scopeForImport = libraryPrefixElement.getScope();
- } else {
- scopeForImport = importScope;
- }
- }
- // Prepare "lib" scope.
- fillInLibraryScope(lib, listener, processedObjects);
- // Fill "library" scope with element exported from "lib".
- for (Element element : lib.getElement().getExportedElements()) {
- String name = element.getName();
- if (libraryImport.isVisible(name)) {
- Element oldElement = scopeForImport.declareElement(name, element);
- if (oldElement != null) {
- scopeForImport.declareElement(name,
- Elements.createDuplicateElement(oldElement, element));
- }
- }
- }
- }
-
- // Fill "library" export scope with re-exports.
- for (LibraryExport export : library.getExports()) {
- if (!processedObjects.add(export)) {
- continue;
- }
- LibraryUnit lib = export.getLibrary();
- fillInLibraryScope(lib, listener, processedObjects);
- for (Element element : lib.getElement().getExportedElements()) {
- String name = element.getName();
- // re-export only if not defined locally
- if (scope.findLocalElement(name) != null) {
- continue;
- }
- // check if show/hide combinators of "export" are satisfied
- if (!export.isVisible(name)) {
- continue;
- }
- // do export
- Element oldElement = Elements.addExportedElement(library.getElement(), element);
- if (oldElement != null && oldElement.getEnclosingElement() instanceof LibraryElement) {
- LibraryElement oldLibrary = (LibraryElement) oldElement.getEnclosingElement();
- SourceInfo sourceInfo = export.getSourceInfo();
- if (sourceInfo != null) {
- String oldLibraryName = oldLibrary.getLibraryUnit().getName();
- listener.onError(new DartCompilationError(sourceInfo,
- ResolverErrorCode.DUPLICATE_EXPORTED_NAME, Elements.getUserElementTitle(oldElement),
- oldLibraryName));
- }
- }
- }
- }
-
- // Done.
- library.getElement().getScope().markStateReady();
- }
-
- @VisibleForTesting
- public void fillInUnitScope(DartUnit unit, DartCompilerListener listener, Scope scope,
- List<Element> exportedElements) {
- for (DartNode node : unit.getTopLevelNodes()) {
- if (node instanceof DartFieldDefinition) {
- for (DartField field : ((DartFieldDefinition) node).getFields()) {
- declareNodeInScope(field, listener, scope, exportedElements);
- }
- } else {
- declareNodeInScope(node, listener, scope, exportedElements);
- }
- }
- }
-
- void declareNodeInScope(DartNode node, DartCompilerListener listener, Scope scope,
- List<Element> exportedElements) {
- Element element = node.getElement();
- String name = element.getName();
- declare(element, listener, scope);
- if (exportedElements != null && !DartIdentifier.isPrivateName(name)) {
- exportedElements.add(element);
- }
- }
-
- private static void compilationError(DartCompilerListener listener, SourceInfo node, ErrorCode errorCode,
- Object... args) {
- DartCompilationError error = new DartCompilationError(node, errorCode, args);
- listener.onError(error);
- }
-
- private void declare(Element newElement, DartCompilerListener listener, Scope scope) {
- String name = newElement.getName();
- Element oldElement = scope.findLocalElement(name);
- if (oldElement == null && newElement instanceof FieldElement) {
- FieldElement eField = (FieldElement) newElement;
- if (!eField.getModifiers().isAbstractField()) {
- oldElement = scope.findLocalElement("setter " + name);
- }
- if (eField.getModifiers().isAbstractField()
- && StringUtils.startsWith(name, "setter ")) {
- Element other2 = scope.findLocalElement(StringUtils.removeStart(name, "setter "));
- if (other2 instanceof FieldElement) {
- FieldElement otherField = (FieldElement) other2;
- if (!otherField.getModifiers().isAbstractField()) {
- oldElement = otherField;
- }
- }
- }
- }
- if (oldElement != null) {
- reportDuplicateDeclaration(listener, oldElement, newElement);
- reportDuplicateDeclaration(listener, newElement, oldElement);
- }
- scope.declareElement(name, newElement);
- }
-
- /**
- * Reports {@link ResolverErrorCode#DUPLICATE_TOP_LEVEL_DECLARATION} for given named element.
- */
- private void reportDuplicateDeclaration(DartCompilerListener listener, Element element,
- Element otherElement) {
- compilationError(listener, element.getNameLocation(),
- ResolverErrorCode.DUPLICATE_TOP_LEVEL_DECLARATION,
- Elements.getUserElementTitle(otherElement),
- Elements.getRelativeElementLocation(element, otherElement));
- }
-
- /**
- * Creates a ClassElement for a class.
- */
- private class Builder extends ASTVisitor<Void> {
-
- private LibraryElement library;
-
- public Builder(LibraryElement library) {
- this.library = library;
- }
-
- @Override
- public Void visitClass(DartClass node) {
- ClassElement element = Elements.classFromNode(node, library);
- List<DartTypeParameter> parameterNodes = node.getTypeParameters();
- List<TypeVariable> typeVariables = Elements.makeTypeVariables(parameterNodes, element);
- element.setType(Types.interfaceType(
- element,
- Collections.<Type>unmodifiableList(typeVariables)));
- node.setElement(element);
- node.getName().setElement(element);
- return null;
- }
-
- @Override
- public Void visitClassTypeAlias(DartClassTypeAlias node) {
- ClassAliasElement element = Elements.classFromNode(node, library);
- List<DartTypeParameter> parameterNodes = node.getTypeParameters();
- List<TypeVariable> typeVariables = Elements.makeTypeVariables(parameterNodes, element);
- element.setType(Types.interfaceType(
- element,
- Collections.<Type>unmodifiableList(typeVariables)));
- node.setElement(element);
- node.getName().setElement(element);
- return null;
- }
-
- @Override
- public Void visitFunctionTypeAlias(DartFunctionTypeAlias node) {
- FunctionAliasElement element = Elements.functionTypeAliasFromNode(node, library);
- List<DartTypeParameter> parameterNodes = node.getTypeParameters();
- element.setType(Types.functionAliasType(element,
- Elements.makeTypeVariables(parameterNodes, element)));
- node.getName().setElement(element);
- node.setElement(element);
- return null;
- }
-
- @Override
- public Void visitMethodDefinition(DartMethodDefinition node) {
- node.setElement(Elements.methodFromMethodNode(node, library));
- return null;
- }
-
- @Override
- public Void visitField(DartField node) {
- Modifiers modifiers = node.getModifiers();
- node.setElement(Elements.fieldFromNode(node, library, node.getObsoleteMetadata(), modifiers));
- return null;
- }
- }
-}

Powered by Google App Engine
This is Rietveld 408576698