Home | History | Annotate | Download | only in build
      1 /*
      2  * Copyright (C) 2011 The Android Open Source Project
      3  *
      4  * Licensed under the Eclipse Public License, Version 1.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.eclipse.org/org/documents/epl-v10.php
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.ide.eclipse.adt.internal.build;
     18 
     19 import org.eclipse.core.resources.IFile;
     20 
     21 import java.util.ArrayList;
     22 import java.util.Collections;
     23 import java.util.List;
     24 
     25 /**
     26  * Data for Android-specific source files. It contains a list of output files and a list
     27  * of dependencies.
     28  * The source file itself is a implied dependency and is not meant to be in the dependency list.
     29  */
     30 public class SourceFileData {
     31 
     32     private final IFile mSourceFile;
     33     private final List<IFile> mOutputFiles = new ArrayList<IFile>();
     34     private final List<IFile> mDependencyFiles = new ArrayList<IFile>();
     35 
     36     public SourceFileData(IFile sourceFile) {
     37         this(sourceFile, null, null);
     38     }
     39 
     40     SourceFileData(IFile sourceFile,
     41             List<IFile> outputFiles, List<IFile> dependencyFiles) {
     42         mSourceFile = sourceFile;
     43         if (outputFiles != null) {
     44             mOutputFiles.addAll(outputFiles);
     45         }
     46         if (dependencyFiles != null) {
     47             mDependencyFiles.addAll(dependencyFiles);
     48         }
     49     }
     50 
     51     SourceFileData(IFile sourceFile, IFile outputFile) {
     52         mSourceFile = sourceFile;
     53         if (outputFile != null) {
     54             mOutputFiles.add(outputFile);
     55         }
     56     }
     57 
     58     /**
     59      * Returns the source file as an {@link IFile}
     60      */
     61     public IFile getSourceFile() {
     62         return mSourceFile;
     63     }
     64 
     65     /**
     66      * Returns whether the given file is a dependency for this source file.
     67      * <p/>Note that the source file itself is not tested against. Therefore if
     68      * {@code file.equals(getSourceFile()} returns {@code true}, this method will return
     69      * {@code false}.
     70      * @param file the file to check against
     71      * @return true if the given file is a dependency for this source file.
     72      */
     73     public boolean dependsOn(IFile file) {
     74         return mDependencyFiles.contains(file);
     75     }
     76 
     77     /**
     78      * Returns whether the given file is an ouput of this source file.
     79      * @param file the file to test.
     80      * @return true if the file is an output file.
     81      */
     82     public boolean generated(IFile file) {
     83         return mOutputFiles.contains(file);
     84     }
     85 
     86     void setOutputFiles(List<IFile> outputFiles) {
     87         mOutputFiles.clear();
     88         if (outputFiles != null) {
     89             mOutputFiles.addAll(outputFiles);
     90         }
     91     }
     92 
     93     void setOutputFile(IFile outputFile) {
     94         mOutputFiles.clear();
     95         if (outputFile != null) {
     96             mOutputFiles.add(outputFile);
     97         }
     98     }
     99 
    100     void setDependencyFiles(List<IFile> depFiles) {
    101         mDependencyFiles.clear();
    102         if (depFiles != null) {
    103             mDependencyFiles.addAll(depFiles);
    104         }
    105     }
    106 
    107     public List<IFile> getDependencyFiles() {
    108         return mDependencyFiles;
    109     }
    110 
    111     /**
    112      * Shortcut access to the first output file. This is useful for generator that only output
    113      * one file.
    114      */
    115     public IFile getOutput() {
    116         if (mOutputFiles.size() > 0) {
    117             return mOutputFiles.get(0);
    118         }
    119 
    120         return null;
    121     }
    122 
    123     public List<IFile> getOutputFiles() {
    124         return Collections.unmodifiableList(mOutputFiles);
    125     }
    126 
    127     @Override
    128     public String toString() {
    129         return "NonJavaFileBundle [mSourceFile=" + mSourceFile + ", mGeneratedFiles="
    130                 + mOutputFiles + ", mDependencies=" + mDependencyFiles + "]";
    131     }
    132 }
    133