| Index: editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/element/ElementProxy.java
|
| diff --git a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/element/ElementProxy.java b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/element/ElementProxy.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6c9754d65471d20cffeb8f09de68f516c6375424
|
| --- /dev/null
|
| +++ b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/element/ElementProxy.java
|
| @@ -0,0 +1,139 @@
|
| +/*
|
| + * Copyright (c) 2012, the Dart project authors.
|
| + *
|
| + * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
|
| + * in compliance with the License. You may obtain a copy of the License at
|
| + *
|
| + * http://www.eclipse.org/legal/epl-v10.html
|
| + *
|
| + * Unless required by applicable law or agreed to in writing, software distributed under the License
|
| + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
| + * or implied. See the License for the specific language governing permissions and limitations under
|
| + * the License.
|
| + */
|
| +package com.google.dart.engine.element;
|
| +
|
| +import com.google.common.base.Objects;
|
| +import com.google.dart.engine.context.AnalysisContext;
|
| +import com.google.dart.engine.source.Source;
|
| +
|
| +/**
|
| + * Contains some properties of {@link Element}, which can be accessed without costly access to the
|
| + * {@link Element} itself.
|
| + */
|
| +public class ElementProxy {
|
| + /**
|
| + * @return the {@link Source} which contains given {@link Element}, may be <code>null</code>.
|
| + */
|
| + private static Source findSource(Element element) {
|
| + while (element != null) {
|
| + if (element instanceof LibraryElement) {
|
| + element = ((LibraryElement) element).getDefiningCompilationUnit();
|
| + }
|
| + if (element instanceof CompilationUnitElement) {
|
| + return ((CompilationUnitElement) element).getSource();
|
| + }
|
| + element = element.getEnclosingElement();
|
| + }
|
| + return null;
|
| + }
|
| +
|
| + private final AnalysisContext context;
|
| + private final Source source;
|
| + private final ElementLocation location;
|
| + private final ElementKind kind;
|
| + private final String name;
|
| + private final int nameOffset;
|
| +
|
| + /**
|
| + * Initializes {@link ElementProxy} using information about {@link Element}.
|
| + */
|
| + public ElementProxy(AnalysisContext context, Source source, ElementLocation location,
|
| + ElementKind kind, String name, int nameOffset) {
|
| + this.context = context;
|
| + this.source = source;
|
| + this.location = location;
|
| + this.kind = kind;
|
| + this.name = name;
|
| + this.nameOffset = nameOffset;
|
| + }
|
| +
|
| + /**
|
| + * Initializes {@link ElementProxy} using existing {@link Element} instance.
|
| + */
|
| + public ElementProxy(Element element) {
|
| + context = element.getContext();
|
| + source = findSource(element);
|
| + location = element.getLocation();
|
| + kind = element.getKind();
|
| + name = element.getName();
|
| + nameOffset = element.getNameOffset();
|
| + }
|
| +
|
| + @Override
|
| + public boolean equals(Object obj) {
|
| + if (!(obj instanceof ElementProxy)) {
|
| + return false;
|
| + }
|
| + ElementProxy proxy = (ElementProxy) obj;
|
| + return proxy.getContext() == context && Objects.equal(location, proxy.location)
|
| + && Objects.equal(source, proxy.source) && kind == proxy.kind
|
| + && Objects.equal(name, proxy.name) && nameOffset == proxy.nameOffset;
|
| + }
|
| +
|
| + /**
|
| + * @return the {@link AnalysisContext} in which defines this {@link Element}.
|
| + */
|
| + public AnalysisContext getContext() {
|
| + return context;
|
| + }
|
| +
|
| + /**
|
| + * @see Element#getKind()
|
| + */
|
| + public ElementKind getKind() {
|
| + return kind;
|
| + }
|
| +
|
| + /**
|
| + * @return the {@link ElementLocation} of this {@link Element}.
|
| + */
|
| + public ElementLocation getLocation() {
|
| + return location;
|
| + }
|
| +
|
| + /**
|
| + * @see Element#getName()
|
| + */
|
| + public String getName() {
|
| + return name;
|
| + }
|
| +
|
| + /**
|
| + * @see Element#getNameOffset()
|
| + */
|
| + public int getNameOffset() {
|
| + return nameOffset;
|
| + }
|
| +
|
| + /**
|
| + * @return the {@link Source} which defines this {@link Element}.
|
| + */
|
| + public Source getSource() {
|
| + return source;
|
| + }
|
| +
|
| + @Override
|
| + public int hashCode() {
|
| + return Objects.hashCode(context, location);
|
| + }
|
| +
|
| + /**
|
| + * Returns the actual {@link Element} instance, may be loaded from disk. This method may be slow.
|
| + *
|
| + * @return the actual {@link Element} instance.
|
| + */
|
| + public Element requestElement() {
|
| + return context.getElement(location);
|
| + }
|
| +}
|
|
|