/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Eclipse Public License, Version 1.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/org/documents/epl-v10.php * * 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.android.ide.eclipse.adt.internal.build; import org.eclipse.core.resources.IFile; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Data for Android-specific source files. It contains a list of output files and a list * of dependencies. * The source file itself is a implied dependency and is not meant to be in the dependency list. */ public class SourceFileData { private final IFile mSourceFile; private final List<IFile> mOutputFiles = new ArrayList<IFile>(); private final List<IFile> mDependencyFiles = new ArrayList<IFile>(); public SourceFileData(IFile sourceFile) { this(sourceFile, null, null); } SourceFileData(IFile sourceFile, List<IFile> outputFiles, List<IFile> dependencyFiles) { mSourceFile = sourceFile; if (outputFiles != null) { mOutputFiles.addAll(outputFiles); } if (dependencyFiles != null) { mDependencyFiles.addAll(dependencyFiles); } } SourceFileData(IFile sourceFile, IFile outputFile) { mSourceFile = sourceFile; if (outputFile != null) { mOutputFiles.add(outputFile); } } /** * Returns the source file as an {@link IFile} */ public IFile getSourceFile() { return mSourceFile; } /** * Returns whether the given file is a dependency for this source file. * <p/>Note that the source file itself is not tested against. Therefore if * {@code file.equals(getSourceFile()} returns {@code true}, this method will return * {@code false}. * @param file the file to check against * @return true if the given file is a dependency for this source file. */ public boolean dependsOn(IFile file) { return mDependencyFiles.contains(file); } /** * Returns whether the given file is an ouput of this source file. * @param file the file to test. * @return true if the file is an output file. */ public boolean generated(IFile file) { return mOutputFiles.contains(file); } void setOutputFiles(List<IFile> outputFiles) { mOutputFiles.clear(); if (outputFiles != null) { mOutputFiles.addAll(outputFiles); } } void setOutputFile(IFile outputFile) { mOutputFiles.clear(); if (outputFile != null) { mOutputFiles.add(outputFile); } } void setDependencyFiles(List<IFile> depFiles) { mDependencyFiles.clear(); if (depFiles != null) { mDependencyFiles.addAll(depFiles); } } public List<IFile> getDependencyFiles() { return mDependencyFiles; } /** * Shortcut access to the first output file. This is useful for generator that only output * one file. */ public IFile getOutput() { if (mOutputFiles.size() > 0) { return mOutputFiles.get(0); } return null; } public List<IFile> getOutputFiles() { return Collections.unmodifiableList(mOutputFiles); } @Override public String toString() { return "NonJavaFileBundle [mSourceFile=" + mSourceFile + ", mGeneratedFiles=" + mOutputFiles + ", mDependencies=" + mDependencyFiles + "]"; } }