| /* |
| * Copyright (C) 2013 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 com.android.SdkConstants; |
| import com.android.annotations.NonNull; |
| import com.android.ide.eclipse.adt.AdtPlugin; |
| import com.android.sdklib.build.RenderScriptChecker; |
| |
| import org.eclipse.core.resources.IFile; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.util.Set; |
| |
| public class RsSourceChangeHandler implements SourceChangeHandler { |
| |
| private final RenderScriptChecker mChecker; |
| private boolean mIsCheckerLoaded = false; |
| |
| private boolean mMustCompile = false; |
| |
| public RsSourceChangeHandler(@NonNull RenderScriptChecker checker) { |
| mChecker = checker; |
| } |
| |
| @Override |
| public boolean handleGeneratedFile(IFile file, int kind) { |
| if (mMustCompile) { |
| return false; |
| } |
| |
| if (!mIsCheckerLoaded) { |
| try { |
| mChecker.loadDependencies(); |
| } catch (IOException e) { |
| // failed to load the dependency files, force a compilation, log the error. |
| AdtPlugin.log(e, "Failed to read dependency files"); |
| mMustCompile = true; |
| return false; |
| } |
| } |
| |
| Set<File> oldOutputs = mChecker.getOldOutputs(); |
| // mustCompile is always false here. |
| mMustCompile = oldOutputs.contains(file.getLocation().toFile()); |
| return mMustCompile; |
| } |
| |
| @Override |
| public void handleSourceFile(IFile file, int kind) { |
| if (mMustCompile) { |
| return; |
| } |
| |
| String ext = file.getFileExtension(); |
| if (SdkConstants.EXT_RS.equals(ext) || |
| SdkConstants.EXT_FS.equals(ext) || |
| SdkConstants.EXT_RSH.equals(ext)) { |
| mMustCompile = true; |
| } |
| } |
| |
| public boolean mustCompile() { |
| return mMustCompile; |
| } |
| |
| @NonNull |
| public RenderScriptChecker getChecker() { |
| return mChecker; |
| } |
| |
| public void prepareFullBuild() { |
| mMustCompile = true; |
| } |
| } |