001    // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
002    // for details. All rights reserved. Use of this source code is governed by a
003    // BSD-style license that can be found in the LICENSE file.
004    
005    package com.google.dart.compiler;
006    
007    import java.io.IOException;
008    import java.io.Reader;
009    import java.net.URI;
010    import java.util.Date;
011    
012    /**
013     * Abstract interface to a source file.
014     */
015    public interface Source {
016    
017      /**
018       * Determines whether the given source exists.
019       */
020      boolean exists();
021    
022      /**
023       * Returns the last-modified timestamp for this source, using the same units as
024       * {@link Date#getTime()}.
025       */
026      long getLastModified();
027    
028      /**
029       * Gets the name of this source.
030       */
031      String getName();
032    
033      /**
034       * Gets a reader for the dart file's source code. The caller is responsible for closing the
035       * returned reader.
036       */
037      Reader getSourceReader() throws IOException;
038    
039      /**
040       * Gets the identifier for this source. This is used to uniquely identify the
041       * source, but should not be used to obtain the source content. Use
042       * {@link #getSourceReader()} to obtain the source content.
043       */
044      URI getUri();
045    }