1 /* 2 * Copyright (C) 2013 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 com.android.SdkConstants; 20 import com.android.annotations.NonNull; 21 import com.android.ide.eclipse.adt.AdtPlugin; 22 import com.android.sdklib.build.RenderScriptChecker; 23 24 import org.eclipse.core.resources.IFile; 25 26 import java.io.File; 27 import java.io.IOException; 28 import java.util.Set; 29 30 public class RsSourceChangeHandler implements SourceChangeHandler { 31 32 private final RenderScriptChecker mChecker; 33 private boolean mIsCheckerLoaded = false; 34 35 private boolean mMustCompile = false; 36 RsSourceChangeHandler(@onNull RenderScriptChecker checker)37 public RsSourceChangeHandler(@NonNull RenderScriptChecker checker) { 38 mChecker = checker; 39 } 40 41 @Override handleGeneratedFile(IFile file, int kind)42 public boolean handleGeneratedFile(IFile file, int kind) { 43 if (mMustCompile) { 44 return false; 45 } 46 47 if (!mIsCheckerLoaded) { 48 try { 49 mChecker.loadDependencies(); 50 } catch (IOException e) { 51 // failed to load the dependency files, force a compilation, log the error. 52 AdtPlugin.log(e, "Failed to read dependency files"); 53 mMustCompile = true; 54 return false; 55 } 56 } 57 58 Set<File> oldOutputs = mChecker.getOldOutputs(); 59 // mustCompile is always false here. 60 mMustCompile = oldOutputs.contains(file.getLocation().toFile()); 61 return mMustCompile; 62 } 63 64 @Override handleSourceFile(IFile file, int kind)65 public void handleSourceFile(IFile file, int kind) { 66 if (mMustCompile) { 67 return; 68 } 69 70 String ext = file.getFileExtension(); 71 if (SdkConstants.EXT_RS.equals(ext) || 72 SdkConstants.EXT_FS.equals(ext) || 73 SdkConstants.EXT_RSH.equals(ext)) { 74 mMustCompile = true; 75 } 76 } 77 mustCompile()78 public boolean mustCompile() { 79 return mMustCompile; 80 } 81 82 @NonNull getChecker()83 public RenderScriptChecker getChecker() { 84 return mChecker; 85 } 86 prepareFullBuild()87 public void prepareFullBuild() { 88 mMustCompile = true; 89 } 90 } 91