From 648e03eafbf9cac55142d1d6349e4d5cc8b4299d Mon Sep 17 00:00:00 2001 From: Xavier Ducrohet Date: Tue, 13 Jul 2010 18:40:29 -0700 Subject: [PATCH] Force recompilation after library changes and fix some clean-up/refresh issue in the builders One of the fix is that the gen folder is no longer deleted on clean (or full build) which should reduce errors where eclipse complain the gen folder is missing even though it's present. Also move ProjectState into SDK as it's really only managed by the SDK and it allows us to move its constructor to package private. Change-Id: I321ac23f756652e7082297d2ef560a654e97cf67 --- .../adt/internal/actions/MultiApkExportAction.java | 2 +- .../eclipse/adt/internal/build/BaseBuilder.java | 32 +++++++--- .../adt/internal/build/PostCompilerBuilder.java | 2 +- .../adt/internal/build/PreCompilerBuilder.java | 74 +++++++--------------- .../adt/internal/build/ResourceManagerBuilder.java | 2 +- .../editors/layout/LayoutReloadMonitor.java | 2 +- .../editors/manifest/pages/OverviewExportPart.java | 2 +- .../adt/internal/launch/LaunchShortcut.java | 2 +- .../AndroidClasspathContainerInitializer.java | 1 + .../adt/internal/project/ProjectChooserHelper.java | 1 + .../internal/properties/AndroidPropertyPage.java | 2 +- .../adt/internal/properties/LibraryProperties.java | 4 +- .../resources/manager/ProjectResources.java | 2 +- .../internal/{project => sdk}/ProjectState.java | 5 +- .../android/ide/eclipse/adt/internal/sdk/Sdk.java | 20 +++++- .../adt/internal/wizards/actions/ExportAction.java | 2 +- .../wizards/actions/ExportWizardAction.java | 2 +- .../adt/internal/wizards/export/KeyCheckPage.java | 2 +- 18 files changed, 81 insertions(+), 78 deletions(-) rename eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/{project => sdk}/ProjectState.java (99%) diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/actions/MultiApkExportAction.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/actions/MultiApkExportAction.java index f5876e925..6ff6d0b6e 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/actions/MultiApkExportAction.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/actions/MultiApkExportAction.java @@ -19,7 +19,7 @@ package com.android.ide.eclipse.adt.internal.actions; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.build.PostCompilerHelper; import com.android.ide.eclipse.adt.internal.project.ProjectHelper; -import com.android.ide.eclipse.adt.internal.project.ProjectState; +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.IFolderWrapper; import com.android.sdklib.SdkConstants; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/BaseBuilder.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/BaseBuilder.java index 32092f81e..72e09c19f 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/BaseBuilder.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/BaseBuilder.java @@ -39,7 +39,6 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.jdt.core.IJavaProject; import org.xml.sax.SAXException; @@ -423,19 +422,34 @@ abstract class BaseBuilder extends IncrementalProjectBuilder { } /** - * Recursively delete all the derived resources. + * Recursively delete all the derived resources from a root resource. The root resource is not + * deleted. + * @param rootResource the root resource + * @param monitor a progress monitor. + * @throws CoreException + * */ - protected void removeDerivedResources(IResource resource, IProgressMonitor monitor) + protected void removeDerivedResources(IResource rootResource, IProgressMonitor monitor) throws CoreException { - if (resource.exists()) { - if (resource.isDerived()) { - resource.delete(true, new SubProgressMonitor(monitor, 10)); - } else if (resource.getType() == IResource.FOLDER) { - IFolder folder = (IFolder)resource; + removeDerivedResources(rootResource, false, monitor); + } + + private void removeDerivedResources(IResource rootResource, boolean deleteRoot, + IProgressMonitor monitor) + throws CoreException { + if (rootResource.exists()) { + if (rootResource.getType() == IResource.FOLDER) { + IFolder folder = (IFolder)rootResource; IResource[] members = folder.members(); for (IResource member : members) { - removeDerivedResources(member, monitor); + removeDerivedResources(member, true /*deleteRoot*/, monitor); } + } else if (rootResource.isDerived()) { + rootResource.getLocation().toFile().delete(); + } + + if (deleteRoot) { + rootResource.getLocation().toFile().delete(); } } } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/PostCompilerBuilder.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/PostCompilerBuilder.java index 539c8e38c..8c8a15dbb 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/PostCompilerBuilder.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/PostCompilerBuilder.java @@ -22,7 +22,7 @@ import com.android.ide.eclipse.adt.internal.preferences.AdtPrefs.BuildVerbosity; import com.android.ide.eclipse.adt.internal.project.ApkInstallManager; 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.ProjectState; +import com.android.ide.eclipse.adt.internal.sdk.ProjectState; import com.android.ide.eclipse.adt.internal.sdk.Sdk; import com.android.sdklib.SdkConstants; import com.android.sdklib.xml.AndroidManifest; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/PreCompilerBuilder.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/PreCompilerBuilder.java index e3a6715cd..0bd1789ba 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/PreCompilerBuilder.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/PreCompilerBuilder.java @@ -24,8 +24,8 @@ import com.android.ide.eclipse.adt.internal.project.AndroidManifestHelper; import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper; import com.android.ide.eclipse.adt.internal.project.FixLaunchConfig; import com.android.ide.eclipse.adt.internal.project.ProjectHelper; -import com.android.ide.eclipse.adt.internal.project.ProjectState; import com.android.ide.eclipse.adt.internal.project.XmlErrorHandler.BasicXmlErrorListener; +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.ide.eclipse.adt.io.IFolderWrapper; @@ -47,7 +47,6 @@ import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.jdt.core.IJavaProject; @@ -252,6 +251,10 @@ public class PreCompilerBuilder extends BaseBuilder { if (kind == FULL_BUILD) { AdtPlugin.printBuildToConsole(BuildVerbosity.VERBOSE, project, Messages.Start_Full_Pre_Compiler); + + // do some clean up. + doClean(project, monitor); + mMustCompileResources = true; buildAidlCompilationList(project, sourceFolderPathList); } else { @@ -478,15 +481,16 @@ public class PreCompilerBuilder extends BaseBuilder { flc.start(); } - // now we delete the generated classes from their previous location - deleteObsoleteGeneratedClass(AndroidConstants.FN_RESOURCE_CLASS, - mManifestPackage); - deleteObsoleteGeneratedClass(AndroidConstants.FN_MANIFEST_CLASS, - mManifestPackage); - // record the new manifest package, and save it. mManifestPackage = javaPackage; saveProjectStringProperty(PROPERTY_PACKAGE, mManifestPackage); + + // force a clean + doClean(project, monitor); + mMustCompileResources = true; + buildAidlCompilationList(project, sourceFolderPathList); + + saveProjectBooleanProperty(PROPERTY_COMPILE_RESOURCES , mMustCompileResources); } if (mMustCompileResources) { @@ -513,19 +517,26 @@ public class PreCompilerBuilder extends BaseBuilder { protected void clean(IProgressMonitor monitor) throws CoreException { super.clean(monitor); - // Get the project. - IProject project = getProject(); + doClean(getProject(), monitor); + if (mGenFolder != null) { + mGenFolder.refreshLocal(IResource.DEPTH_INFINITE, monitor); + } + } + private void doClean(IProject project, IProgressMonitor monitor) throws CoreException { AdtPlugin.printBuildToConsole(BuildVerbosity.VERBOSE, project, Messages.Removing_Generated_Classes); // remove all the derived resources from the 'gen' source folder. - removeDerivedResources(mGenFolder, monitor); + if (mGenFolder != null) { + removeDerivedResources(mGenFolder, monitor); + } // Clear the project of the generic markers removeMarkersFromProject(project, AndroidConstants.MARKER_AAPT_COMPILE); removeMarkersFromProject(project, AndroidConstants.MARKER_XML); removeMarkersFromProject(project, AndroidConstants.MARKER_AIDL); + } @Override @@ -662,7 +673,7 @@ public class PreCompilerBuilder extends BaseBuilder { // we actually need to delete the manifest.java as it may become empty and // in this case aapt doesn't generate an empty one, but instead doesn't // touch it. - manifestJavaFile.delete(true, null); + manifestJavaFile.getLocation().toFile().delete(); // launch aapt: create the command line ArrayList array = new ArrayList(); @@ -784,40 +795,6 @@ public class PreCompilerBuilder extends BaseBuilder { } /** - * Delete the a generated java class associated with the specified java package. - * @param filename Name of the generated file to remove. - * @param javaPackage the old java package - */ - private void deleteObsoleteGeneratedClass(String filename, String javaPackage) { - if (javaPackage == null) { - return; - } - - IPath packagePath = getJavaPackagePath(javaPackage); - IPath iPath = packagePath.append(filename); - - // Find a matching resource object. - IResource javaFile = mGenFolder.findMember(iPath); - if (javaFile != null && javaFile.exists() && javaFile.getType() == IResource.FILE) { - try { - // delete - javaFile.delete(true, null); - - // refresh parent - javaFile.getParent().refreshLocal(IResource.DEPTH_ONE, new NullProgressMonitor()); - - } catch (CoreException e) { - // failed to delete it, the user will have to delete it manually. - String message = String.format(Messages.Delete_Obsolete_Error, - javaFile.getFullPath()); - IProject project = getProject(); - AdtPlugin.printErrorToConsole(project, message); - AdtPlugin.printErrorToConsole(project, e.getMessage()); - } - } - } - - /** * Creates a relative {@link IPath} from a java package. * @param javaPackageName the java package. */ @@ -951,10 +928,7 @@ public class PreCompilerBuilder extends BaseBuilder { if (javaFile.exists()) { // This confirms the java file was generated by the builder, // we can delete the aidlFile. - javaFile.delete(true, null); - - // Refresh parent. - javaFile.getParent().refreshLocal(IResource.DEPTH_ONE, monitor); + javaFile.getLocation().toFile().delete(); } } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/ResourceManagerBuilder.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/ResourceManagerBuilder.java index fe6ac8a12..871b4b811 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/ResourceManagerBuilder.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/ResourceManagerBuilder.java @@ -198,7 +198,7 @@ public class ResourceManagerBuilder extends BaseBuilder { javaProject.setRawClasspath(entries, new SubProgressMonitor(monitor, 10)); } - // refresh sepcifcally the gen folder first, as it may break the build + // refresh specifically the gen folder first, as it may break the build // if it doesn't arrive in time then refresh the whole project as usual. genFolder.refreshLocal(IResource.DEPTH_ZERO, new SubProgressMonitor(monitor, 10)); project.refreshLocal(IResource.DEPTH_INFINITE, new SubProgressMonitor(monitor, 10)); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutReloadMonitor.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutReloadMonitor.java index f36d00146..ca58dce50 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutReloadMonitor.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutReloadMonitor.java @@ -18,7 +18,6 @@ package com.android.ide.eclipse.adt.internal.editors.layout; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.AndroidConstants; -import com.android.ide.eclipse.adt.internal.project.ProjectState; import com.android.ide.eclipse.adt.internal.resources.ResourceType; import com.android.ide.eclipse.adt.internal.resources.manager.GlobalProjectMonitor; import com.android.ide.eclipse.adt.internal.resources.manager.ResourceFile; @@ -27,6 +26,7 @@ import com.android.ide.eclipse.adt.internal.resources.manager.ResourceManager; import com.android.ide.eclipse.adt.internal.resources.manager.GlobalProjectMonitor.IFileListener; import com.android.ide.eclipse.adt.internal.resources.manager.GlobalProjectMonitor.IResourceEventListener; import com.android.ide.eclipse.adt.internal.resources.manager.ResourceManager.IResourceListener; +import com.android.ide.eclipse.adt.internal.sdk.ProjectState; import com.android.ide.eclipse.adt.internal.sdk.Sdk; import org.eclipse.core.resources.IFile; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/pages/OverviewExportPart.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/pages/OverviewExportPart.java index 4c75a86c6..138f0b170 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/pages/OverviewExportPart.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/pages/OverviewExportPart.java @@ -19,7 +19,7 @@ package com.android.ide.eclipse.adt.internal.editors.manifest.pages; import com.android.ide.eclipse.adt.internal.editors.manifest.ManifestEditor; import com.android.ide.eclipse.adt.internal.editors.ui.SectionHelper.ManifestSectionPart; import com.android.ide.eclipse.adt.internal.project.ExportHelper; -import com.android.ide.eclipse.adt.internal.project.ProjectState; +import com.android.ide.eclipse.adt.internal.sdk.ProjectState; import com.android.ide.eclipse.adt.internal.sdk.Sdk; import org.eclipse.core.resources.IFile; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/LaunchShortcut.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/LaunchShortcut.java index 432827eca..3c72d016b 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/LaunchShortcut.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/LaunchShortcut.java @@ -16,7 +16,7 @@ package com.android.ide.eclipse.adt.internal.launch; -import com.android.ide.eclipse.adt.internal.project.ProjectState; +import com.android.ide.eclipse.adt.internal.sdk.ProjectState; import com.android.ide.eclipse.adt.internal.sdk.Sdk; import org.eclipse.core.resources.IProject; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerInitializer.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerInitializer.java index b665a53dc..9c5fd1ea7 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerInitializer.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerInitializer.java @@ -19,6 +19,7 @@ package com.android.ide.eclipse.adt.internal.project; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.AndroidConstants; import com.android.ide.eclipse.adt.internal.sdk.LoadStatus; +import com.android.ide.eclipse.adt.internal.sdk.ProjectState; import com.android.ide.eclipse.adt.internal.sdk.Sdk; import com.android.sdklib.IAndroidTarget; import com.android.sdklib.SdkConstants; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/ProjectChooserHelper.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/ProjectChooserHelper.java index aa5813a89..2b80d3125 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/ProjectChooserHelper.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/ProjectChooserHelper.java @@ -17,6 +17,7 @@ package com.android.ide.eclipse.adt.internal.project; import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper.IProjectFilter; +import com.android.ide.eclipse.adt.internal.sdk.ProjectState; import com.android.ide.eclipse.adt.internal.sdk.Sdk; import org.eclipse.core.resources.IProject; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/properties/AndroidPropertyPage.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/properties/AndroidPropertyPage.java index ba6997729..554d64db1 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/properties/AndroidPropertyPage.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/properties/AndroidPropertyPage.java @@ -17,7 +17,7 @@ package com.android.ide.eclipse.adt.internal.properties; import com.android.ide.eclipse.adt.AdtPlugin; -import com.android.ide.eclipse.adt.internal.project.ProjectState; +import com.android.ide.eclipse.adt.internal.sdk.ProjectState; import com.android.ide.eclipse.adt.internal.sdk.Sdk; import com.android.sdklib.IAndroidTarget; import com.android.sdklib.SdkConstants; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/properties/LibraryProperties.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/properties/LibraryProperties.java index 1f5f2c6b4..666127e71 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/properties/LibraryProperties.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/properties/LibraryProperties.java @@ -18,10 +18,10 @@ package com.android.ide.eclipse.adt.internal.properties; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.project.ProjectChooserHelper; -import com.android.ide.eclipse.adt.internal.project.ProjectState; import com.android.ide.eclipse.adt.internal.project.ProjectChooserHelper.IProjectChooserFilter; -import com.android.ide.eclipse.adt.internal.project.ProjectState.LibraryState; +import com.android.ide.eclipse.adt.internal.sdk.ProjectState; import com.android.ide.eclipse.adt.internal.sdk.Sdk; +import com.android.ide.eclipse.adt.internal.sdk.ProjectState.LibraryState; import com.android.sdklib.internal.project.ProjectProperties; import com.android.sdklib.internal.project.ProjectPropertiesWorkingCopy; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ProjectResources.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ProjectResources.java index fb00824f7..d3f119057 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ProjectResources.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ProjectResources.java @@ -16,7 +16,6 @@ package com.android.ide.eclipse.adt.internal.resources.manager; -import com.android.ide.eclipse.adt.internal.project.ProjectState; import com.android.ide.eclipse.adt.internal.resources.IResourceRepository; import com.android.ide.eclipse.adt.internal.resources.ResourceItem; import com.android.ide.eclipse.adt.internal.resources.ResourceType; @@ -24,6 +23,7 @@ import com.android.ide.eclipse.adt.internal.resources.configurations.FolderConfi import com.android.ide.eclipse.adt.internal.resources.configurations.LanguageQualifier; import com.android.ide.eclipse.adt.internal.resources.configurations.RegionQualifier; import com.android.ide.eclipse.adt.internal.resources.configurations.ResourceQualifier; +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.IFolderWrapper; import com.android.layoutlib.api.IResourceValue; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/ProjectState.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/ProjectState.java similarity index 99% rename from eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/ProjectState.java rename to eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/ProjectState.java index d5cddc1db..05045a2c1 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/ProjectState.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/sdk/ProjectState.java @@ -14,10 +14,9 @@ * limitations under the License. */ -package com.android.ide.eclipse.adt.internal.project; +package com.android.ide.eclipse.adt.internal.sdk; import com.android.ide.eclipse.adt.AdtPlugin; -import com.android.ide.eclipse.adt.internal.sdk.Sdk; import com.android.sdklib.IAndroidTarget; import com.android.sdklib.internal.project.ApkSettings; import com.android.sdklib.internal.project.ProjectProperties; @@ -173,7 +172,7 @@ public final class ProjectState { */ private final ArrayList mParentProjects = new ArrayList(); - public ProjectState(IProject project, ProjectProperties properties) { + ProjectState(IProject project, ProjectProperties properties) { if (project == null || properties == null) { throw new NullPointerException(); } 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 9db385a1f..02b538e83 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 @@ -21,14 +21,13 @@ import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.project.AndroidClasspathContainerInitializer; 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.ProjectState; -import com.android.ide.eclipse.adt.internal.project.ProjectState.LibraryDifference; -import com.android.ide.eclipse.adt.internal.project.ProjectState.LibraryState; import com.android.ide.eclipse.adt.internal.resources.manager.GlobalProjectMonitor; import com.android.ide.eclipse.adt.internal.resources.manager.GlobalProjectMonitor.IFileListener; import com.android.ide.eclipse.adt.internal.resources.manager.GlobalProjectMonitor.IProjectListener; import com.android.ide.eclipse.adt.internal.resources.manager.GlobalProjectMonitor.IResourceEventListener; import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetData.LayoutBridge; +import com.android.ide.eclipse.adt.internal.sdk.ProjectState.LibraryDifference; +import com.android.ide.eclipse.adt.internal.sdk.ProjectState.LibraryState; import com.android.prefs.AndroidLocation.AndroidLocationException; import com.android.sdklib.AndroidVersion; import com.android.sdklib.IAndroidTarget; @@ -50,6 +49,7 @@ import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.IncrementalProjectBuilder; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; @@ -1004,6 +1004,7 @@ public final class Sdk { private interface ActionBundle { enum BundleType { LINK_LIBRARY, UNLINK_LIBRARY }; BundleType getType(); + IProject getProject(); }; /** @@ -1028,6 +1029,10 @@ public final class Sdk { return BundleType.LINK_LIBRARY; } + public IProject getProject() { + return mProject; + } + @Override public String toString() { return String.format("LinkLibraryBundle: %1$s (%2$s) > %3$s", //$NON-NLS-1$ @@ -1056,6 +1061,10 @@ public final class Sdk { public BundleType getType() { return BundleType.UNLINK_LIBRARY; } + + public IProject getProject() { + return mProject.getProject(); + } } private final ArrayList mActionBundleQueue = new ArrayList(); @@ -1107,6 +1116,11 @@ public final class Sdk { unlinkLibrary((UnlinkLibraryBundle) bundle, monitor); break; } + + // force a recompile + bundle.getProject().build( + IncrementalProjectBuilder.FULL_BUILD, monitor); + } catch (Exception e) { AdtPlugin.log(e, "Failed to process bundle: %1$s", //$NON-NLS-1$ bundle.toString()); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/actions/ExportAction.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/actions/ExportAction.java index c33168094..40edc5e5d 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/actions/ExportAction.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/actions/ExportAction.java @@ -17,7 +17,7 @@ package com.android.ide.eclipse.adt.internal.wizards.actions; import com.android.ide.eclipse.adt.internal.project.ExportHelper; -import com.android.ide.eclipse.adt.internal.project.ProjectState; +import com.android.ide.eclipse.adt.internal.sdk.ProjectState; import com.android.ide.eclipse.adt.internal.sdk.Sdk; import org.eclipse.core.resources.IProject; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/actions/ExportWizardAction.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/actions/ExportWizardAction.java index cfdab0f19..dc5dbeb65 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/actions/ExportWizardAction.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/actions/ExportWizardAction.java @@ -16,7 +16,7 @@ package com.android.ide.eclipse.adt.internal.wizards.actions; -import com.android.ide.eclipse.adt.internal.project.ProjectState; +import com.android.ide.eclipse.adt.internal.sdk.ProjectState; import com.android.ide.eclipse.adt.internal.sdk.Sdk; import com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard; diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/export/KeyCheckPage.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/export/KeyCheckPage.java index d9e02053b..d247b781c 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/export/KeyCheckPage.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/export/KeyCheckPage.java @@ -17,7 +17,7 @@ package com.android.ide.eclipse.adt.internal.wizards.export; import com.android.ide.eclipse.adt.internal.project.ProjectHelper; -import com.android.ide.eclipse.adt.internal.project.ProjectState; +import com.android.ide.eclipse.adt.internal.sdk.ProjectState; import com.android.ide.eclipse.adt.internal.sdk.Sdk; import com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.ExportWizardPage; import com.android.sdklib.internal.project.ApkSettings; -- 2.11.0