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()) {
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;
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
// 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();
}