ResourceManagerBuilder.java revision 96ab96b1964cd20588834a8d81e74db7b3f3a5d8
155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project/* 255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * 455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Licensed under the Eclipse Public License, Version 1.0 (the "License"); 555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * you may not use this file except in compliance with the License. 655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * You may obtain a copy of the License at 755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * 855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * http://www.eclipse.org/org/documents/epl-v10.php 955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * 1055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * See the License for the specific language governing permissions and 1455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * limitations under the License. 1555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 1655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 1785211cd176c655f245e46b753926089adaf2a6fdXavier Ducrohetpackage com.android.ide.eclipse.adt.internal.build; 1855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 1955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ide.eclipse.adt.AdtPlugin; 2085211cd176c655f245e46b753926089adaf2a6fdXavier Ducrohetimport com.android.ide.eclipse.adt.AndroidConstants; 21b26699c2e42ff60ce56a07e2550e42223c5cc361Xavier Ducrohetimport com.android.ide.eclipse.adt.internal.preferences.AdtPrefs; 22b26699c2e42ff60ce56a07e2550e42223c5cc361Xavier Ducrohetimport com.android.ide.eclipse.adt.internal.preferences.AdtPrefs.BuildVerbosity; 23f2880494706ad8dfd43e21471096216be4ca7c69Xavier Ducrohetimport com.android.ide.eclipse.adt.internal.project.BaseProjectHelper; 2499b9ad2143e5e9e626879309ecc6f883403bdcaeXavier Ducrohetimport com.android.ide.eclipse.adt.internal.project.ProjectHelper; 25f2880494706ad8dfd43e21471096216be4ca7c69Xavier Ducrohetimport com.android.ide.eclipse.adt.internal.sdk.Sdk; 2655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.sdklib.IAndroidTarget; 2767dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Projectimport com.android.sdklib.SdkConstants; 2855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 2955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.core.resources.IFolder; 3055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.core.resources.IMarker; 3155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.core.resources.IProject; 3255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.core.resources.IResource; 3367dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Projectimport org.eclipse.core.resources.IWorkspaceRoot; 3467dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Projectimport org.eclipse.core.resources.ResourcesPlugin; 3555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.core.runtime.CoreException; 3667dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Projectimport org.eclipse.core.runtime.IPath; 3755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.core.runtime.IProgressMonitor; 3867dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Projectimport org.eclipse.core.runtime.SubProgressMonitor; 3967dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Projectimport org.eclipse.jdt.core.IClasspathEntry; 4067dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Projectimport org.eclipse.jdt.core.IJavaProject; 4167dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Projectimport org.eclipse.jdt.core.JavaCore; 4255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 4367dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Projectimport java.util.ArrayList; 4455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport java.util.Map; 4555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 4655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project/** 4755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Resource manager builder whose only purpose is to refresh the resource folder 4855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * so that the other builder use an up to date version. 4955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 5055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectpublic class ResourceManagerBuilder extends BaseBuilder { 5155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 5255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public static final String ID = "com.android.ide.eclipse.adt.ResourceManagerBuilder"; //$NON-NLS-1$ 5355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 5455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public ResourceManagerBuilder() { 5555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project super(); 5655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 5755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 589a68767a27170689fd647276cb0b082d192448fdXavier Ducrohet @Override 599a68767a27170689fd647276cb0b082d192448fdXavier Ducrohet protected void clean(IProgressMonitor monitor) throws CoreException { 609a68767a27170689fd647276cb0b082d192448fdXavier Ducrohet super.clean(monitor); 619a68767a27170689fd647276cb0b082d192448fdXavier Ducrohet 629a68767a27170689fd647276cb0b082d192448fdXavier Ducrohet // Get the project. 639a68767a27170689fd647276cb0b082d192448fdXavier Ducrohet IProject project = getProject(); 649a68767a27170689fd647276cb0b082d192448fdXavier Ducrohet 659a68767a27170689fd647276cb0b082d192448fdXavier Ducrohet // Clear the project of the generic markers 669a68767a27170689fd647276cb0b082d192448fdXavier Ducrohet removeMarkersFromProject(project, AndroidConstants.MARKER_ADT); 679a68767a27170689fd647276cb0b082d192448fdXavier Ducrohet } 689a68767a27170689fd647276cb0b082d192448fdXavier Ducrohet 6955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // build() returns a list of project from which this project depends for future compilation. 700cae8d05fb387d895254779475fe15d39fe322abRicky Ng-Adam @SuppressWarnings("unchecked") 7155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 7255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project protected IProject[] build(int kind, Map args, IProgressMonitor monitor) 7355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project throws CoreException { 7455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Get the project. 7555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project IProject project = getProject(); 769e2ff90642669592f832d9f1cb56cc6871d5aaabXavier Ducrohet IJavaProject javaProject = JavaCore.create(project); 7755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 7855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Clear the project of the generic markers 79b26699c2e42ff60ce56a07e2550e42223c5cc361Xavier Ducrohet removeMarkersFromProject(project, AndroidConstants.MARKER_ADT); 802fb27a8d7f3c4636c775377cd09fa6b00c077440Xavier Ducrohet 8167dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project // check for existing target marker, in which case we abort. 8267dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project // (this means: no SDK, no target, or unresolvable target.) 839e2ff90642669592f832d9f1cb56cc6871d5aaabXavier Ducrohet abortOnBadSetup(javaProject); 8455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 8555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Check the compiler compliance level, displaying the error message 8655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // since this is the first builder. 8755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project int res = ProjectHelper.checkCompilerCompliance(project); 8855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project String errorMessage = null; 8955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project switch (res) { 9055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project case ProjectHelper.COMPILER_COMPLIANCE_LEVEL: 9155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project errorMessage = Messages.Requires_Compiler_Compliance_5; 9255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project case ProjectHelper.COMPILER_COMPLIANCE_SOURCE: 9355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project errorMessage = Messages.Requires_Source_Compatibility_5; 9455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project case ProjectHelper.COMPILER_COMPLIANCE_CODEGEN_TARGET: 9555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project errorMessage = Messages.Requires_Class_Compatibility_5; 9655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 9755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 9855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (errorMessage != null) { 99b26699c2e42ff60ce56a07e2550e42223c5cc361Xavier Ducrohet markProject(AndroidConstants.MARKER_ADT, errorMessage, IMarker.SEVERITY_ERROR); 10055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project AdtPlugin.printErrorToConsole(project, errorMessage); 1012fb27a8d7f3c4636c775377cd09fa6b00c077440Xavier Ducrohet 10255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // interrupt the build. The next builders will not run. 10355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project stopBuild(errorMessage); 10455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 10555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 10655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Check that the SDK directory has been setup. 10755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project String osSdkFolder = AdtPlugin.getOsSdkFolder(); 10855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 10955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (osSdkFolder == null || osSdkFolder.length() == 0) { 11067dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project AdtPlugin.printErrorToConsole(project, Messages.No_SDK_Setup_Error); 111b26699c2e42ff60ce56a07e2550e42223c5cc361Xavier Ducrohet markProject(AndroidConstants.MARKER_ADT, Messages.No_SDK_Setup_Error, 11255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project IMarker.SEVERITY_ERROR); 11355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 11455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // This interrupts the build. The next builders will not run. 11555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project stopBuild(Messages.No_SDK_Setup_Error); 11655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 11755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 11855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // check the project has a target 11955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project IAndroidTarget projectTarget = Sdk.getCurrent().getTarget(project); 12055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (projectTarget == null) { 12155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // no target. marker has been set by the container initializer: exit silently. 12255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // This interrupts the build. The next builders will not run. 12355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project stopBuild("Project has no target"); 12455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 1252fb27a8d7f3c4636c775377cd09fa6b00c077440Xavier Ducrohet 12667dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project // check the 'gen' source folder is present 12767dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project boolean hasGenSrcFolder = false; // whether the project has a 'gen' source folder setup 1282fb27a8d7f3c4636c775377cd09fa6b00c077440Xavier Ducrohet 12967dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project IClasspathEntry[] classpaths = javaProject.readRawClasspath(); 13067dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project if (classpaths != null) { 13167dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project for (IClasspathEntry e : classpaths) { 13267dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project if (e.getEntryKind() == IClasspathEntry.CPE_SOURCE) { 13367dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project IPath path = e.getPath(); 13467dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project if (path.segmentCount() == 2 && 13567dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project path.segment(1).equals(SdkConstants.FD_GEN_SOURCES)) { 13667dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project hasGenSrcFolder = true; 13767dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project break; 13867dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project } 13967dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project } 14067dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project } 14167dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project } 14267dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project 14367dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project boolean genFolderPresent = false; // whether the gen folder actually exists 14467dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project IResource resource = project.findMember(SdkConstants.FD_GEN_SOURCES); 14567dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project genFolderPresent = resource != null && resource.exists(); 1462fb27a8d7f3c4636c775377cd09fa6b00c077440Xavier Ducrohet 14767dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project if (hasGenSrcFolder == false && genFolderPresent) { 14867dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project // No source folder setup for 'gen' in the project, but there's already a 14967dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project // 'gen' resource (file or folder). 15067dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project String message; 15167dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project if (resource.getType() == IResource.FOLDER) { 15267dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project // folder exists already! This is an error. If the folder had been created 15367dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project // by the NewProjectWizard, it'd be a source folder. 15467dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project message = String.format("%1$s already exists but is not a source folder. Convert to a source folder or rename it.", 15567dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project resource.getFullPath().toString()); 15667dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project } else { 15767dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project // resource exists but is not a folder. 15867dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project message = String.format( 15967dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project "Resource %1$s is in the way. ADT needs a source folder called 'gen' to work. Rename or delete resource.", 16067dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project resource.getFullPath().toString()); 16167dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project } 16267dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project 16367dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project AdtPlugin.printErrorToConsole(project, message); 164b26699c2e42ff60ce56a07e2550e42223c5cc361Xavier Ducrohet markProject(AndroidConstants.MARKER_ADT, message, IMarker.SEVERITY_ERROR); 16567dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project 16667dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project // This interrupts the build. The next builders will not run. 16767dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project stopBuild(message); 16867dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project } else if (hasGenSrcFolder == false || genFolderPresent == false) { 16967dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project // either there is no 'gen' source folder in the project (older SDK), 17067dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project // or the folder does not exist (was deleted, or was a fresh svn checkout maybe.) 17167dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project 17267dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project // In case we are migrating from an older SDK, we go through the current source 17367dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project // folders and delete the generated Java files. 17467dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project ArrayList<IPath> sourceFolders = BaseProjectHelper.getSourceClasspaths(javaProject); 17567dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); 17667dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project for (IPath path : sourceFolders) { 17767dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project IResource member = root.findMember(path); 17867dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project if (member != null) { 17967dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project removeDerivedResources(member, monitor); 18067dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project } 18167dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project } 18267dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project 18367dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project // create the new source folder, if needed 18467dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project IFolder genFolder = project.getFolder(SdkConstants.FD_GEN_SOURCES); 18567dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project if (genFolderPresent == false) { 186b26699c2e42ff60ce56a07e2550e42223c5cc361Xavier Ducrohet AdtPlugin.printBuildToConsole(BuildVerbosity.VERBOSE, project, 18767dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project "Creating 'gen' source folder for generated Java files"); 18867dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project genFolder.create(true /* force */, true /* local */, 18967dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project new SubProgressMonitor(monitor, 10)); 19045aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project genFolder.setDerived(true); 19167dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project } 1922fb27a8d7f3c4636c775377cd09fa6b00c077440Xavier Ducrohet 19367dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project // add it to the source folder list, if needed only (or it will throw) 19467dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project if (hasGenSrcFolder == false) { 19567dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project IClasspathEntry[] entries = javaProject.getRawClasspath(); 19667dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project entries = ProjectHelper.addEntryToClasspath(entries, 19767dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project JavaCore.newSourceEntry(genFolder.getFullPath())); 19867dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project javaProject.setRawClasspath(entries, new SubProgressMonitor(monitor, 10)); 19967dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project } 2002fb27a8d7f3c4636c775377cd09fa6b00c077440Xavier Ducrohet 20196ab96b1964cd20588834a8d81e74db7b3f3a5d8Raphael // refresh sepcifcally the gen folder first, as it may break the build 20296ab96b1964cd20588834a8d81e74db7b3f3a5d8Raphael // if it doesn't arrive in time then refresh the whole project as usual. 20396ab96b1964cd20588834a8d81e74db7b3f3a5d8Raphael genFolder.refreshLocal(IResource.DEPTH_ZERO, new SubProgressMonitor(monitor, 10)); 20467dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project project.refreshLocal(IResource.DEPTH_INFINITE, new SubProgressMonitor(monitor, 10)); 20567dc23a61d888ba1b39fe6ed23d9f4d1a3df80eeThe Android Open Source Project } 20655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 20755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Check the preference to be sure we are supposed to refresh 20855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // the folders. 209b26699c2e42ff60ce56a07e2550e42223c5cc361Xavier Ducrohet if (AdtPrefs.getPrefs().getBuildForceResResfresh()) { 210b26699c2e42ff60ce56a07e2550e42223c5cc361Xavier Ducrohet AdtPlugin.printBuildToConsole(BuildVerbosity.VERBOSE, project, Messages.Refreshing_Res); 21155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 21255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // refresh the res folder. 213b26699c2e42ff60ce56a07e2550e42223c5cc361Xavier Ducrohet IFolder resFolder = project.getFolder(AndroidConstants.WS_RESOURCES); 21455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project resFolder.refreshLocal(IResource.DEPTH_INFINITE, monitor); 21555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 21655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Also refresh the assets folder to make sure the ApkBuilder 21755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // will now it's changed and will force a new resource packaging. 218b26699c2e42ff60ce56a07e2550e42223c5cc361Xavier Ducrohet IFolder assetsFolder = project.getFolder(AndroidConstants.WS_ASSETS); 21955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project assetsFolder.refreshLocal(IResource.DEPTH_INFINITE, monitor); 22055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 22155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 22255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return null; 22355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 22455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project} 225