From ec17a292857ccc0f458de06d055485e4eb8765be Mon Sep 17 00:00:00 2001 From: Xavier Ducrohet Date: Fri, 27 Jan 2012 17:22:11 -0800 Subject: Automatically add annotations.jar on the classpath for API<=15 This is to provide app some annotations used by the tools. Those annotations will be part of the API later. Change-Id: I32b31a3039e4fbb331682a84192252bd43c0f54a --- anttasks/src/com/android/ant/NewSetupTask.java | 18 +++++++++++++++--- eclipse/plugins/com.android.ide.eclipse.adt/plugin.xml | 9 +-------- .../project/LibraryClasspathContainerInitializer.java | 18 +++++++++++++++++- .../com/android/ide/eclipse/adt/internal/sdk/Sdk.java | 4 ++-- .../sdklib/src/com/android/sdklib/SdkConstants.java | 5 +++++ 5 files changed, 40 insertions(+), 14 deletions(-) diff --git a/anttasks/src/com/android/ant/NewSetupTask.java b/anttasks/src/com/android/ant/NewSetupTask.java index 46f5b14..29caf6e 100644 --- a/anttasks/src/com/android/ant/NewSetupTask.java +++ b/anttasks/src/com/android/ant/NewSetupTask.java @@ -20,10 +20,10 @@ import com.android.io.FileWrapper; import com.android.io.FolderWrapper; import com.android.sdklib.AndroidVersion; import com.android.sdklib.IAndroidTarget; +import com.android.sdklib.IAndroidTarget.IOptionalLibrary; import com.android.sdklib.ISdkLog; import com.android.sdklib.SdkConstants; import com.android.sdklib.SdkManager; -import com.android.sdklib.IAndroidTarget.IOptionalLibrary; import com.android.sdklib.internal.project.ProjectProperties; import com.android.sdklib.internal.project.ProjectProperties.PropertyType; import com.android.sdklib.xml.AndroidManifest; @@ -282,7 +282,7 @@ public class NewSetupTask extends Task { } // look for referenced libraries. - processReferencedLibraries(antProject, androidTarget); + processReferencedLibraries(antProject, androidTarget, sdkOsPath); // always check the manifest minSdkVersion. checkManifest(antProject, androidTarget.getVersion()); @@ -436,7 +436,8 @@ public class NewSetupTask extends Task { } } - private void processReferencedLibraries(Project antProject, IAndroidTarget androidTarget) { + private void processReferencedLibraries(Project antProject, IAndroidTarget androidTarget, + String sdkLocation) { // prepare several paths for future tasks Path rootPath = new Path(antProject); Path resPath = new Path(antProject); @@ -523,6 +524,17 @@ public class NewSetupTask extends Task { System.out.println("------------------\n"); + if (androidTarget.getVersion().getApiLevel() <= 15) { + System.out.println("API<=15: Adding annotations.jar to the classpath.\n"); + + PathElement element = jarsPath.createPathElement(); + element.setPath(sdkLocation + "/" + SdkConstants.FD_TOOLS + + "/" + SdkConstants.FD_SUPPORT + + "/" + SdkConstants.FN_ANNOTATIONS_JAR); + + System.out.println("------------------\n"); + } + // even with no libraries, always setup these so that various tasks in Ant don't complain // (the task themselves can handle a ref to an empty Path) antProject.addReference(mProjectLibrariesJarsOut, jarsPath); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/plugin.xml b/eclipse/plugins/com.android.ide.eclipse.adt/plugin.xml index de8ab4a..f980f4f 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/plugin.xml +++ b/eclipse/plugins/com.android.ide.eclipse.adt/plugin.xml @@ -425,20 +425,13 @@ natureId="com.android.ide.eclipse.adt.AndroidNature"> - - - - diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/LibraryClasspathContainerInitializer.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/LibraryClasspathContainerInitializer.java index e31d70d..7b6c9b7 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/LibraryClasspathContainerInitializer.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/LibraryClasspathContainerInitializer.java @@ -20,6 +20,7 @@ import com.android.ide.eclipse.adt.AdtConstants; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.sdk.ProjectState; import com.android.ide.eclipse.adt.internal.sdk.Sdk; +import com.android.sdklib.SdkConstants; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; @@ -37,6 +38,7 @@ import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; +import java.io.File; import java.util.ArrayList; import java.util.List; @@ -132,7 +134,7 @@ public class LibraryClasspathContainerInitializer extends ClasspathContainerInit } } - // same thing for the library container + // if there isn't any, add it. if (foundLibrariesContainer == false) { // add the android container to the array rawClasspath = ProjectHelper.addEntryToClasspath(rawClasspath, @@ -186,6 +188,20 @@ public class LibraryClasspathContainerInitializer extends ClasspathContainerInit } } + // annotations support for older version of android + if (state.getTarget() != null && state.getTarget().getVersion().getApiLevel() <= 15) { + File annotationsJar = new File(Sdk.getCurrent().getSdkLocation(), + SdkConstants.FD_TOOLS + File.separator + SdkConstants.FD_SUPPORT + + File.separator + SdkConstants.FN_ANNOTATIONS_JAR); + + IClasspathEntry entry = JavaCore.newLibraryEntry( + new Path(annotationsJar.getAbsolutePath()), + null, // source attachment path + null); // default source attachment root path. + + entries.add(0, entry); + } + return new AndroidClasspathContainer( entries.toArray(new IClasspathEntry[entries.size()]), new Path(AdtConstants.CONTAINER_LIBRARIES), diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/Sdk.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/Sdk.java index 6776a07..2f55d9b 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/Sdk.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/Sdk.java @@ -24,7 +24,6 @@ import com.android.ide.common.rendering.LayoutLibrary; 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.AdtUtils; import com.android.ide.eclipse.adt.internal.build.DexWrapper; import com.android.ide.eclipse.adt.internal.editors.common.CommonXmlEditor; import com.android.ide.eclipse.adt.internal.preferences.AdtPrefs; @@ -71,7 +70,6 @@ import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorReference; import org.eclipse.ui.IFileEditorInput; -import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.ui.IWorkbenchWindow; @@ -1056,6 +1054,8 @@ public final class Sdk { if (javaProject != null) { AndroidClasspathContainerInitializer.updateProjects( new IJavaProject[] { javaProject }); + LibraryClasspathContainerInitializer.updateProjects( + new IJavaProject[] { javaProject }); } // update the editors to reload with the new target diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java index 8f17886..d13108a 100644 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java @@ -85,6 +85,9 @@ public final class SdkConstants { /** Intent category list file */ public static final String FN_INTENT_CATEGORIES = "categories.txt"; //$NON-NLS-1$ + /** annotations support jar */ + public static final String FN_ANNOTATIONS_JAR = "annotations.jar"; //$NON-NLS-1$ + /** platform build property file */ public final static String FN_BUILD_PROP = "build.prop"; //$NON-NLS-1$ /** plugin properties file */ @@ -204,6 +207,8 @@ public final class SdkConstants { public final static String FD_PKG_SOURCES = "sources"; //$NON-NLS-1$ /** Name of the SDK tools folder. */ public final static String FD_TOOLS = "tools"; //$NON-NLS-1$ + /** Name of the SDK tools/support folder. */ + public final static String FD_SUPPORT = "support"; //$NON-NLS-1$ /** Name of the SDK platform tools folder. */ public final static String FD_PLATFORM_TOOLS = "platform-tools"; //$NON-NLS-1$ /** Name of the SDK tools/lib folder. */ -- cgit v1.1