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

Unified Diff: dart/compiler/java/com/google/dart/compiler/resolver/ClassElementImplementation.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/ClassElementImplementation.java
diff --git a/dart/compiler/java/com/google/dart/compiler/resolver/ClassElementImplementation.java b/dart/compiler/java/com/google/dart/compiler/resolver/ClassElementImplementation.java
deleted file mode 100644
index 83b6631f65b0ba01e02b41d4fe399ec9b176327c..0000000000000000000000000000000000000000
--- a/dart/compiler/java/com/google/dart/compiler/resolver/ClassElementImplementation.java
+++ /dev/null
@@ -1,463 +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.collect.Lists;
-import com.google.dart.compiler.ast.ASTNodes;
-import com.google.dart.compiler.ast.DartClass;
-import com.google.dart.compiler.ast.DartClassTypeAlias;
-import com.google.dart.compiler.ast.DartDeclaration;
-import com.google.dart.compiler.ast.DartIdentifier;
-import com.google.dart.compiler.ast.DartObsoleteMetadata;
-import com.google.dart.compiler.ast.DartStringLiteral;
-import com.google.dart.compiler.ast.DartTypeParameter;
-import com.google.dart.compiler.ast.Modifiers;
-import com.google.dart.compiler.common.SourceInfo;
-import com.google.dart.compiler.type.InterfaceType;
-import com.google.dart.compiler.type.Type;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicReference;
-
-class ClassElementImplementation extends AbstractNodeElement implements ClassNodeElement {
- private InterfaceType type;
- private InterfaceType supertype;
- private InterfaceType defaultClass;
- private final List<InterfaceType> interfaces = Lists.newArrayList();
- private final List<InterfaceType> mixins = Lists.newArrayList();
- private final boolean isInterface;
- private final String nativeName;
- private final DartObsoleteMetadata metadata;
- private final Modifiers modifiers;
- private final AtomicReference<List<InterfaceType>> allSupertypes =
- new AtomicReference<List<InterfaceType>>();
- private final SourceInfo nameLocation;
- private final String declarationNameWithTypeParameter;
- private List<Element> unimplementedMembers;
- private final int openBraceOffset;
- private final int closeBraceOffset;
- private final boolean hasSuperInvocation;
-
- // declared volatile for thread-safety
- @SuppressWarnings("unused")
- private volatile Set<InterfaceType> subtypes;
-
- private final List<ConstructorNodeElement> constructors = Lists.newArrayList();
- private final ElementMap members = new ElementMap();
-
- private final LibraryElement library;
-
- private static ThreadLocal<Set<Element>> seenSupertypes = new ThreadLocal<Set<Element>>() {
- @Override
- protected Set<Element> initialValue() {
- return new HashSet<Element>();
- }
- };
-
- ClassElementImplementation(DartClass node, String name, String nativeName,
- LibraryElement library) {
- super(node, name);
- this.nativeName = nativeName;
- this.library = library;
- if (node != null) {
- isInterface = node.isInterface();
- metadata = node.getObsoleteMetadata();
- modifiers = node.getModifiers();
- nameLocation = node.getName().getSourceInfo();
- declarationNameWithTypeParameter = createDeclarationName(node.getName(), node.getTypeParameters());
- openBraceOffset = node.getOpenBraceOffset();
- closeBraceOffset = node.getCloseBraceOffset();
- hasSuperInvocation = ASTNodes.hasSuperInvocation(node);
- } else {
- isInterface = false;
- metadata = DartObsoleteMetadata.EMPTY;
- modifiers = Modifiers.NONE;
- nameLocation = SourceInfo.UNKNOWN;
- declarationNameWithTypeParameter = "";
- openBraceOffset = -1;
- closeBraceOffset = -1;
- hasSuperInvocation = false;
- }
- }
-
- ClassElementImplementation(DartClassTypeAlias node, String name,
- LibraryElement library) {
- super(node, name);
- this.nativeName = null;
- this.library = library;
- if (node != null) {
- isInterface = false;
- metadata = node.getObsoleteMetadata();
- modifiers = node.getModifiers();
- nameLocation = node.getName().getSourceInfo();
- declarationNameWithTypeParameter = createDeclarationName(node.getName(), node.getTypeParameters());
- openBraceOffset = -1;
- closeBraceOffset = -1;
- hasSuperInvocation = false;
- } else {
- isInterface = false;
- metadata = DartObsoleteMetadata.EMPTY;
- modifiers = Modifiers.NONE;
- nameLocation = SourceInfo.UNKNOWN;
- declarationNameWithTypeParameter = "";
- openBraceOffset = -1;
- closeBraceOffset = -1;
- hasSuperInvocation = false;
- }
- }
-
- @Override
- public DartDeclaration<?> getNode() {
- return (DartDeclaration<?>) super.getNode();
- }
-
- @Override
- public SourceInfo getNameLocation() {
- return nameLocation;
- }
-
- @Override
- public void setType(InterfaceType type) {
- this.type = type;
- }
-
- @Override
- public InterfaceType getType() {
- return type;
- }
-
- @Override
- public List<Type> getTypeParameters() {
- return getType().getArguments();
- }
-
- @Override
- public InterfaceType getSupertype() {
- return supertype;
- }
-
- @Override
- public InterfaceType getDefaultClass() {
- return defaultClass;
- }
-
- @Override
- public void setSupertype(InterfaceType supertype) {
- if (this.supertype != null) {
- this.supertype.unregisterSubClass(this);
- }
- this.supertype = supertype;
- if (this.supertype != null) {
- this.supertype.registerSubClass(this);
- }
- }
-
- void setDefaultClass(InterfaceType element) {
- defaultClass = element;
- }
-
- @Override
- public Iterable<NodeElement> getMembers() {
- return new Iterable<NodeElement>() {
- // The only use case for calling getMembers() is for iterating through the
- // members. You should not be able to add or remove members through the
- // object returned by this method. Returning members or members.value()
- // would allow such direct manipulation which might be problematic for
- // keeping the element model consistent.
- //
- // On the other hand, we don't want to make a defensive copy of the list
- // because that makes this method expensive. This method should not be
- // expensive because the IDE may be using it in interactive scenarios.
- // Strictly speaking, we should also wrap the iterator as we don't want
- // the method Iterator.remove to be used either.
- @Override
- public Iterator<NodeElement> iterator() {
- return members.values().iterator();
- }
- };
- }
-
- @Override
- public List<ConstructorNodeElement> getConstructors() {
- return constructors;
- }
-
- @Override
- public List<InterfaceType> getInterfaces() {
- return interfaces;
- }
-
- @Override
- public List<InterfaceType> getMixins() {
- return mixins;
- }
-
- @Override
- public ElementKind getKind() {
- return ElementKind.CLASS;
- }
-
- @Override
- public boolean isInterface() {
- return isInterface;
- }
-
- @Override
- public DartObsoleteMetadata getMetadata() {
- return metadata;
- }
-
- @Override
- public Modifiers getModifiers() {
- return modifiers;
- }
-
- @Override
- public LibraryElement getLibrary() {
- return library;
- }
-
- @Override
- public String getNativeName() {
- return nativeName;
- }
-
- @Override
- public String getDeclarationNameWithTypeParameters() {
- return declarationNameWithTypeParameter;
- }
-
- void addMethod(MethodNodeElement member) {
- String name = member.getName();
- if (member.getModifiers().isOperator()) {
- name = "operator " + name;
- }
- members.add(name, member);
- }
-
- void addConstructor(ConstructorNodeElement member) {
- constructors.add(member);
- }
-
- void addField(FieldNodeElement member) {
- members.add(member.getName(), member);
- }
-
- void addInterface(InterfaceType type) {
- interfaces.add(type);
- type.registerSubClass(this);
- }
-
- void addMixin(InterfaceType type) {
- mixins.add(type);
- }
-
- Element findElement(String name) {
- // Temporary find all strategy to get things working.
- // Match resolve order in Resolver.visitMethodInvocation
- Element element = lookupLocalMethod(name);
- if (element != null) {
- return element;
- }
- element = lookupLocalField(name);
- if (element != null) {
- return element;
- }
- if (type != null) {
- for (Type arg : type.getArguments()) {
- if (arg.getElement().getName().equals(name)) {
- return arg.getElement();
- }
- }
- }
- // Don't look for constructors, they are in a different namespace.
- return null;
- }
-
- /**
- * Lookup a constructor declared in this class. Note that a class may define
- * constructors for interfaces in case the class is a default implementation.
- *
- * @param type The type of the object this constructor is creating.
- * @param name The constructor name ("" if unnamed).
- *
- * @return The constructor found in the class, or null if not found.
- */
- ConstructorElement lookupConstructor(ClassElement type, String name) {
- for (ConstructorElement element : constructors) {
- if (element.getConstructorType().equals(type) && element.getName().equals(name)) {
- return element;
- }
- }
- return null;
- }
-
- @Override
- public ConstructorElement lookupConstructor(String name) {
- // Lookup a constructor that creates instances of this class.
- return lookupConstructor(this, name);
- }
-
- @Override
- public Element lookupLocalElement(String name) {
- return members.get(name);
- }
-
- FieldElement lookupLocalField(String name) {
- return (FieldElement) members.get(name, ElementKind.FIELD);
- }
-
- MethodElement lookupLocalMethod(String name) {
- return (MethodElement) members.get(name, ElementKind.METHOD);
- }
-
- public static ClassElementImplementation fromNode(DartClass node, LibraryElement library) {
- DartStringLiteral nativeName = node.getNativeName();
- String nativeNameString = (nativeName == null ? null : nativeName.getValue());
- return new ClassElementImplementation(node, node.getClassName(), nativeNameString, library);
- }
-
- static class ClassAliasElementImplementation extends ClassElementImplementation implements ClassAliasElement {
- ClassAliasElementImplementation(DartClassTypeAlias node, String name, LibraryElement library) {
- super(node, name, library);
- }
- }
- public static ClassAliasElement fromNode(DartClassTypeAlias node, LibraryElement library) {
- return new ClassAliasElementImplementation(node, node.getClassName(), library);
- }
-
- public static ClassElementImplementation named(String name) {
- return new ClassElementImplementation(null, name, null, null);
- }
-
- @Override
- public boolean isObject() {
- return supertype == null;
- }
-
- @Override
- public boolean isObjectChild() {
- return supertype != null && supertype.getElement().isObject();
- }
-
- @Override
- public EnclosingElement getEnclosingElement() {
- return library;
- }
-
- @Override
- public List<InterfaceType> getAllSupertypes()
- throws CyclicDeclarationException {
- List<InterfaceType> list = allSupertypes.get();
- if (list == null) {
- allSupertypes.compareAndSet(null, computeAllSupertypes());
- list = allSupertypes.get();
- }
- return list;
- }
-
- private List<InterfaceType> computeAllSupertypes()
- throws CyclicDeclarationException {
- Map<ClassElement, InterfaceType> interfaces = new HashMap<ClassElement, InterfaceType>();
- if (!seenSupertypes.get().add(this)) {
- throw new CyclicDeclarationException(this);
- }
- ArrayList<InterfaceType> supertypes = new ArrayList<InterfaceType>();
- try {
- for (InterfaceType intf : getInterfaces()) {
- addInterfaceToSupertypes(interfaces, supertypes, intf);
- }
- for (InterfaceType mix : getMixins()) {
- addInterfaceToSupertypes(interfaces, supertypes, mix);
- }
- for (InterfaceType intf : getInterfaces()) {
- for (InterfaceType t : intf.getElement().getAllSupertypes()) {
- if (!t.getElement().isObject()) {
- addInterfaceToSupertypes(interfaces, supertypes,
- t.subst(intf.getArguments(),
- intf.getElement().getTypeParameters()));
- }
- }
- }
- if (supertype != null) {
- for (InterfaceType t : supertype.getElement().getAllSupertypes()) {
- if (t.getElement().isInterface()) {
- addInterfaceToSupertypes(interfaces, supertypes,
- t.subst(supertype.getArguments(),
- supertype.getElement().getTypeParameters()));
- }
- }
- supertypes.add(supertype);
- for (InterfaceType t : supertype.getElement().getAllSupertypes()) {
- if (!t.getElement().isInterface()) {
- supertypes.add(t.subst(supertype.getArguments(),
- supertype.getElement().getTypeParameters()));
- }
- }
- }
- } finally {
- seenSupertypes.get().remove(this);
- }
- return supertypes;
- }
-
- private String createDeclarationName(
- DartIdentifier name, List<DartTypeParameter> typeParameters) {
- StringBuilder builder = new StringBuilder();
- builder.append(name.toSource());
- int count = typeParameters.size();
- if (count > 0) {
- builder.append("<");
- for (int i = 0; i < count; i++) {
- if (i > 0) {
- builder.append(", ");
- }
- builder.append(typeParameters.get(i).toSource());
- }
- builder.append(">");
- }
- return builder.toString();
- }
-
- private void addInterfaceToSupertypes(Map<ClassElement, InterfaceType> interfaces,
- ArrayList<InterfaceType> supertypes,
- InterfaceType intf) {
- InterfaceType existing = interfaces.put(intf.getElement(), intf);
- if (existing == null || !(existing.equals(intf))){
- supertypes.add(intf);
- }
- }
-
- @Override
- public List<Element> getUnimplementedMembers() {
- return unimplementedMembers;
- }
-
- @Override
- public void setUnimplementedMembers(List<Element> members) {
- this.unimplementedMembers = members;
- }
-
- @Override
- public int getOpenBraceOffset() {
- return openBraceOffset;
- }
-
- @Override
- public int getCloseBraceOffset() {
- return closeBraceOffset;
- }
-
- @Override
- public boolean hasSuperInvocation() {
- return hasSuperInvocation;
- }
-}

Powered by Google App Engine
This is Rietveld 408576698