/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0 * * 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.sdklib.build; import static com.android.SdkConstants.DOT_DEP; import static com.android.SdkConstants.EXT_FS; import static com.android.SdkConstants.EXT_RS; import com.android.annotations.NonNull; import com.android.annotations.Nullable; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import java.util.List; import java.util.Set; /** * Loads dependencies for Renderscript. */ public class RenderScriptChecker { @NonNull protected final List<File> mSourceFolders; @NonNull private final File mBinFolder; protected Set<File> mOldOutputs; protected Set<File> mOldInputs; protected List<DependencyFile> mDependencyFiles; public RenderScriptChecker( @NonNull List<File> sourceFolders, @NonNull File binFolder) { mSourceFolders = sourceFolders; mBinFolder = binFolder; } public void loadDependencies() throws IOException { // get the dependency data from all files under bin/rsDeps/ File renderscriptDeps = new File(mBinFolder, RenderScriptProcessor.RS_DEPS); File[] depsFiles = null; if (renderscriptDeps.isDirectory()) { depsFiles = renderscriptDeps.listFiles(new FilenameFilter() { @Override public boolean accept(File file, String s) { return s.endsWith(DOT_DEP); } }); } int count = depsFiles != null ? depsFiles.length : 0; mDependencyFiles = Lists.newArrayListWithCapacity(0); mOldOutputs = Sets.newHashSet(); mOldInputs = Sets.newHashSet(); if (count > 0) { for (File file : depsFiles) { DependencyFile depFile = new DependencyFile(file, mSourceFolders); depFile.parse(); mDependencyFiles.add(depFile); // record old inputs mOldOutputs.addAll(depFile.getOutputFiles()); // record old inputs mOldInputs.addAll(depFile.getInputFiles()); } } } @NonNull public List<File> findInputFiles() throws IOException { // gather source files. SourceSearcher searcher = new SourceSearcher(mSourceFolders, EXT_RS, EXT_FS); FileGatherer fileGatherer = new FileGatherer(); searcher.search(fileGatherer); return fileGatherer.getFiles(); } @Nullable public Set<File> getOldOutputs() { return mOldOutputs; } @Nullable public Set<File> getOldInputs() { return mOldInputs; } public void cleanDependencies() { if (mDependencyFiles != null) { for (DependencyFile depFile : mDependencyFiles) { depFile.getFile().delete(); } } } @NonNull public List<File> getSourceFolders() { return mSourceFolders; } }