Make CompiledResourcesMonitor#getRClassName more error proof.

This commit is contained in:
Xavier Ducrohet
2009-05-29 15:01:18 -07:00
parent e0fbae303c
commit 3106768f31
2 changed files with 134 additions and 130 deletions

View File

@@ -670,22 +670,23 @@ public class AndroidManifestParser {
boolean markErrors) boolean markErrors)
throws CoreException { throws CoreException {
try { try {
SAXParser parser = sParserFactory.newSAXParser(); if (manifestFile != null) {
SAXParser parser = sParserFactory.newSAXParser();
ManifestHandler manifestHandler = new ManifestHandler(manifestFile, ManifestHandler manifestHandler = new ManifestHandler(manifestFile,
errorListener, gatherData, javaProject, markErrors); errorListener, gatherData, javaProject, markErrors);
parser.parse(new InputSource(manifestFile.getContents()), manifestHandler); parser.parse(new InputSource(manifestFile.getContents()), manifestHandler);
// get the result from the handler // get the result from the handler
return new AndroidManifestParser(manifestHandler.getPackage(),
return new AndroidManifestParser(manifestHandler.getPackage(), manifestHandler.getActivities(),
manifestHandler.getActivities(), manifestHandler.getLauncherActivity(),
manifestHandler.getLauncherActivity(), manifestHandler.getProcesses(),
manifestHandler.getProcesses(), manifestHandler.getDebuggable(),
manifestHandler.getDebuggable(), manifestHandler.getApiLevelRequirement(),
manifestHandler.getApiLevelRequirement(), manifestHandler.getInstrumentations(),
manifestHandler.getInstrumentations(), manifestHandler.getUsesLibraries());
manifestHandler.getUsesLibraries()); }
} catch (ParserConfigurationException e) { } catch (ParserConfigurationException e) {
AdtPlugin.logAndPrintError(e, AndroidManifestParser.class.getCanonicalName(), AdtPlugin.logAndPrintError(e, AndroidManifestParser.class.getCanonicalName(),
"Bad parser configuration for %s: %s", "Bad parser configuration for %s: %s",

View File

@@ -26,6 +26,7 @@ import com.android.ide.eclipse.adt.internal.resources.manager.ResourceMonitor.IP
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarkerDelta; import org.eclipse.core.resources.IMarkerDelta;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.IStatus;
@@ -216,10 +217,12 @@ public final class CompiledResourcesMonitor implements IFileListener, IProjectLi
private String getRClassName(IProject project) { private String getRClassName(IProject project) {
try { try {
IFile manifestFile = AndroidManifestParser.getManifest(project); IFile manifestFile = AndroidManifestParser.getManifest(project);
AndroidManifestParser data = AndroidManifestParser.parseForData(manifestFile); if (manifestFile != null && manifestFile.isSynchronized(IResource.DEPTH_ZERO)) {
if (data != null) { AndroidManifestParser data = AndroidManifestParser.parseForData(manifestFile);
String javaPackage = data.getPackage(); if (data != null) {
return javaPackage + ".R"; //$NON-NLS-1$ String javaPackage = data.getPackage();
return javaPackage + ".R"; //$NON-NLS-1$
}
} }
} catch (CoreException e) { } catch (CoreException e) {
// This will typically happen either because the manifest file is not present // This will typically happen either because the manifest file is not present