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@android.com>2013-03-19 18:23:54 -0700
committerXavier Ducrohet <xav@android.com>2013-03-21 12:53:11 -0700
commita5a0de47100d63fedf525dfb7d861c0db944a291 (patch)
treeb6dd5d159a468c6f22c32a4219dbc26c7eea53b6 /eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders
parentee82464bb385af1160a84daa5055322334520995 (diff)
downloaddevice_generic_opengl-transport-a5a0de47100d63fedf525dfb7d861c0db944a291.tar.gz
device_generic_opengl-transport-a5a0de47100d63fedf525dfb7d861c0db944a291.tar.bz2
device_generic_opengl-transport-a5a0de47100d63fedf525dfb7d861c0db944a291.zip
Add support for build-tools in ADT.
To be compatible with older projects, the projects do not have to declare which build-tools to use and instead use the lastest. Change-Id: Ic09a4a8f53109f36c4fed60b8f848f9b4db686c4
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/BaseBuilder.java36
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PostCompilerBuilder.java11
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerBuilder.java36
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/ResourceManagerBuilder.java11
4 files changed, 64 insertions, 30 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/BaseBuilder.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/BaseBuilder.java
index f58af561a..1cbf7f2a4 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/BaseBuilder.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/BaseBuilder.java
@@ -16,19 +16,24 @@
package com.android.ide.eclipse.adt.internal.build.builders;
+import com.android.annotations.NonNull;
+import com.android.annotations.Nullable;
import com.android.ide.common.sdk.LoadStatus;
import com.android.ide.eclipse.adt.AdtConstants;
import com.android.ide.eclipse.adt.AdtPlugin;
import com.android.ide.eclipse.adt.internal.build.BuildHelper;
import com.android.ide.eclipse.adt.internal.build.Messages;
+import com.android.ide.eclipse.adt.internal.preferences.AdtPrefs.BuildVerbosity;
import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper;
import com.android.ide.eclipse.adt.internal.project.ProjectHelper;
import com.android.ide.eclipse.adt.internal.project.XmlErrorHandler;
import com.android.ide.eclipse.adt.internal.project.XmlErrorHandler.XmlErrorListener;
+import com.android.ide.eclipse.adt.internal.sdk.ProjectState;
import com.android.ide.eclipse.adt.internal.sdk.Sdk;
import com.android.ide.eclipse.adt.io.IFileWrapper;
import com.android.io.IAbstractFile;
import com.android.io.StreamException;
+import com.android.sdklib.BuildToolInfo;
import com.android.sdklib.IAndroidTarget;
import org.eclipse.core.resources.IContainer;
@@ -64,6 +69,13 @@ public abstract class BaseBuilder extends IncrementalProjectBuilder {
private SAXParserFactory mParserFactory;
/**
+ * The build tool to use to build. This is guaranteed to be non null after a call to
+ * {@link #abortOnBadSetup(IJavaProject, ProjectState)} since this will throw if it can't be
+ * queried.
+ */
+ protected BuildToolInfo mBuildToolInfo;
+
+ /**
* Base Resource Delta Visitor to handle XML error
*/
protected static class BaseDeltaVisitor implements XmlErrorListener {
@@ -293,9 +305,11 @@ public abstract class BaseBuilder extends IncrementalProjectBuilder {
* display any errors.
*
* @param javaProject The {@link IJavaProject} being compiled.
+ * @param projectState the project state, optional. will be queried if null.
* @throws CoreException
*/
- protected void abortOnBadSetup(IJavaProject javaProject) throws AbortBuildException {
+ protected void abortOnBadSetup(@NonNull IJavaProject javaProject,
+ @Nullable ProjectState projectState) throws AbortBuildException, CoreException {
IProject iProject = javaProject.getProject();
// check if we have finished loading the project target.
Sdk sdk = Sdk.getCurrent();
@@ -303,8 +317,12 @@ public abstract class BaseBuilder extends IncrementalProjectBuilder {
throw new AbortBuildException();
}
+ if (projectState == null) {
+ projectState = Sdk.getProjectState(javaProject.getProject());
+ }
+
// get the target for the project
- IAndroidTarget target = sdk.getTarget(javaProject.getProject());
+ IAndroidTarget target = projectState.getTarget();
if (target == null) {
throw new AbortBuildException();
@@ -315,6 +333,20 @@ public abstract class BaseBuilder extends IncrementalProjectBuilder {
throw new AbortBuildException();
}
+ mBuildToolInfo = projectState.getBuildToolInfo();
+ if (mBuildToolInfo == null) {
+ mBuildToolInfo = sdk.getLatestBuildTool();
+
+ if (mBuildToolInfo == null) {
+ throw new AbortBuildException();
+ } else {
+ AdtPlugin.printBuildToConsole(BuildVerbosity.VERBOSE, iProject,
+ String.format("Using default Build Tools revision %s",
+ mBuildToolInfo.getRevision())
+ );
+ }
+ }
+
// abort if there are TARGET or ADT type markers
stopOnMarker(iProject, AdtConstants.MARKER_TARGET, IResource.DEPTH_ZERO,
false /*checkSeverity*/);
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 6e3dce38c..baeb15490 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
@@ -341,7 +341,7 @@ public class PostCompilerBuilder extends BaseBuilder {
// Top level check to make sure the build can move forward. Only do this after recording
// delta changes.
- abortOnBadSetup(javaProject);
+ abortOnBadSetup(javaProject, projectState);
// Get the output stream. Since the builder is created for the life of the
// project, they can be kept around.
@@ -369,7 +369,7 @@ public class PostCompilerBuilder extends BaseBuilder {
if (DEBUG_LOG) {
AdtPlugin.log(IStatus.INFO, "%s running crunch!", project.getName());
}
- BuildHelper helper = new BuildHelper(project,
+ BuildHelper helper = new BuildHelper(project, mBuildToolInfo,
mOutStream, mErrStream,
false /*jumbo mode doesn't matter here*/,
false /*dex merger doesn't matter here*/,
@@ -484,7 +484,7 @@ public class PostCompilerBuilder extends BaseBuilder {
AdtConstants.DEX_OPTIONS_DISABLE_MERGER);
Boolean dexMerger = Boolean.valueOf(dexMergerStr);
- BuildHelper helper = new BuildHelper(project,
+ BuildHelper helper = new BuildHelper(project, mBuildToolInfo,
mOutStream, mErrStream,
jumbo.booleanValue(),
dexMerger.booleanValue(),
@@ -913,8 +913,9 @@ public class PostCompilerBuilder extends BaseBuilder {
}
@Override
- protected void abortOnBadSetup(IJavaProject javaProject) throws AbortBuildException {
- super.abortOnBadSetup(javaProject);
+ protected void abortOnBadSetup(IJavaProject javaProject, ProjectState projectState)
+ throws AbortBuildException, CoreException {
+ super.abortOnBadSetup(javaProject, projectState);
IProject iProject = getProject();
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 0f0cbccbd..ae6b3f54e 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
@@ -47,6 +47,7 @@ import com.android.io.StreamException;
import com.android.manifmerger.ManifestMerger;
import com.android.manifmerger.MergerLog;
import com.android.sdklib.AndroidVersion;
+import com.android.sdklib.BuildToolInfo;
import com.android.sdklib.IAndroidTarget;
import com.android.sdklib.internal.build.BuildConfigGenerator;
import com.android.sdklib.internal.build.SymbolLoader;
@@ -95,7 +96,6 @@ import javax.xml.parsers.ParserConfigurationException;
* </ul>
*
*/
-@SuppressWarnings("deprecation")
public class PreCompilerBuilder extends BaseBuilder {
/** This ID is used in plugin.xml and in each project's .project file.
@@ -144,6 +144,7 @@ public class PreCompilerBuilder extends BaseBuilder {
*/
private DerivedProgressMonitor mDerivedProgressMonitor;
+ private AidlProcessor mAidlProcessor;
private RenderScriptProcessor mRenderScriptProcessor;
/**
@@ -276,7 +277,9 @@ public class PreCompilerBuilder extends BaseBuilder {
IJavaProject javaProject = JavaCore.create(project);
// Top level check to make sure the build can move forward.
- abortOnBadSetup(javaProject);
+ abortOnBadSetup(javaProject, projectState);
+
+ setupSourceProcessors(javaProject, projectState);
// now we need to get the classpath list
List<IPath> sourceFolderPathList = BaseProjectHelper.getSourceClasspaths(javaProject);
@@ -707,8 +710,8 @@ public class PreCompilerBuilder extends BaseBuilder {
proguardFile = androidOutputFolder.getFile(AdtConstants.FN_AAPT_PROGUARD);
}
- handleResources(project, javaPackage, projectTarget, manifestFile, libProjects,
- isLibrary, proguardFile);
+ handleResources(project, javaPackage, projectTarget, manifestFile,
+ libProjects, isLibrary, proguardFile);
}
if (processorStatus == SourceProcessor.COMPILE_STATUS_NONE &&
@@ -796,18 +799,25 @@ public class PreCompilerBuilder extends BaseBuilder {
mLastBuildConfigMode = v;
}
- IJavaProject javaProject = JavaCore.create(project);
-
- // load the source processors
- SourceProcessor aidlProcessor = new AidlProcessor(javaProject, mGenFolder);
- mRenderScriptProcessor = new RenderScriptProcessor(javaProject, mGenFolder);
- mProcessors.add(aidlProcessor);
- mProcessors.add(mRenderScriptProcessor);
} catch (Throwable throwable) {
AdtPlugin.log(throwable, "Failed to finish PrecompilerBuilder#startupOnInitialize()");
}
}
+ private void setupSourceProcessors(@NonNull IJavaProject javaProject,
+ @NonNull ProjectState projectState) {
+ 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);
+ }
+ }
+
@SuppressWarnings("deprecation")
private void handleBuildConfig(@SuppressWarnings("rawtypes") Map args)
throws IOException, CoreException {
@@ -916,7 +926,7 @@ public class PreCompilerBuilder extends BaseBuilder {
outFile.getLocation().toFile(),
manifest.getLocation().toFile(),
libManifests,
- null /*injectAttributes*/) == false) {
+ null /*injectAttributes*/, null /*packageOverride*/) == false) {
if (errors.size() > 1) {
StringBuilder sb = new StringBuilder();
for (String s : errors) {
@@ -1054,7 +1064,7 @@ public class PreCompilerBuilder extends BaseBuilder {
// launch aapt: create the command line
ArrayList<String> array = new ArrayList<String>();
- String aaptPath = projectTarget.getPath(IAndroidTarget.AAPT);
+ String aaptPath = mBuildToolInfo.getPath(BuildToolInfo.PathId.AAPT);
array.add(aaptPath);
array.add("package"); //$NON-NLS-1$
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/ResourceManagerBuilder.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/ResourceManagerBuilder.java
index 39f7d1ffe..770710db3 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/ResourceManagerBuilder.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/ResourceManagerBuilder.java
@@ -24,8 +24,6 @@ import com.android.ide.eclipse.adt.internal.preferences.AdtPrefs;
import com.android.ide.eclipse.adt.internal.preferences.AdtPrefs.BuildVerbosity;
import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper;
import com.android.ide.eclipse.adt.internal.project.ProjectHelper;
-import com.android.ide.eclipse.adt.internal.sdk.Sdk;
-import com.android.sdklib.IAndroidTarget;
import com.android.utils.Pair;
import org.eclipse.core.resources.IFolder;
@@ -87,7 +85,7 @@ public class ResourceManagerBuilder extends BaseBuilder {
// check for existing target marker, in which case we abort.
// (this means: no SDK, no target, or unresolvable target.)
try {
- abortOnBadSetup(javaProject);
+ abortOnBadSetup(javaProject, null);
} catch (AbortBuildException e) {
return null;
}
@@ -129,13 +127,6 @@ public class ResourceManagerBuilder extends BaseBuilder {
return null;
}
- // check the project has a target
- IAndroidTarget projectTarget = Sdk.getCurrent().getTarget(project);
- if (projectTarget == null) {
- // no target. marker has been set by the container initializer: exit silently.
- return null;
- }
-
// check the 'gen' source folder is present
boolean hasGenSrcFolder = false; // whether the project has a 'gen' source folder setup