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

Unified Diff: dart/compiler/java/com/google/dart/compiler/resolver/ResolutionContext.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/ResolutionContext.java
diff --git a/dart/compiler/java/com/google/dart/compiler/resolver/ResolutionContext.java b/dart/compiler/java/com/google/dart/compiler/resolver/ResolutionContext.java
deleted file mode 100644
index c1522c3a7a09305d0fc3dbf31933b37f8e2b5712..0000000000000000000000000000000000000000
--- a/dart/compiler/java/com/google/dart/compiler/resolver/ResolutionContext.java
+++ /dev/null
@@ -1,408 +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.dart.compiler.DartCompilationError;
-import com.google.dart.compiler.DartCompilerContext;
-import com.google.dart.compiler.ErrorCode;
-import com.google.dart.compiler.ErrorSeverity;
-import com.google.dart.compiler.PackageLibraryManager;
-import com.google.dart.compiler.Source;
-import com.google.dart.compiler.SubSystem;
-import com.google.dart.compiler.ast.ASTVisitor;
-import com.google.dart.compiler.ast.DartClassTypeAlias;
-import com.google.dart.compiler.ast.DartFunctionExpression;
-import com.google.dart.compiler.ast.DartFunctionTypeAlias;
-import com.google.dart.compiler.ast.DartIdentifier;
-import com.google.dart.compiler.ast.DartNode;
-import com.google.dart.compiler.ast.DartPropertyAccess;
-import com.google.dart.compiler.ast.DartSyntheticErrorIdentifier;
-import com.google.dart.compiler.ast.DartTypeNode;
-import com.google.dart.compiler.ast.LibraryUnit;
-import com.google.dart.compiler.ast.Modifiers;
-import com.google.dart.compiler.common.HasSourceInfo;
-import com.google.dart.compiler.common.SourceInfo;
-import com.google.dart.compiler.parser.DartParser;
-import com.google.dart.compiler.type.InterfaceType;
-import com.google.dart.compiler.type.Type;
-import com.google.dart.compiler.type.TypeKind;
-import com.google.dart.compiler.type.TypeVariable;
-import com.google.dart.compiler.type.Types;
-
-import java.util.Arrays;
-import java.util.List;
-
-
-/**
- * Resolution context for resolution of Dart programs. The initial context is
- * derived from the library scope, which is then extended with class scope,
- * method scope, and block scope as the program is traversed.
- */
-@VisibleForTesting
-public class ResolutionContext implements ResolutionErrorListener {
- private Scope scope;
- private final DartCompilerContext context;
- private final CoreTypeProvider typeProvider;
- private final boolean suppressSdkWarnings;
-
- ResolutionContext(String name, LibraryElement library, DartCompilerContext context,
- CoreTypeProvider typeProvider) {
- this(new Scope(name, library), context, typeProvider);
- }
-
- @VisibleForTesting
- public ResolutionContext(Scope scope, DartCompilerContext context,
- CoreTypeProvider typeProvider) {
- this.scope = scope;
- this.context = context;
- this.typeProvider = typeProvider;
- this.suppressSdkWarnings = context.getCompilerConfiguration().getCompilerOptions()
- .suppressSdkWarnings();
- }
-
- ResolutionContext(LibraryUnit unit, DartCompilerContext context, CoreTypeProvider typeProvider) {
- this(unit.getElement().getScope(), context, typeProvider);
- }
-
- @VisibleForTesting
- public ResolutionContext extend(ClassElement element) {
- return new ResolutionContext(new ClassScope(element, scope), context, typeProvider);
- }
-
- ResolutionContext extend(String name) {
- return new ResolutionContext(new Scope(name, scope.getLibrary(), scope), context, typeProvider);
- }
-
- Scope getScope() {
- return scope;
- }
-
- void declare(Element element, ErrorCode errorCode) {
- String name = element.getName();
- Element existingLocalElement = scope.findLocalElement(name);
- // Check for duplicate declaration in the same scope.
- if (existingLocalElement != null && errorCode != null) {
- SourceInfo nameSourceInfo = element.getNameLocation();
- String existingLocation = Elements.getRelativeElementLocation(element, existingLocalElement);
- onError(nameSourceInfo, errorCode, name, existingLocation);
- }
- // Declare, may be hide existing element.
- scope.declareElement(name, element);
- }
-
- void pushScope(String name) {
- scope = new Scope(name, scope.getLibrary(), scope);
- }
-
- void popScope() {
- scope = scope.getParent();
- }
-
- /**
- * Returns <code>true</code> if the type is dynamic or an interface type where
- * {@link ClassElement#isInterface()} equals <code>isInterface</code>.
- */
- private boolean isInterfaceEquals(Type type, boolean isInterface) {
- switch (type.getKind()) {
- case DYNAMIC:
- // Considered to be a match.
- return true;
-
- case INTERFACE:
- InterfaceType interfaceType = (InterfaceType) type;
- ClassElement element = interfaceType.getElement();
- return (element != null && element.isInterface() == isInterface);
-
- default:
- break;
- }
-
- return false;
- }
-
- /**
- * Returns <code>true</code> if the type is dynamic or is a class type.
- */
- private boolean isClassType(Type type) {
- return isInterfaceEquals(type, false);
- }
-
- /**
- * Returns <code>true</code> if the type is a class or interface type.
- */
- private boolean isClassOrInterfaceType(Type type) {
- return type.getKind() == TypeKind.INTERFACE
- && ((InterfaceType) type).getElement() != null;
- }
-
- /**
- * To resolve the class<typeparameters?> specified for extends on a class definition.
- */
- InterfaceType resolveClass(DartTypeNode node, boolean isStatic, boolean isFactory) {
- if (node == null) {
- return null;
- }
-
- Type type = resolveType(node, isStatic, isFactory, false, ResolverErrorCode.NO_SUCH_TYPE,
- ResolverErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS);
- if (!isClassType(type)) {
- onError(node.getIdentifier(), ResolverErrorCode.NOT_A_CLASS, type);
- type = typeProvider.getDynamicType();
- }
-
- node.setType(type);
- return (InterfaceType) type;
- }
-
- InterfaceType resolveInterface(DartTypeNode node, boolean isStatic, boolean isFactory) {
- Type type = resolveType(node, isStatic, isFactory, false,
- ResolverErrorCode.NO_SUCH_TYPE, ResolverErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS);
- if (type.getKind() != TypeKind.DYNAMIC && !isClassOrInterfaceType(type)) {
- onError(node.getIdentifier(), ResolverErrorCode.NOT_A_CLASS_OR_INTERFACE, type);
- type = typeProvider.getDynamicType();
- }
-
- node.setType(type);
- return (InterfaceType) type;
- }
-
- Type resolveType(DartTypeNode node, boolean isStatic, boolean isFactory, boolean isAnnotation,
- ErrorCode errorCode, ErrorCode wrongNumberErrorCode) {
- if (node == null) {
- return null;
- } else {
- Type type = resolveType(node, node.getIdentifier(), node.getTypeArguments(), isStatic,
- isFactory, isAnnotation, errorCode, wrongNumberErrorCode);
- recordTypeIdentifier(node.getIdentifier(), type.getElement());
- return type;
- }
- }
-
- protected <E extends Element> E recordTypeIdentifier(DartNode node, E element) {
- node.getClass();
- if (node instanceof DartPropertyAccess) {
- recordTypeIdentifier(((DartPropertyAccess)node).getQualifier(),
- element.getEnclosingElement());
- return recordTypeIdentifier(((DartPropertyAccess)node).getName(), element);
- } else if (node instanceof DartIdentifier) {
- if (element == null) {
- // TypeAnalyzer will diagnose unresolved identifiers.
- return null;
- }
- node.setElement(element);
- } else {
- throw internalError(node, "Unexpected node: %s", node);
- }
- return element;
- }
-
- Type resolveType(DartNode diagnosticNode, DartNode identifier, List<DartTypeNode> typeArguments,
- boolean isStatic, boolean isFactory, boolean isAnnotation, ErrorCode errorCode,
- ErrorCode wrongNumberErrorCode) {
- // Built-in identifier can not be used as a type annotation.
- if (identifier instanceof DartIdentifier) {
- String name = ((DartIdentifier) identifier).getName();
- if (DartParser.PSEUDO_KEYWORDS_SET.contains(name) && !"dynamic".equals(name)
- && typeArguments.isEmpty()) {
- onError(identifier, ResolverErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, name);
- return Types.newDynamicType();
- }
- }
- // OK, valid name for type.
- Element element = resolveName(identifier);
- ElementKind elementKind = ElementKind.of(element);
- switch (elementKind) {
- case TYPE_VARIABLE: {
- TypeVariableElement typeVariableElement = (TypeVariableElement) element;
- if (!isFactory && isStatic &&
- typeVariableElement.getDeclaringElement().getKind().equals(ElementKind.CLASS)) {
- onError(identifier, ResolverErrorCode.TYPE_VARIABLE_IN_STATIC_CONTEXT, identifier);
- return typeProvider.getDynamicType();
- }
- return makeTypeVariable(typeVariableElement, typeArguments);
- }
- case CLASS:
- case FUNCTION_TYPE_ALIAS:
- case DYNAMIC:
- return instantiateParameterizedType(
- (ClassElement) element,
- diagnosticNode,
- typeArguments,
- isStatic,
- isFactory,
- errorCode,
- wrongNumberErrorCode);
- case DUPLICATE: {
- DuplicateElement duplicateElement = (DuplicateElement) element;
- List<String> locations = duplicateElement.getLocations();
- ResolverErrorCode duplicateErrorCode;
- if (isAnnotation) {
- duplicateErrorCode = ResolverErrorCode.DUPLICATE_IMPORTED_NAME_TYPE;
- } else {
- duplicateErrorCode = ResolverErrorCode.DUPLICATE_IMPORTED_NAME;
- }
- onError(identifier, duplicateErrorCode, element.getName(), locations.size(), locations);
- return typeProvider.getDynamicType();
- }
- case VOID:
- return typeProvider.getVoidType();
- case NONE:
- onError(identifier, errorCode, identifier);
- return typeProvider.getDynamicType();
- default:
- if (!(identifier instanceof DartSyntheticErrorIdentifier)) {
- if (errorCode.getSubSystem().equals(SubSystem.RESOLVER)) {
- onError(identifier, ResolverErrorCode.NOT_A_TYPE, identifier, elementKind);
- } else {
- onError(identifier, TypeErrorCode.NOT_A_TYPE, identifier, elementKind);
- }
- }
- return typeProvider.getDynamicType();
- }
- }
-
- InterfaceType instantiateParameterizedType(ClassElement element, DartNode node,
- List<DartTypeNode> typeArgumentNodes,
- boolean isStatic,
- boolean isFactory,
- ErrorCode errorCode,
- ErrorCode wrongNumberErrorCode) {
- List<Type> typeParameters = element.getTypeParameters();
- Type[] typeArguments;
- if (typeArgumentNodes == null || typeArgumentNodes.size() != typeParameters.size()) {
- typeArguments = new Type[typeParameters.size()];
- for (int i = 0; i < typeArguments.length; i++) {
- typeArguments[i] = typeProvider.getDynamicType();
- }
- if (typeArgumentNodes != null && typeArgumentNodes.size() > 0) {
- onError(node, wrongNumberErrorCode, element.getType(), typeArgumentNodes.size(), typeParameters.size());
- }
- int index = 0;
- if (typeArgumentNodes != null) {
- for (DartTypeNode typeNode : typeArgumentNodes) {
- Type type = resolveType(typeNode, isStatic, isFactory, false, errorCode,
- wrongNumberErrorCode);
- typeNode.setType(type);
- if (index < typeArguments.length) {
- typeArguments[index] = type;
- }
- index++;
- }
- }
- } else {
- typeArguments = new Type[typeArgumentNodes.size()];
- for (int i = 0; i < typeArguments.length; i++) {
- typeArguments[i] = resolveType(typeArgumentNodes.get(i), isStatic, isFactory, false, errorCode,
- wrongNumberErrorCode);
- typeArgumentNodes.get(i).setType(typeArguments[i]);
- }
- }
- return element.getType().subst(Arrays.asList(typeArguments), typeParameters);
- }
-
- private TypeVariable makeTypeVariable(TypeVariableElement element,
- List<DartTypeNode> typeArguments) {
- for (DartTypeNode typeArgument : typeArguments) {
- onError(typeArgument, ResolverErrorCode.EXTRA_TYPE_ARGUMENT);
- }
- return element.getTypeVariable();
- }
-
- /*
- * Interpret this node as a name reference,
- */
- Element resolveName(DartNode node) {
- Element result = node.accept(new Selector());
- if (result == null) {
- if (Elements.isIdentifierName(node, "void")) {
- return typeProvider.getVoidType().getElement();
- }
- if (Elements.isIdentifierName(node, "dynamic")) {
- return typeProvider.getDynamicType().getElement();
- }
- }
- return result;
- }
-
- MethodElement declareFunction(DartFunctionExpression node) {
- MethodElement element = Elements.methodFromFunctionExpression(node, Modifiers.NONE);
- if (node.getFunctionName() != null) {
- declare(
- element,
- ResolverErrorCode.DUPLICATE_FUNCTION_EXPRESSION);
- }
- return element;
- }
-
- void pushFunctionScope(DartFunctionExpression x) {
- pushScope(x.getFunctionName() == null ? "<function>" : x.getFunctionName());
- }
-
- void pushFunctionAliasScope(DartFunctionTypeAlias x) {
- pushScope(x.getName().getName() == null ? "<function>" : x.getName().getName());
- }
-
- void pushClassAliasScope(DartClassTypeAlias x) {
- pushScope(x.getName().getName() == null ? "<classTypeAlias>" : x.getName().getName());
- }
-
- AssertionError internalError(HasSourceInfo node, String message, Object... arguments) {
- message = String.format(message, arguments);
- context.onError(new DartCompilationError(node, ResolverErrorCode.INTERNAL_ERROR,
- message));
- return new AssertionError("Internal error: " + message);
- }
-
- @Override
- public void onError(HasSourceInfo hasSourceInfo, ErrorCode errorCode, Object... arguments) {
- onError(hasSourceInfo.getSourceInfo(), errorCode, arguments);
- }
-
- public void onError(SourceInfo sourceInfo, ErrorCode errorCode, Object... arguments) {
- if (suppressSdkWarnings) {
- ErrorSeverity errorSeverity = errorCode.getErrorSeverity();
- if (errorSeverity == ErrorSeverity.WARNING || errorSeverity == ErrorSeverity.INFO) {
- Source source = sourceInfo.getSource();
- if (source != null && PackageLibraryManager.isDartUri(source.getUri())) {
- return;
- }
- }
- }
- context.onError(new DartCompilationError(sourceInfo, errorCode, arguments));
- }
-
- class Selector extends ASTVisitor<Element> {
- @Override
- public Element visitNode(DartNode node) {
- throw internalError(node, "Unexpected node: %s", node);
- }
-
- @Override
- public Element visitPropertyAccess(DartPropertyAccess node) {
- Element element = node.getQualifier().accept(this);
- if (element != null) {
- switch (element.getKind()) {
- case LIBRARY_PREFIX :
- Scope elementScope = ((LibraryPrefixElement) element).getScope();
- return elementScope.findElement(scope.getLibrary(), node.getPropertyName());
- case CLASS :
- return Elements.findElement((ClassElement) element, node.getPropertyName());
- }
- }
- return null;
- }
-
- @Override
- public Element visitIdentifier(DartIdentifier node) {
- String name = node.getName();
- return scope.findElement(scope.getLibrary(), name);
- }
-
- @Override
- public Element visitSyntheticErrorIdentifier(DartSyntheticErrorIdentifier node) {
- return Elements.dynamicElement();
- }
- }
-}

Powered by Google App Engine
This is Rietveld 408576698