/*
 * Copyright (c) 2014, 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.polymer;

import com.google.dart.engine.element.ToolkitObjectElement;

/**
 * The interface {@code PolymerElement} defines the behavior of objects representing information
 * about a Polymer specific element.
 * 
 * @coverage dart.engine.element
 */
public interface PolymerElement extends ToolkitObjectElement {
  /**
   * An empty array of Polymer elements.
   */
  PolymerElement[] EMPTY_ARRAY = new PolymerElement[0];
}
