Package com.google.dart.engine.internal.context

Source Code of com.google.dart.engine.internal.context.RecordingErrorListener

/*
* Copyright (c) 2013, 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.internal.context;

import com.google.dart.engine.error.AnalysisError;
import com.google.dart.engine.error.AnalysisErrorListener;
import com.google.dart.engine.source.Source;

import static com.google.dart.engine.error.AnalysisError.NO_ERRORS;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;

/**
* Instances of the class {@code RecordingErrorListener} implement an error listener that will
* record the errors that are reported to it in a way that is appropriate for caching those errors
* within an analysis context.
*
* @coverage dart.engine
*/
public class RecordingErrorListener implements AnalysisErrorListener {

  /**
   * A HashMap of lists containing the errors that were collected, keyed by each {@link Source}.
   */
  private Map<Source, HashSet<AnalysisError>> errors = new HashMap<Source, HashSet<AnalysisError>>();

  /**
   * Add all of the errors recorded by the given listener to this listener.
   *
   * @param listener the listener that has recorded the errors to be added
   */
  public void addAll(RecordingErrorListener listener) {
    for (AnalysisError error : listener.getErrors()) {
      onError(error);
    }
  }

  /**
   * Answer the errors collected by the listener.
   *
   * @return an array of errors (not {@code null}, contains no {@code null}s)
   */
  public AnalysisError[] getErrors() {
    Collection<Entry<Source, HashSet<AnalysisError>>> entrySet = errors.entrySet();
    int numEntries = entrySet.size();
    if (numEntries == 0) {
      return NO_ERRORS;
    }
    ArrayList<AnalysisError> resultList = new ArrayList<AnalysisError>(numEntries);
    for (Entry<Source, HashSet<AnalysisError>> entry : entrySet) {
      resultList.addAll(entry.getValue());
    }
    return resultList.toArray(new AnalysisError[resultList.size()]);
  }

  /**
   * Answer the errors collected by the listener for some passed {@link Source}.
   *
   * @param source some {@link Source} for which the caller wants the set of {@link AnalysisError}s
   *          collected by this listener
   * @return the errors collected by the listener for the passed {@link Source}
   */
  public AnalysisError[] getErrorsForSource(Source source) {
    HashSet<AnalysisError> errorsForSource = errors.get(source);
    if (errorsForSource == null) {
      return NO_ERRORS;
    } else {
      return errorsForSource.toArray(new AnalysisError[errorsForSource.size()]);
    }
  }

  @Override
  public void onError(AnalysisError error) {
    Source source = error.getSource();
    HashSet<AnalysisError> errorsForSource = errors.get(source);
    if (errors.get(source) == null) {
      errorsForSource = new HashSet<AnalysisError>();
      errors.put(source, errorsForSource);
    }
    errorsForSource.add(error);
  }
}
TOP

Related Classes of com.google.dart.engine.internal.context.RecordingErrorListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.