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

Unified Diff: dart/compiler/java/com/google/dart/compiler/resolver/Elements.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/Elements.java
diff --git a/dart/compiler/java/com/google/dart/compiler/resolver/Elements.java b/dart/compiler/java/com/google/dart/compiler/resolver/Elements.java
deleted file mode 100644
index 36d41c688799f64e07a09eba242025e4abf8290a..0000000000000000000000000000000000000000
--- a/dart/compiler/java/com/google/dart/compiler/resolver/Elements.java
+++ /dev/null
@@ -1,989 +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.base.Objects;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import com.google.dart.compiler.DartSource;
-import com.google.dart.compiler.LibrarySource;
-import com.google.dart.compiler.Source;
-import com.google.dart.compiler.ast.DartClass;
-import com.google.dart.compiler.ast.DartClassMember;
-import com.google.dart.compiler.ast.DartClassTypeAlias;
-import com.google.dart.compiler.ast.DartField;
-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.DartLabel;
-import com.google.dart.compiler.ast.DartMethodDefinition;
-import com.google.dart.compiler.ast.DartNativeBlock;
-import com.google.dart.compiler.ast.DartNode;
-import com.google.dart.compiler.ast.DartObsoleteMetadata;
-import com.google.dart.compiler.ast.DartParameter;
-import com.google.dart.compiler.ast.DartSuperExpression;
-import com.google.dart.compiler.ast.DartTypeNode;
-import com.google.dart.compiler.ast.DartTypeParameter;
-import com.google.dart.compiler.ast.DartVariable;
-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.resolver.LabelElement.LabeledStatementType;
-import com.google.dart.compiler.type.InterfaceType;
-import com.google.dart.compiler.type.InterfaceType.Member;
-import com.google.dart.compiler.type.Type;
-import com.google.dart.compiler.type.TypeVariable;
-import com.google.dart.compiler.util.Paths;
-import com.google.dart.compiler.util.apache.StringUtils;
-
-import java.io.File;
-import java.net.URI;
-import java.text.MessageFormat;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Utility and factory methods for elements.
- */
-public class Elements {
-
- private Elements() {} // Prevent subclassing and instantiation.
-
- static void setParameterInitializerElement(VariableElement varElement, FieldElement element) {
- ((VariableElementImplementation) varElement).setParameterInitializerElement(element);
- }
-
- static void setDefaultClass(ClassElement classElement, InterfaceType defaultClass) {
- ((ClassElementImplementation) classElement).setDefaultClass(defaultClass);
- }
-
- static void addInterface(ClassElement classElement, InterfaceType type) {
- ((ClassElementImplementation) classElement).addInterface(type);
- }
-
- static void addMixin(ClassElement classElement, InterfaceType type) {
- ((ClassElementImplementation) classElement).addMixin(type);
- }
-
- static LabelElement statementLabelElement(DartLabel node, String name,
- MethodElement enclosingFunction) {
- return new LabelElementImplementation(node, name, enclosingFunction,
- LabeledStatementType.STATEMENT);
- }
-
- static LabelElement switchMemberLabelElement(DartLabel node, String name,
- MethodElement enclosingFunction) {
- return new LabelElementImplementation(node, name, enclosingFunction,
- LabeledStatementType.SWITCH_MEMBER_STATEMENT);
- }
-
- static LabelElement switchLabelElement(DartLabel node, String name,
- MethodElement enclosingFunction) {
- return new LabelElementImplementation(node, name, enclosingFunction,
- LabeledStatementType.SWITCH_STATEMENT);
- }
-
- public static LibraryElement libraryElement(LibraryUnit libraryUnit) {
- return new LibraryElementImplementation(libraryUnit);
- }
-
- public static void setLibraryMetadata(LibraryElement element, DartObsoleteMetadata metadata) {
- ((LibraryElementImplementation) element).setMetadata(metadata);
- }
-
- public static Element addExportedElement(LibraryElement libraryElement, Element element) {
- return ((LibraryElementImplementation) libraryElement).addExportedElements(element);
- }
-
- public static LibraryElement getLibraryElement(Element element) {
- while (element != null) {
- if (ElementKind.of(element) == ElementKind.LIBRARY) {
- return (LibraryElement) element;
- }
- EnclosingElement enclosingElement = element.getEnclosingElement();
- if (enclosingElement == element) {
- return null;
- }
- element = enclosingElement;
- };
- return null;
- }
-
- /**
- * @return <code>true</code> if "a" and "b" are declared in the same {@link LibraryElement}.
- */
- public static boolean areSameLibrary(Element a, Element b) {
- LibraryElement aLibrary = getLibraryElement(a);
- LibraryElement bLibrary = getLibraryElement(b);
- return Objects.equal(aLibrary, bLibrary);
- }
-
- @VisibleForTesting
- public static MethodElement methodElement(DartFunctionExpression node, String name) {
- return new MethodElementImplementation(node, name, Modifiers.NONE);
- }
-
- public static TypeVariableElement typeVariableElement(String name, Type bound) {
- return new TypeVariableElementImplementation(name, bound);
- }
-
- public static VariableElement variableElement(EnclosingElement owner,
- DartVariable node,
- String name,
- Modifiers modifiers) {
- return new VariableElementImplementation(owner,
- node,
- node.getName().getSourceInfo(),
- name,
- ElementKind.VARIABLE,
- modifiers,
- false,
- null);
- }
-
- public static VariableElement parameterElement(EnclosingElement owner,
- DartParameter node,
- String name,
- Modifiers modifiers) {
- return new VariableElementImplementation(owner,
- node,
- node.getName().getSourceInfo(),
- name,
- ElementKind.PARAMETER,
- modifiers,
- node.getModifiers().isNamed(),
- node.getDefaultExpr());
- }
-
- public static SuperElement superElement(DartSuperExpression node, ClassElement cls) {
- return new SuperElementImplementation(node, cls);
- }
-
- static void addConstructor(ClassElement cls, ConstructorNodeElement constructor) {
- ((ClassElementImplementation) cls).addConstructor(constructor);
- }
-
- static void addField(EnclosingElement holder, FieldNodeElement field) {
- if (ElementKind.of(holder).equals(ElementKind.CLASS)) {
- ((ClassElementImplementation) holder).addField(field);
- } else if (ElementKind.of(holder).equals(ElementKind.LIBRARY)) {
- ((LibraryElementImplementation) holder).addField(field);
- } else {
- throw new IllegalArgumentException();
- }
- }
-
- @VisibleForTesting
- public static void addMethod(EnclosingElement holder, MethodNodeElement method) {
- if (ElementKind.of(holder).equals(ElementKind.CLASS)) {
- ((ClassElementImplementation) holder).addMethod(method);
- } else if (ElementKind.of(holder).equals(ElementKind.LIBRARY)) {
- ((LibraryElementImplementation) holder).addMethod(method);
- } else {
- throw new IllegalArgumentException();
- }
- }
-
- public static void addParameter(MethodElement method, VariableElement parameter) {
- ((MethodElementImplementation) method).addParameter(parameter);
- }
-
- static Element findElement(EnclosingElement cls, String name) {
- if (cls instanceof ClassElementImplementation) {
- return ((ClassElementImplementation) cls).findElement(name);
- }
- return null;
- }
-
- public static MethodElement methodFromFunctionExpression(DartFunctionExpression node,
- Modifiers modifiers) {
- return MethodElementImplementation.fromFunctionExpression(node, modifiers);
- }
-
- public static MethodNodeElement methodFromMethodNode(DartMethodDefinition node,
- EnclosingElement holder) {
- return MethodElementImplementation.fromMethodNode(node, holder);
- }
-
- static ConstructorNodeElement constructorFromMethodNode(DartMethodDefinition node,
- String name,
- ClassElement declaringClass,
- ClassElement constructorType) {
- return ConstructorElementImplementation.fromMethodNode(node, name, declaringClass,
- constructorType);
- }
-
- public static void setType(Element element, Type type) {
- ((AbstractNodeElement) element).setType(type);
- }
-
- public static void setOverridden(Element element, Set<Element> overridden) {
- if (element instanceof MethodElementImplementation) {
- ((MethodElementImplementation) element).setOverridden(overridden);
- }
- if (element instanceof FieldElementImplementation) {
- ((FieldElementImplementation) element).setOverridden(overridden);
- }
- }
-
-static FieldElementImplementation fieldFromNode(DartField node,
- EnclosingElement holder,
- DartObsoleteMetadata metadata,
- Modifiers modifiers) {
- return FieldElementImplementation.fromNode(node, holder, metadata, modifiers);
- }
-
- static ClassElement classFromNode(DartClass node, LibraryElement library) {
- return ClassElementImplementation.fromNode(node, library);
- }
-
- static ClassAliasElement classFromNode(DartClassTypeAlias node, LibraryElement library) {
- return ClassElementImplementation.fromNode(node, library);
- }
-
- public static ClassElement classNamed(String name) {
- return ClassElementImplementation.named(name);
- }
-
- static TypeVariableElement typeVariableFromNode(DartTypeParameter node, EnclosingElement element) {
- return TypeVariableElementImplementation.fromNode(node, element);
- }
-
- public static DynamicElement dynamicElement() {
- return DynamicElementImplementation.getInstance();
- }
-
- static ConstructorElement lookupConstructor(ClassElement cls, ClassElement type, String name) {
- return ((ClassElementImplementation) cls).lookupConstructor(type, name);
- }
-
- static ConstructorElement lookupConstructor(ClassElement cls, String name) {
- if (cls instanceof ClassElementImplementation) {
- return ((ClassElementImplementation) cls).lookupConstructor(name);
- }
- return null;
- }
-
- public static MethodElement lookupLocalMethod(ClassElement cls, String name) {
- return ((ClassElementImplementation) cls).lookupLocalMethod(name);
- }
-
- public static FieldElement lookupLocalField(ClassElement cls, String name) {
- return ((ClassElementImplementation) cls).lookupLocalField(name);
- }
-
- public static FunctionAliasElement functionTypeAliasFromNode(DartFunctionTypeAlias node,
- LibraryElement library) {
- return FunctionAliasElementImplementation.fromNode(node, library);
- }
-
- /**
- * @return <code>true</code> if given {@link Element} represents {@link VariableElement} for
- * parameter in {@link DartMethodDefinition}.
- */
- public static boolean isConstructorParameter(Element element) {
- Element parent = element.getEnclosingElement();
- if (parent instanceof MethodElement) {
- return ((MethodElement) parent).isConstructor();
- }
- return false;
- }
-
- /**
- * @return <code>true</code> if given {@link Element} represents {@link VariableElement} for
- * parameter in {@link DartMethodDefinition} without body, or with {@link DartNativeBlock}
- * as body.
- */
- public static boolean isParameterOfMethodWithoutBody(Element element) {
- if (element instanceof VariableElement) {
- Element parent = element.getEnclosingElement();
- if (parent instanceof MethodElement) {
- MethodElement parentMethod = (MethodElement) parent;
- return !parentMethod.hasBody();
- }
- }
- return false;
- }
-
- /**
- * @return <code>not-null</code> {@link MethodElement} if "holder", or one of its interfaces, or
- * its superclass has {@link FieldElement} with getter.
- */
- public static MethodElement lookupFieldElementGetter(EnclosingElement holder, String name) {
- MethodElement result = lookupFieldElementGetter0(holder, name);
- if (result != null) {
- return result;
- }
- if (holder instanceof ClassElement) {
- ClassElement classHolder = (ClassElement) holder;
- for (InterfaceType interfaceType : classHolder.getInterfaces()) {
- result = lookupFieldElementGetter(interfaceType.getElement(), name);
- if (result != null) {
- return result;
- }
- }
- for (InterfaceType mixinType : classHolder.getMixins()) {
- result = lookupFieldElementGetter0(mixinType.getElement(), name);
- if (result != null) {
- return result;
- }
- }
- if (classHolder.getSupertype() != null) {
- result = lookupFieldElementGetter(classHolder.getSupertype().getElement(), name);
- if (result != null) {
- return result;
- }
- }
- }
-
- return null;
- }
-
- /**
- * @return the {@link MethodElement} if "holder" has {@link FieldElement} with getter.
- */
- private static MethodElement lookupFieldElementGetter0(EnclosingElement holder, String name) {
- Element element = holder.lookupLocalElement(name);
- if (element instanceof FieldElement) {
- FieldElement fieldElement = (FieldElement) element;
- MethodElement result = fieldElement.getGetter();
- if (result != null) {
- return fieldElement.getGetter();
- }
- }
- return null;
- }
-
- /**
- * @return <code>non-null</code> {@link MethodElement} if "holder", or one of its interfaces, or
- * its superclass has {@link FieldElement} with setter.
- */
- public static MethodElement lookupFieldElementSetter(EnclosingElement holder, String name) {
- MethodElement result = lookupFieldElementSetter0(holder, name);
- if (result != null) {
- return result;
- }
- if (holder instanceof ClassElement) {
- ClassElement classHolder = (ClassElement) holder;
- for (InterfaceType interfaceType : classHolder.getInterfaces()) {
- result = lookupFieldElementSetter(interfaceType.getElement(), name);
- if (result != null) {
- return result;
- }
- }
- for (InterfaceType mixinType : classHolder.getMixins()) {
- result = lookupFieldElementSetter0(mixinType.getElement(), name);
- if (result != null) {
- return result;
- }
- }
- if (classHolder.getSupertype() != null) {
- result = lookupFieldElementSetter(classHolder.getSupertype().getElement(), name);
- if (result != null) {
- return result;
- }
- }
- }
- return null;
- }
-
- /**
- * @return the {@link MethodElement} if "holder" has {@link FieldElement} with setter.
- */
- private static MethodElement lookupFieldElementSetter0(EnclosingElement holder, String name) {
- Element element = holder.lookupLocalElement(name);
- if (element instanceof FieldElement) {
- FieldElement fieldElement = (FieldElement) element;
- MethodElement result = fieldElement.getSetter();
- if (result != null) {
- return result;
- }
- }
- return null;
- }
-
- /**
- * @return <code>true</code> if {@link DartNode} of given {@link Element} if part of static
- * {@link DartClassMember} or part of top level declaration.
- */
- public static boolean isStaticContext(Element element) {
- if (element instanceof ClassElement) {
- return true;
- }
- while (element != null) {
- if (element instanceof MethodElement) {
- MethodElement methodElement = (MethodElement) element;
- return methodElement.isStatic() || methodElement.getEnclosingElement() instanceof LibraryElement;
- }
- if (element instanceof FieldElement) {
- FieldElement fieldElement = (FieldElement) element;
- return fieldElement.isStatic()
- || fieldElement.getEnclosingElement() instanceof LibraryElement;
- }
- if (element instanceof ClassElement) {
- return false;
- }
- element = element.getEnclosingElement();
- }
- return true;
- }
-
- public static boolean isNonFactoryConstructor(Element method) {
- return !method.getModifiers().isFactory()
- && ElementKind.of(method) == ElementKind.CONSTRUCTOR;
- }
-
- public static boolean isTopLevel(Element element) {
- return ElementKind.of(element.getEnclosingElement()) == ElementKind.LIBRARY;
- }
-
- static List<TypeVariable> makeTypeVariables(List<DartTypeParameter> parameterNodes,
- EnclosingElement enclosingElement) {
- if (parameterNodes == null) {
- return Arrays.<TypeVariable>asList();
- }
- TypeVariable[] typeVariables = new TypeVariable[parameterNodes.size()];
- int i = 0;
- for (DartTypeParameter parameterNode : parameterNodes) {
- TypeVariable typeVariable =
- Elements.typeVariableFromNode(parameterNode, enclosingElement).getTypeVariable();
- typeVariables[i++] = typeVariable;
- parameterNode.getName().setElement(typeVariable.getElement());
- }
- return Arrays.asList(typeVariables);
- }
-
- public static Element voidElement() {
- return VoidElement.getInstance();
- }
-
- /**
- * Returns true if the class needs an implicit default constructor.
- */
- public static boolean needsImplicitDefaultConstructor(ClassElement classElement) {
- return classElement.getConstructors().isEmpty()
- && (!classElement.isInterface() || classElement.getDefaultClass() != null);
- }
-
- /**
- * @return <code>true</code> if {@link #classElement} implements {@link #interfaceElement}.
- */
- public static boolean implementsType(ClassElement classElement, ClassElement interfaceElement) {
- try {
- for (InterfaceType supertype : classElement.getAllSupertypes()) {
- if (supertype.getElement().equals(interfaceElement)) {
- return true;
- }
- }
- } catch (Throwable e) {
- }
- return false;
- }
-
- /**
- * @return the "name" or "qualifier.name" raw name of {@link DartMethodDefinition} which
- * corresponds the given {@link MethodElement}.
- */
- public static String getRawMethodName(MethodElement methodElement) {
- if (methodElement instanceof ConstructorElement) {
- ConstructorElement constructorElement = (ConstructorElement) methodElement;
- return constructorElement.getRawName();
- }
- return methodElement.getName();
- }
-
- /**
- * @return the number of required (not optional/named) parameters in given {@link MethodElement}.
- */
- public static int getNumberOfRequiredParameters(MethodElement method) {
- int num = 0;
- List<VariableElement> parameters = method.getParameters();
- for (VariableElement parameter : parameters) {
- if (!parameter.isOptional() && !parameter.isNamed()) {
- num++;
- }
- }
- return num;
- }
-
- /**
- * @return the number of optional positional parameters in given {@link MethodElement}.
- */
- public static int getNumberOfOptionalPositionalParameters(MethodElement method) {
- int num = 0;
- List<VariableElement> parameters = method.getParameters();
- for (VariableElement parameter : parameters) {
- if (parameter.isOptional()) {
- num++;
- }
- }
- return num;
- }
-
- /**
- * @return the names for named parameters in given {@link MethodElement}.
- */
- public static List<String> getNamedParameters(MethodElement method) {
- List<String> names = Lists.newArrayList();
- List<VariableElement> parameters = method.getParameters();
- for (VariableElement parameter : parameters) {
- if (parameter.isNamed()) {
- names.add(parameter.getName());
- }
- }
- return names;
- }
-
- /**
- * @return the names for parameters types in given {@link MethodElement}.
- */
- public static List<String> getParameterTypeNames(MethodElement method) {
- List<String> names = Lists.newArrayList();
- List<VariableElement> parameters = method.getParameters();
- for (VariableElement parameter : parameters) {
- String typeName = parameter.getType().getElement().getName();
- names.add(typeName);
- }
- return names;
- }
-
- /**
- * Prepares title for {@link TypeErrorCode#DEPRECATED_ELEMENT}.
- */
- public static String getDeprecatedElementTitle(Element element) {
- String title = getUserElementTitle(element);
- return StringUtils.capitalize(title);
- }
-
- /**
- * @return the user readable title of the given {@link Element}, a little different than
- * "technical" title returned from {@link Element#toString()}.
- */
- public static String getUserElementTitle(Element element) {
- return MessageFormat.format("{0} ''{1}''", getUserElementKindTitle(element), element.getName());
- }
-
- /**
- * @return the user readable title of the given {@link Element}'s {@link ElementKind}, a little
- * different than "technical" title returned from {@link Element#toString()}.
- */
- private static String getUserElementKindTitle(Element element) {
- ElementKind kind = element.getKind();
- switch (kind) {
- case CLASS:
- if (((ClassElement) element).isInterface()) {
- return "interface";
- }
- break;
- case METHOD:
- if (isTopLevel(element)) {
- return "top-level function";
- }
- break;
- case FIELD:
- if (isTopLevel(element)) {
- return "top-level variable";
- }
- break;
- }
- String title = kind.toString();
- title = StringUtils.replace(title, "_", " ");
- title = title.toLowerCase();
- return title;
- }
-
- /**
- * @return the {@link String} which contains user-readable description of "target" {@link Element}
- * location relative to "source".
- */
- public static String getRelativeElementLocation(Element source, Element target) {
- // Prepare "target" SourceInfo.
- SourceInfo targetInfo;
- {
- targetInfo = target.getNameLocation();
- if (targetInfo == null) {
- return "unknown";
- }
- }
- // Prepare path to the target unit from source unit.
- String targetPath;
- {
- SourceInfo sourceInfo = source.getSourceInfo();
- targetPath = getRelativeSourcePath(sourceInfo, targetInfo);
- }
- // Prepare (may be empty) target class name.
- String targetClassName;
- {
- EnclosingElement targetEnclosing = target.getEnclosingElement();
- ClassElement targetClass = getEnclosingClassElement(targetEnclosing);
- targetClassName = targetClass != null ? targetClass.getName() : "";
- }
- // Format location string.
- if (StringUtils.isEmpty(targetClassName)) {
- return MessageFormat.format("{0} line:{1} col:{2}", targetPath, targetInfo.getLine(),
- targetInfo.getColumn());
- } else {
- return MessageFormat.format("{0} class:{1} line:{2} col:{3}", targetPath, targetClassName,
- targetInfo.getLine(), targetInfo.getColumn());
- }
- }
-
- /**
- * @return the relative or absolute path from "source" to "target".
- */
- private static String getRelativeSourcePath(SourceInfo source, SourceInfo target) {
- Source sourceSource = source.getSource();
- Source targetSource = target.getSource();
- return getRelativeSourcePath(sourceSource, targetSource);
- }
-
- /**
- * @return the relative or absolute path from "source" to "target".
- */
- public static String getRelativeSourcePath(Source sourceSource, Source targetSource) {
- // If both source are from file, prepare relative path.
- if (sourceSource != null && targetSource != null) {
- URI sourceUri = sourceSource.getUri();
- URI targetUri = targetSource.getUri();
- if (Objects.equal(sourceUri.getScheme(), "file")
- && Objects.equal(targetUri.getScheme(), "file")) {
- return Paths.relativePathFor(new File(sourceUri.getPath()), new File(targetUri.getPath()));
- }
- }
- // Else return absolute path (including dart:// protocol).
- if (targetSource != null) {
- URI targetUri = targetSource.getUri();
- return targetUri.toString();
- }
- // No source for target.
- return "<unknown>";
- }
-
- /**
- * @return the full location of the given {@link Element} - library and unit.
- */
- public static String getLibraryUnitLocation(Element element) {
- try {
- StringBuilder sb = new StringBuilder();
- // library URI
- String libraryUri;
- {
- LibraryUnit libraryUnit = getDeclaringLibrary(element).getLibraryUnit();
- libraryUri = libraryUnit.getSource().getUri().toString();
- sb.append(libraryUri);
- }
- // unit URI
- SourceInfo sourceInfo = element.getSourceInfo();
- {
- String unitUri = sourceInfo.getSource().getUri().toString();
- if (!unitUri.equals(libraryUri)) {
- sb.append(" ");
- sb.append(unitUri);
- }
- }
- // line
- sb.append(":");
- sb.append(sourceInfo.getLine());
- // done
- return sb.toString();
- } catch (Throwable e) {
- return "<exception>";
- }
- }
-
- /**
- * @return the enclosing {@link ClassElement} (may be same if already given {@link ClassElement}),
- * may be <code>null</code> if top level element.
- */
- public static ClassElement getEnclosingClassElement(Element element) {
- while (element != null) {
- if (element instanceof ClassElement) {
- return (ClassElement) element;
- }
- element = element.getEnclosingElement();
- }
- return null;
- }
-
- /**
- * @return <code>true</code> if the given {@link DartTypeNode} is type with one of the given
- * names.
- */
- public static boolean isTypeNode(DartTypeNode typeNode, Set<String> names) {
- if (typeNode != null) {
- DartNode identifier = typeNode.getIdentifier();
- String typeName = getIdentifierName(identifier);
- return names.contains(typeName);
- }
- return false;
- }
-
- /**
- * @return <code>true</code> if the given {@link DartTypeNode} is type with given name.
- */
- public static boolean isTypeNode(DartTypeNode typeNode, String name) {
- return typeNode != null && isIdentifierName(typeNode.getIdentifier(), name);
- }
-
- /**
- * @return <code>true</code> if the given {@link DartNode} is type identifier with given name.
- */
- public static boolean isIdentifierName(DartNode identifier, String name) {
- String identifierName = getIdentifierName(identifier);
- return Objects.equal(identifierName, name);
- }
-
- /**
- * @return <code>true</code> if the given {@link ConstructorElement} is a synthetic default
- * constructor.
- */
- public static boolean isSyntheticConstructor(ConstructorElement element) {
- return element != null && element.isSynthetic();
- }
-
- /**
- * @return <code>true</code> if the given {@link ConstructorElement} is a default constructor.
- */
- public static boolean isDefaultConstructor(ConstructorElement element) {
- return element != null
- && element.getParameters().isEmpty()
- && getRawMethodName(element).equals(element.getEnclosingElement().getName());
- }
-
- public static void setRedirectingFactoryConstructor(ConstructorElement source,
- ConstructorElement target) {
- ((ConstructorElementImplementation) source).setRedirectingFactoryConstructor(target);
- }
-
- /**
- * @return the name of given {@link DartNode} if it is {@link DartIdentifier}, or
- * <code>null</code> otherwise.
- */
- private static String getIdentifierName(DartNode identifier) {
- if (identifier != null && identifier instanceof DartIdentifier) {
- return ((DartIdentifier) identifier).getName();
- }
- return null;
- }
-
- /**
- * @return <code>true</code> if given {@link Source} represents library with given name.
- */
- public static boolean isLibrarySource(Source source, String name) {
- LibrarySource library = null;
- if (source instanceof LibrarySource) {
- library = (LibrarySource) source;
- }
- if (source instanceof DartSource) {
- DartSource dartSource = (DartSource) source;
- library = dartSource.getLibrary();
- }
- if (library != null) {
- String libraryName = library.getName();
- return libraryName.endsWith(name);
- }
- return false;
- }
-
- /**
- * @return <code>true</code> if given {@link Source} represents code library declaration or
- * implementation.
- */
- public static boolean isCoreLibrarySource(Source source) {
- if (source != null && source.getUri() != null
- && source.getUri().toString().equals("libraries.dart")) {
- return true;
- }
- // TODO (danrubel) remove these when dartc libraries are removed
- // Old core library file names
- return Elements.isLibrarySource(source, "/core/corelib.dart")
- || Elements.isLibrarySource(source, "/core/corelib_impl.dart")
- // New core library file names
- || Elements.isLibrarySource(source, "/core/core.dart");
- }
-
- public static boolean isCollectionLibrarySource(Source source) {
- return Elements.isLibrarySource(source, "/collection/collection.dart");
- }
-
- public static boolean isHtmlLibrarySource(Source source) {
- return Elements.isLibrarySource(source, "/html/dartium/html_dartium.dart");
- }
-
- public static boolean isSourceName(Source source, String requiredName) {
- return source.getName().equals(requiredName);
- }
-
- /**
- * @return the {@link LibraryElement} which declares given {@link Element}.
- */
- public static LibraryElement getDeclaringLibrary(Element element) {
- while (element != null) {
- if (element instanceof LibraryElement) {
- return (LibraryElement) element;
- }
- element = element.getEnclosingElement();
- }
- return null;
- }
-
- /**
- * @return <code>true</code> if "element" is accessible in "scopeLibrary".
- */
- public static boolean isAccessible(LibraryElement scopeLibrary, Element element) {
- if (element != null && StringUtils.startsWith(element.getName(), "_")) {
- return Objects.equal(scopeLibrary, getDeclaringLibrary(element));
- }
- return true;
- }
-
- /**
- * @return <code>true</code> if given {@link Element} if {@link MethodElement} for
- * function "identical".
- */
- public static boolean isFunctionIdentical(Element element) {
- if (element instanceof MethodElement) {
- MethodElement methodElement = (MethodElement) element;
- return Objects.equal(methodElement.getName(), "identical")
- && methodElement.getEnclosingElement() instanceof LibraryElement
- && methodElement.getEnclosingElement().getName().equals("dart://core/core.dart");
- }
- return false;
- }
-
- /**
- * @return <code>true</code> if normal field or abstract field with getter.
- */
- public static boolean isFieldWithGetter(FieldElement fieldElement) {
- if (fieldElement.getModifiers().isAbstractField()) {
- return fieldElement.getGetter() != null;
- }
- return true;
- }
-
- public static boolean isAbstractFieldWithoutGetter(Element element) {
- if (element instanceof FieldElement) {
- FieldElement fieldElement = (FieldElement) element;
- return fieldElement.getModifiers().isAbstractField() && fieldElement.getGetter() == null;
- }
- return false;
- }
-
- public static boolean hasClassMember(ClassElement clazz, String name) {
- if (clazz.lookupLocalElement(name) != null) {
- return true;
- }
- for (InterfaceType interfaceType : clazz.getInterfaces()) {
- if (hasClassMember(interfaceType.getElement(), name)) {
- return true;
- }
- }
- for (InterfaceType mixinType : clazz.getMixins()) {
- if (mixinType.getElement().lookupLocalElement(name) != null) {
- return true;
- }
- }
- if (clazz.getSupertype() != null) {
- if (hasClassMember(clazz.getSupertype().getElement(), name)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * @return <code>true</code> if given {@link FieldElement} is explicitly declared static, or is
- * static implicitly.
- */
- public static boolean isStaticField(FieldElement field) {
- Modifiers modifiers = field.getModifiers();
- return modifiers.isStatic();
- }
-
- /**
- * @return <code>true</code> if given {@link InterfaceType} overrides "noSuchMethod".
- */
- public static boolean handlesNoSuchMethod(InterfaceType type) {
- Member member = type.lookupMember("noSuchMethod");
- if (member == null) {
- return false;
- }
- Source source = member.getElement().getSourceInfo().getSource();
- return !isCoreLibrarySource(source);
- }
-
- public static DuplicateElement createDuplicateElement(Element oldElement, Element newElement) {
- return new DuplicateElementImplementation(oldElement, newElement);
- }
-
-
- public static List<Element> getAllMembers(ClassElement classElement) {
- List<Element> allMembers = Lists.newArrayList();
- Set<ClassElement> visited = Sets.newHashSet();
- addAllMembers(visited, allMembers, classElement);
- return allMembers;
- }
-
- private static void addAllMembers(Set<ClassElement> visited, List<Element> allMembers, ClassElement classElement) {
- if (classElement == null) {
- return;
- }
- if (visited.contains(classElement)) {
- return;
- }
- visited.add(classElement);
- Iterables.addAll(allMembers, classElement.getMembers());
- {
- InterfaceType superType = classElement.getSupertype();
- if (superType != null)
- addAllMembers(visited, allMembers, superType.getElement());
- }
- for (InterfaceType intf : classElement.getInterfaces()) {
- addAllMembers(visited, allMembers, intf.getElement());
- }
- for (InterfaceType mix : classElement.getMixins()) {
- Iterables.addAll(allMembers, mix.getElement().getMembers());
- }
- }
-
- public static boolean isAbstractElement(Element element) {
- if (element == null) {
- return false;
- }
- if (element.getModifiers().isAbstract()) {
- return true;
- }
- if (element.getModifiers().isExternal()) {
- return false;
- }
- if (element.getModifiers().isNative()) {
- return false;
- }
- if (element.getModifiers().isStatic()) {
- return false;
- }
- if (ElementKind.of(element) == ElementKind.METHOD) {
- MethodElement method = (MethodElement) element;
- return !method.hasBody();
- }
- return false;
- }
-
- public static boolean isFieldOfSameClassAsEnclosingConstructor(Element maybeField,
- Element maybeConstructor) {
- if (ElementKind.of(maybeField) == ElementKind.FIELD
- && ElementKind.of(maybeConstructor) == ElementKind.CONSTRUCTOR) {
- FieldElement field = (FieldElement) maybeField;
- ConstructorElement constructor = (ConstructorElement) maybeConstructor;
- if (field.getEnclosingElement() == constructor.getEnclosingElement()) {
- return true;
- }
- }
- return false;
- }
-}

Powered by Google App Engine
This is Rietveld 408576698