From 8fa568349cdfcf075f1f6ca98f33579f209b3326 Mon Sep 17 00:00:00 2001 From: Xavier Ducrohet Date: Wed, 17 Aug 2011 19:07:53 -0700 Subject: [PATCH] Fix issues related to the new output folder for ADT and JDT. The android output folder is hard-coded to bin/ for now The Java output folder is hard-coded to bin/classes. Projects that are opened and that don't have that exact setup are converted. Also make sure bin/res is created when the builders are run. Change-Id: Id5de887710ed951b53218a73e5962a9b079cb176 --- .../build/builders/ResourceManagerBuilder.java | 9 ++++ .../adt/internal/project/BaseProjectHelper.java | 19 +------- .../android/ide/eclipse/adt/internal/sdk/Sdk.java | 56 ++++++++++++---------- 3 files changed, 42 insertions(+), 42 deletions(-) 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 856d3fc44..630a83bb3 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 @@ -211,6 +211,15 @@ public class ResourceManagerBuilder extends BaseBuilder { project.refreshLocal(IResource.DEPTH_INFINITE, new SubProgressMonitor(monitor, 10)); } + // check that we have bin/res/ + IFolder androidOutput = BaseProjectHelper.getAndroidOutputFolder(project); + IFolder binResFolder = androidOutput.getFolder(SdkConstants.FD_RESOURCES); + if (binResFolder.exists() == false) { + binResFolder.create(true /* force */, true /* local */, + new SubProgressMonitor(monitor, 10)); + project.refreshLocal(IResource.DEPTH_ONE, new SubProgressMonitor(monitor, 10)); + } + // Check the preference to be sure we are supposed to refresh // the folders. if (AdtPrefs.getPrefs().getBuildForceResResfresh()) { diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/BaseProjectHelper.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/BaseProjectHelper.java index f2242e07a..b1a472533 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/BaseProjectHelper.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/BaseProjectHelper.java @@ -18,6 +18,7 @@ package com.android.ide.eclipse.adt.internal.project; import com.android.ide.eclipse.adt.AdtConstants; import com.android.ide.eclipse.adt.AdtPlugin; +import com.android.sdklib.SdkConstants; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IMarker; @@ -497,23 +498,7 @@ public final class BaseProjectHelper { public final static IFolder getAndroidOutputFolder(IProject project) { try { if (project.isOpen() && project.hasNature(JavaCore.NATURE_ID)) { - // get a java project from the normal project object - IJavaProject javaProject = JavaCore.create(project); - - IPath path = javaProject.getOutputLocation(); - IWorkspaceRoot wsRoot = ResourcesPlugin.getWorkspace().getRoot(); - IResource outputResource = wsRoot.findMember(path); - - if (outputResource != null) { // really shouldn't happen - // if the output folder is directly a child of the project, - // then use it directly. - if (outputResource.getParent().equals(project)) { - return (IFolder) outputResource; - } - - // otherwise returns the parent folder of the java output folder. - return (IFolder) outputResource.getParent(); - } + return project.getFolder(SdkConstants.FD_OUTPUT); } } catch (JavaModelException e) { // Let's do nothing and return null 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 6d476d958..d7c7099ff 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 @@ -862,35 +862,41 @@ public final class Sdk { // convert older projects which use bin as the eclipse output folder into projects // using bin/classes - IFolder javaOutput = BaseProjectHelper.getJavaOutputFolder(openedProject); - IFolder androidOutput = BaseProjectHelper.getAndroidOutputFolder(openedProject); - if (javaOutput.equals(androidOutput)) { - final IFolder newJavaOutput = javaOutput.getFolder(SdkConstants.FD_CLASSES_OUTPUT); - if (newJavaOutput.exists() == false) { - Job job = new Job("Project bin convertion") { - @Override - protected IStatus run(IProgressMonitor monitor) { - try { - newJavaOutput.create(true /*force*/, true /*local*/, - monitor); - - // set the java output to this project. - IJavaProject javaProject = JavaCore.create(openedProject); - javaProject.setOutputLocation(newJavaOutput.getFullPath(), - monitor); - - openedProject.build(IncrementalProjectBuilder.CLEAN_BUILD, monitor); - } catch (CoreException e) { - return e.getStatus(); + final IFolder androidOutput = BaseProjectHelper.getAndroidOutputFolder(openedProject); + final IFolder javaOutput = BaseProjectHelper.getJavaOutputFolder(openedProject); + if (androidOutput.exists() == false || + javaOutput.getParent().equals(androidOutput) == false) { + // get what we want as the new java output. + final IFolder newJavaOutput = androidOutput.getFolder( + SdkConstants.FD_CLASSES_OUTPUT); + + // start a job to do resource change (which can't be done in that callback.) + Job job = new Job("Project bin convertion") { + @Override + protected IStatus run(IProgressMonitor monitor) { + try { + if (androidOutput.exists() == false) { + androidOutput.create(true /*force*/, true /*local*/, monitor); + } + + if (newJavaOutput.exists() == false) { + newJavaOutput.create(true /*force*/, true /*local*/, monitor); } - return Status.OK_STATUS; + // set the java output to this project. + IJavaProject javaProject = JavaCore.create(openedProject); + javaProject.setOutputLocation(newJavaOutput.getFullPath(), monitor); + + openedProject.build(IncrementalProjectBuilder.CLEAN_BUILD, monitor); + } catch (CoreException e) { + return e.getStatus(); } - }; - job.setPriority(Job.BUILD); // build jobs are run after other interactive jobs - job.schedule(); - } + return Status.OK_STATUS; + } + }; + job.setPriority(Job.BUILD); // build jobs are run after other interactive jobs + job.schedule(); } -- 2.11.0