summaryrefslogtreecommitdiffstats
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@google.com>2013-08-27 18:51:43 -0700
committerXavier Ducrohet <xav@google.com>2013-08-28 17:57:58 -0700
commita462008893000a00ea8070b463e915c341faa269 (patch)
tree9e2908f38d4025901768a7049776092603c22143 /eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders
parent4ce884fce3233d90e600d8ad8b598e788dd17e48 (diff)
downloaddevice_generic_opengl-transport-a462008893000a00ea8070b463e915c341faa269.tar.gz
device_generic_opengl-transport-a462008893000a00ea8070b463e915c341faa269.tar.bz2
device_generic_opengl-transport-a462008893000a00ea8070b463e915c341faa269.zip
RS Support mode in ADT.
Change-Id: Ib8e1e60a972ce99294040c3cb7595927d52b5717
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/ChangedFileSetHelper.java17
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PatternBasedDeltaVisitor.java2
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PostCompilerBuilder.java8
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerBuilder.java196
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerDeltaVisitor.java19
5 files changed, 166 insertions, 76 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/ChangedFileSetHelper.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/ChangedFileSetHelper.java
index 529dad249..9fc19a7a6 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/ChangedFileSetHelper.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/ChangedFileSetHelper.java
@@ -23,6 +23,7 @@ import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import java.util.ArrayList;
@@ -81,13 +82,16 @@ class ChangedFileSetHelper {
* @return a ChangeFileSet
*/
static ChangedFileSet getResCfs(@NonNull IProject project) {
+ // generated res is inside the project's android output folder
+ String path = getRelativeAndroidOut(project);
+
ChangedFileSet set = new ChangedFileSet(
"resources", //$NON-NLS-1$
SdkConstants.FD_RES + "/**", //$NON-NLS-1$
- SdkConstants.FD_ASSETS + "/**"); //$NON-NLS-1$
+ SdkConstants.FD_ASSETS + "/**", //$NON-NLS-1$
+ path + '/' + AdtConstants.WS_BIN_RELATIVE_BC + "/**"); //$NON-NLS-1$
// output file is based on the project's android output folder
- String path = getRelativeAndroidOut(project);
set.setOutput(path + '/' + AdtConstants.FN_RESOURCES_AP_);
return set;
@@ -180,14 +184,17 @@ class ChangedFileSetHelper {
return set;
}
+ private static String getRelativePath(@NonNull IProject project, @NonNull IResource resource) {
+ return resource.getFullPath().makeRelativeTo(project.getFullPath()).toString();
+ }
+
private static String getRelativeAndroidOut(@NonNull IProject project) {
IFolder folder = BaseProjectHelper.getAndroidOutputFolder(project);
- return folder.getFullPath().makeRelativeTo(project.getFullPath()).toString();
+ return getRelativePath(project, folder);
}
private static String getRelativeJavaCOut(@NonNull IProject project) {
IFolder folder = BaseProjectHelper.getJavaOutputFolder(project);
- return folder.getFullPath().makeRelativeTo(project.getFullPath()).toString();
+ return getRelativePath(project, folder);
}
-
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PatternBasedDeltaVisitor.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PatternBasedDeltaVisitor.java
index 81fceb164..b52ede90c 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PatternBasedDeltaVisitor.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PatternBasedDeltaVisitor.java
@@ -90,11 +90,11 @@ class PatternBasedDeltaVisitor implements IResourceDeltaVisitor {
} else if (resource.getType() == IResource.FILE) {
IPath path = resource.getFullPath().makeRelativeTo(mDeltaProject.getFullPath());
+ String pathStr = path.toString();
// FIXME: no need to loop through all the sets once they have all said they need something (return false below and above)
for (ChangedFileSet set : mSets) {
// FIXME: should ignore sets that have already returned true.
- String pathStr = path.toString();
if (set.isInput(pathStr, path)) {
mResults.put(set, Boolean.TRUE);
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PostCompilerBuilder.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PostCompilerBuilder.java
index 093072b37..8aacb44ef 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PostCompilerBuilder.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PostCompilerBuilder.java
@@ -371,7 +371,9 @@ public class PostCompilerBuilder extends BaseBuilder {
if (DEBUG_LOG) {
AdtPlugin.log(IStatus.INFO, "%s running crunch!", project.getName());
}
- BuildHelper helper = new BuildHelper(project, mBuildToolInfo,
+ BuildHelper helper = new BuildHelper(
+ projectState,
+ mBuildToolInfo,
mOutStream, mErrStream,
false /*jumbo mode doesn't matter here*/,
false /*dex merger doesn't matter here*/,
@@ -486,7 +488,9 @@ public class PostCompilerBuilder extends BaseBuilder {
AdtConstants.DEX_OPTIONS_DISABLE_MERGER);
Boolean dexMerger = Boolean.valueOf(dexMergerStr);
- BuildHelper helper = new BuildHelper(project, mBuildToolInfo,
+ BuildHelper helper = new BuildHelper(
+ projectState,
+ mBuildToolInfo,
mOutStream, mErrStream,
jumbo.booleanValue(),
dexMerger.booleanValue(),
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerBuilder.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerBuilder.java
index ae6b3f54e..2554c7940 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerBuilder.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerBuilder.java
@@ -25,7 +25,8 @@ import com.android.ide.eclipse.adt.AdtPlugin;
import com.android.ide.eclipse.adt.internal.build.AaptParser;
import com.android.ide.eclipse.adt.internal.build.AidlProcessor;
import com.android.ide.eclipse.adt.internal.build.Messages;
-import com.android.ide.eclipse.adt.internal.build.RenderScriptProcessor;
+import com.android.ide.eclipse.adt.internal.build.RenderScriptLauncher;
+import com.android.ide.eclipse.adt.internal.build.RsSourceChangeHandler;
import com.android.ide.eclipse.adt.internal.build.SourceProcessor;
import com.android.ide.eclipse.adt.internal.lint.EclipseLintClient;
import com.android.ide.eclipse.adt.internal.preferences.AdtPrefs;
@@ -49,6 +50,8 @@ import com.android.manifmerger.MergerLog;
import com.android.sdklib.AndroidVersion;
import com.android.sdklib.BuildToolInfo;
import com.android.sdklib.IAndroidTarget;
+import com.android.sdklib.build.RenderScriptChecker;
+import com.android.sdklib.build.RenderScriptProcessor;
import com.android.sdklib.internal.build.BuildConfigGenerator;
import com.android.sdklib.internal.build.SymbolLoader;
import com.android.sdklib.internal.build.SymbolWriter;
@@ -67,6 +70,8 @@ import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -128,8 +133,6 @@ public class PreCompilerBuilder extends BaseBuilder {
* Stored persistently in the project. */
private boolean mLastBuildConfigMode;
- private final List<SourceProcessor> mProcessors = new ArrayList<SourceProcessor>(2);
-
/** cache of the java package defined in the manifest */
private String mManifestPackage;
@@ -145,7 +148,7 @@ public class PreCompilerBuilder extends BaseBuilder {
private DerivedProgressMonitor mDerivedProgressMonitor;
private AidlProcessor mAidlProcessor;
- private RenderScriptProcessor mRenderScriptProcessor;
+ private RsSourceChangeHandler mRenderScriptSourceChangeHandler;
/**
* Progress monitor waiting the end of the process to set a persistent value
@@ -253,6 +256,8 @@ public class PreCompilerBuilder extends BaseBuilder {
// as only those projects have an impact on what is generated by this builder.
IProject[] result = null;
+ IFolder resOutFolder = null;
+
try {
assert mDerivedProgressMonitor != null;
@@ -279,13 +284,16 @@ public class PreCompilerBuilder extends BaseBuilder {
// Top level check to make sure the build can move forward.
abortOnBadSetup(javaProject, projectState);
- setupSourceProcessors(javaProject, projectState);
-
// now we need to get the classpath list
List<IPath> sourceFolderPathList = BaseProjectHelper.getSourceClasspaths(javaProject);
IFolder androidOutputFolder = BaseProjectHelper.getAndroidOutputFolder(project);
+ resOutFolder = getResOutFolder(androidOutputFolder);
+
+ setupSourceProcessors(javaProject, projectState, sourceFolderPathList,
+ androidOutputFolder);
+
PreCompilerDeltaVisitor dv = null;
String javaPackage = null;
String minSdkVersion = null;
@@ -305,9 +313,8 @@ public class PreCompilerBuilder extends BaseBuilder {
mMustCompileResources = true;
mMustCreateBuildConfig = true;
- for (SourceProcessor processor : mProcessors) {
- processor.prepareFullBuild(project);
- }
+ mAidlProcessor.prepareFullBuild(project);
+ mRenderScriptSourceChangeHandler.prepareFullBuild();
} else {
AdtPlugin.printBuildToConsole(BuildVerbosity.VERBOSE, project,
Messages.Start_Inc_Pre_Compiler);
@@ -320,11 +327,12 @@ public class PreCompilerBuilder extends BaseBuilder {
if (delta == null) {
mMustCompileResources = true;
- for (SourceProcessor processor : mProcessors) {
- processor.prepareFullBuild(project);
- }
+ mAidlProcessor.prepareFullBuild(project);
+ mRenderScriptSourceChangeHandler.prepareFullBuild();
} else {
- dv = new PreCompilerDeltaVisitor(this, sourceFolderPathList, mProcessors);
+ dv = new PreCompilerDeltaVisitor(this, sourceFolderPathList,
+ mAidlProcessor.getChangeHandler(),
+ mRenderScriptSourceChangeHandler);
delta.accept(dv);
// Check to see if Manifest.xml, Manifest.java, or R.java have changed:
@@ -363,9 +371,7 @@ public class PreCompilerBuilder extends BaseBuilder {
}
} // else: already processed the deltas in ResourceManager's IRawDeltaListener
- for (SourceProcessor processor : mProcessors) {
- processor.doneVisiting(project);
- }
+ mAidlProcessor.doneVisiting(project);
// get the java package from the visitor
javaPackage = dv.getManifestPackage();
@@ -622,9 +628,8 @@ public class PreCompilerBuilder extends BaseBuilder {
mMustMergeManifest = true;
mMustCompileResources = true;
mMustCreateBuildConfig = true;
- for (SourceProcessor processor : mProcessors) {
- processor.prepareFullBuild(project);
- }
+ mAidlProcessor.prepareFullBuild(project);
+ mRenderScriptSourceChangeHandler.prepareFullBuild();
saveProjectBooleanProperty(PROPERTY_MERGE_MANIFEST, mMustMergeManifest);
saveProjectBooleanProperty(PROPERTY_COMPILE_RESOURCES, mMustCompileResources);
@@ -661,33 +666,22 @@ public class PreCompilerBuilder extends BaseBuilder {
// run the source processors
int processorStatus = SourceProcessor.COMPILE_STATUS_NONE;
- // get the renderscript target
- int rsTarget = minSdkValue == -1 ? 11 : minSdkValue;
- String rsTargetStr = projectState.getProperty(ProjectProperties.PROPERTY_RS_TARGET);
- if (rsTargetStr != null) {
- try {
- rsTarget = Integer.parseInt(rsTargetStr);
- } catch (NumberFormatException e) {
- handleException(e, String.format(
- "Property %s is not an integer.",
- ProjectProperties.PROPERTY_RS_TARGET));
- return result;
- }
- }
- mRenderScriptProcessor.setTargetApi(rsTarget);
+ try {
+ processorStatus |= mAidlProcessor.compileFiles(this,
+ project, projectTarget, sourceFolderPathList,
+ libProjectsOut, monitor);
+ } catch (Throwable t) {
+ handleException(t, "Failed to run aidl. Check workspace log for detail.");
+ return result;
+ }
- for (SourceProcessor processor : mProcessors) {
- try {
- processorStatus |= processor.compileFiles(this,
- project, projectTarget, sourceFolderPathList,
- libProjectsOut, monitor);
- } catch (Throwable t) {
- handleException(t, String.format(
- "Failed to run %s. Check workspace log for detail.",
- processor.getClass().getName()));
- return result;
- }
+ try {
+ processorStatus |= compileRs(minSdkValue, projectState, androidOutputFolder,
+ resOutFolder, monitor);
+ } catch (Throwable t) {
+ handleException(t, "Failed to run renderscript. Check workspace log for detail.");
+ return result;
}
// if a processor created some resources file, force recompilation of the resources.
@@ -710,7 +704,7 @@ public class PreCompilerBuilder extends BaseBuilder {
proguardFile = androidOutputFolder.getFile(AdtConstants.FN_AAPT_PROGUARD);
}
- handleResources(project, javaPackage, projectTarget, manifestFile,
+ handleResources(project, javaPackage, projectTarget, manifestFile, resOutFolder,
libProjects, isLibrary, proguardFile);
}
@@ -725,11 +719,18 @@ public class PreCompilerBuilder extends BaseBuilder {
// refresh the 'gen' source folder. Once this is done with the custom progress
// monitor to mark all new files as derived
mGenFolder.refreshLocal(IResource.DEPTH_INFINITE, mDerivedProgressMonitor);
+ if (resOutFolder != null) {
+ resOutFolder.refreshLocal(IResource.DEPTH_INFINITE, mDerivedProgressMonitor);
+ }
}
return result;
}
+ private IFolder getResOutFolder(IFolder androidOutputFolder) {
+ return androidOutputFolder.getFolder(AdtConstants.WS_BIN_RELATIVE_BC);
+ }
+
@Override
protected void clean(IProgressMonitor monitor) throws CoreException {
super.clean(monitor);
@@ -805,17 +806,95 @@ public class PreCompilerBuilder extends BaseBuilder {
}
private void setupSourceProcessors(@NonNull IJavaProject javaProject,
- @NonNull ProjectState projectState) {
+ @NonNull ProjectState projectState,
+ @NonNull List<IPath> sourceFolderPathList,
+ @NonNull IFolder androidOutputFolder) {
if (mAidlProcessor == null) {
mAidlProcessor = new AidlProcessor(javaProject, mBuildToolInfo, mGenFolder);
- mRenderScriptProcessor = new RenderScriptProcessor(javaProject, mBuildToolInfo,
- mGenFolder);
- mProcessors.add(mAidlProcessor);
- mProcessors.add(mRenderScriptProcessor);
} else {
mAidlProcessor.setBuildToolInfo(mBuildToolInfo);
- mRenderScriptProcessor.setBuildToolInfo(mBuildToolInfo);
}
+
+ List<File> sourceFolders = Lists.newArrayListWithCapacity(sourceFolderPathList.size());
+ IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+
+ for (IPath path : sourceFolderPathList) {
+ IResource resource = root.findMember(path);
+ if (resource != null && resource.exists() && resource.getType() == IResource.FOLDER) {
+ IPath fullPath = resource.getLocation();
+ if (fullPath != null) {
+ sourceFolders.add(fullPath.toFile());
+ }
+ }
+ }
+
+ RenderScriptChecker checker = new RenderScriptChecker(sourceFolders,
+ androidOutputFolder.getLocation().toFile());
+ mRenderScriptSourceChangeHandler = new RsSourceChangeHandler(checker);
+ }
+
+ private int compileRs(int minSdkValue,
+ @NonNull ProjectState projectState,
+ @NonNull IFolder androidOutputFolder,
+ @NonNull IFolder resOutFolder,
+ @NonNull IProgressMonitor monitor)
+ throws IOException, InterruptedException {
+ if (!mRenderScriptSourceChangeHandler.mustCompile()) {
+ return SourceProcessor.COMPILE_STATUS_NONE;
+ }
+
+ RenderScriptChecker checker = mRenderScriptSourceChangeHandler.getChecker();
+
+ List<File> inputs = checker.findInputFiles();
+ List<File> importFolders = checker.getSourceFolders();
+ File buildFolder = androidOutputFolder.getLocation().toFile();
+
+
+ // get the renderscript target
+ int rsTarget = minSdkValue == -1 ? 11 : minSdkValue;
+ String rsTargetStr = projectState.getProperty(ProjectProperties.PROPERTY_RS_TARGET);
+ if (rsTargetStr != null) {
+ try {
+ rsTarget = Integer.parseInt(rsTargetStr);
+ } catch (NumberFormatException e) {
+ handleException(e, String.format(
+ "Property %s is not an integer.",
+ ProjectProperties.PROPERTY_RS_TARGET));
+ return SourceProcessor.COMPILE_STATUS_NONE;
+ }
+ }
+
+ RenderScriptProcessor processor = new RenderScriptProcessor(
+ inputs,
+ importFolders,
+ buildFolder,
+ mGenFolder.getLocation().toFile(),
+ resOutFolder.getLocation().toFile(),
+ new File(buildFolder, SdkConstants.FD_RS_OBJ),
+ new File(buildFolder, SdkConstants.FD_RS_LIBS),
+ mBuildToolInfo,
+ rsTarget,
+ false /*debugBuild, always false for now*/,
+ 3,
+ projectState.getRenderScriptSupportMode());
+
+ // clean old dependency files fiest
+ checker.cleanDependencies();
+
+ // then clean old output files
+ processor.cleanOldOutput(checker.getOldOutputs());
+
+ RenderScriptLauncher launcher = new RenderScriptLauncher(
+ getProject(),
+ mGenFolder,
+ resOutFolder,
+ monitor,
+ AdtPrefs.getPrefs().getBuildVerbosity() == BuildVerbosity.VERBOSE /*verbose*/);
+
+ // and run the build
+ processor.build(launcher);
+
+ return SourceProcessor.COMPILE_STATUS_CODE | SourceProcessor.COMPILE_STATUS_RES;
}
@SuppressWarnings("deprecation")
@@ -965,8 +1044,8 @@ public class PreCompilerBuilder extends BaseBuilder {
* @throws AbortBuildException
*/
private void handleResources(IProject project, String javaPackage, IAndroidTarget projectTarget,
- IFile manifest, List<IProject> libProjects, boolean isLibrary, IFile proguardFile)
- throws CoreException, AbortBuildException {
+ IFile manifest, IFolder resOutFolder, List<IProject> libProjects, boolean isLibrary,
+ IFile proguardFile) throws CoreException, AbortBuildException {
// get the resource folder
IFolder resFolder = project.getFolder(AdtConstants.WS_RESOURCES);
@@ -1025,7 +1104,10 @@ public class PreCompilerBuilder extends BaseBuilder {
String proguardFilePath = proguardFile != null ?
proguardFile.getLocation().toOSString(): null;
- execAapt(project, projectTarget, osOutputPath, osResPath, osManifestPath,
+ File resOutFile = resOutFolder.getLocation().toFile();
+ String resOutPath = resOutFile.isDirectory() ? resOutFile.getAbsolutePath() : null;
+
+ execAapt(project, projectTarget, osOutputPath, resOutPath, osResPath, osManifestPath,
mainPackageFolder, libResFolders, libRFiles, isLibrary, proguardFilePath);
}
}
@@ -1050,7 +1132,7 @@ public class PreCompilerBuilder extends BaseBuilder {
*/
@SuppressWarnings("deprecation")
private void execAapt(IProject project, IAndroidTarget projectTarget, String osOutputPath,
- String osResPath, String osManifestPath, IFolder packageFolder,
+ String osBcOutPath, String osResPath, String osManifestPath, IFolder packageFolder,
ArrayList<IFolder> libResFolders, List<Pair<File, String>> libRFiles,
boolean isLibrary, String proguardFile)
throws AbortBuildException {
@@ -1094,6 +1176,10 @@ public class PreCompilerBuilder extends BaseBuilder {
array.add(osOutputPath);
array.add("-M"); //$NON-NLS-1$
array.add(osManifestPath);
+ if (osBcOutPath != null) {
+ array.add("-S"); //$NON-NLS-1$
+ array.add(osBcOutPath);
+ }
array.add("-S"); //$NON-NLS-1$
array.add(osResPath);
for (IFolder libResFolder : libResFolders) {
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerDeltaVisitor.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerDeltaVisitor.java
index f86822405..57316f568 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerDeltaVisitor.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerDeltaVisitor.java
@@ -22,12 +22,12 @@ import com.android.ide.eclipse.adt.AdtConstants;
import com.android.ide.eclipse.adt.AdtPlugin;
import com.android.ide.eclipse.adt.internal.build.Messages;
import com.android.ide.eclipse.adt.internal.build.SourceChangeHandler;
-import com.android.ide.eclipse.adt.internal.build.SourceProcessor;
import com.android.ide.eclipse.adt.internal.build.builders.BaseBuilder.BaseDeltaVisitor;
import com.android.ide.eclipse.adt.internal.preferences.AdtPrefs.BuildVerbosity;
import com.android.ide.eclipse.adt.internal.project.AndroidManifestHelper;
import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper;
import com.android.ide.eclipse.adt.io.IFileWrapper;
+import com.google.common.collect.Lists;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
@@ -40,7 +40,7 @@ import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
-import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
/**
@@ -93,22 +93,18 @@ class PreCompilerDeltaVisitor extends BaseDeltaVisitor implements IResourceDelta
private final List<IPath> mSourceFolders;
private boolean mIsGenSourceFolder = false;
- private final List<SourceChangeHandler> mSourceChangeHandlers =
- new ArrayList<SourceChangeHandler>();
+ private final List<SourceChangeHandler> mSourceChangeHandlers = Lists.newArrayList();
private final IWorkspaceRoot mRoot;
private IFolder mAndroidOutputFolder;
public PreCompilerDeltaVisitor(BaseBuilder builder, List<IPath> sourceFolders,
- List<SourceProcessor> processors) {
+ SourceChangeHandler... handlers) {
super(builder);
mSourceFolders = sourceFolders;
mRoot = ResourcesPlugin.getWorkspace().getRoot();
- for (SourceProcessor processor : processors) {
- SourceChangeHandler handler = processor.getChangeHandler();
- mSourceChangeHandlers.add(handler);
- }
+ mSourceChangeHandlers.addAll(Arrays.asList(handlers));
mAndroidOutputFolder = BaseProjectHelper.getAndroidOutputFolder(builder.getProject());
}
@@ -296,7 +292,7 @@ class PreCompilerDeltaVisitor extends BaseDeltaVisitor implements IResourceDelta
if (outputWarning) {
if (kind == IResourceDelta.REMOVED) {
- // We pring an error just so that it's red, but it's just a warning really.
+ // We print an error just so that it's red, but it's just a warning really.
String msg = String.format(Messages.s_Removed_Recreating_s, fileName);
AdtPlugin.printErrorToConsole(mBuilder.getProject(), msg);
} else if (kind == IResourceDelta.CHANGED) {
@@ -354,9 +350,6 @@ class PreCompilerDeltaVisitor extends BaseDeltaVisitor implements IResourceDelta
mBuilder.getProject(), message);
}
- for (SourceChangeHandler handler : mSourceChangeHandlers) {
- handler.handleResourceFile((IFile)resource, kind);
- }
// If it's an XML resource, check the syntax
if (SdkConstants.EXT_XML.equalsIgnoreCase(ext) && kind != IResourceDelta.REMOVED) {
// check xml Validity