diff options
10 files changed, 135 insertions, 102 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/plugin.xml b/eclipse/plugins/com.android.ide.eclipse.adt/plugin.xml index 4bafdebac..a4d0666ac 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/plugin.xml +++ b/eclipse/plugins/com.android.ide.eclipse.adt/plugin.xml @@ -313,6 +313,13 @@ <persistent value="false"/> </extension> <extension + id="com.android.ide.eclipse.adt.packagingProblem" + name="Android Packaging Problem" + point="org.eclipse.core.resources.markers"> + <super type="org.eclipse.core.resources.problemmarker"/> + <persistent value="true"/> + </extension> + <extension point="org.eclipse.ui.perspectiveExtensions"> <perspectiveExtension targetID="org.eclipse.jdt.ui.JavaPerspective"> <newWizardShortcut id="com.android.ide.eclipse.adt.project.NewProjectWizard" /> diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/AndroidConstants.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/AndroidConstants.java index 65d739c00..9578a1da3 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/AndroidConstants.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/AndroidConstants.java @@ -16,6 +16,9 @@ package com.android.ide.eclipse.adt; +import com.android.ide.eclipse.adt.internal.build.ApkBuilder; +import com.android.ide.eclipse.adt.internal.build.PreCompilerBuilder; +import com.android.ide.eclipse.adt.internal.build.ResourceManagerBuilder; import com.android.sdklib.SdkConstants; import java.io.File; @@ -140,7 +143,7 @@ public class AndroidConstants { /** The old common plug-in ID. Please do not use for new features. */ private static final String LEGACY_PLUGIN_ID = "com.android.ide.eclipse.common"; //$NON-NLS-1$ - /** Generic marker for ADT errors. */ + /** Generic marker for ADT errors, only to be used in the {@link ResourceManagerBuilder} */ public final static String MARKER_ADT = AdtPlugin.PLUGIN_ID + ".adtProblem"; //$NON-NLS-1$ /** Marker for Android Target errors. @@ -149,21 +152,27 @@ public class AndroidConstants { * AndroidClasspathContainer */ public final static String MARKER_TARGET = AdtPlugin.PLUGIN_ID + ".targetProblem"; //$NON-NLS-1$ - /** aapt marker error when running the compile command */ + /** aapt marker error when running the compile command, only to be used + * in {@link PreCompilerBuilder} */ public final static String MARKER_AAPT_COMPILE = LEGACY_PLUGIN_ID + ".aaptProblem"; //$NON-NLS-1$ - /** aapt marker error when running the package command */ - public final static String MARKER_AAPT_PACKAGE = LEGACY_PLUGIN_ID + ".aapt2Problem"; //$NON-NLS-1$ - - /** XML marker error. */ + /** XML marker error, only to be used in {@link PreCompilerBuilder} */ public final static String MARKER_XML = LEGACY_PLUGIN_ID + ".xmlProblem"; //$NON-NLS-1$ - /** aidl marker error. */ + /** aidl marker error, only to be used in {@link PreCompilerBuilder} */ public final static String MARKER_AIDL = LEGACY_PLUGIN_ID + ".aidlProblem"; //$NON-NLS-1$ - /** android marker error */ + /** android marker error, only to be used in the Manifest parsing + * from the {@link PreCompilerBuilder} */ public final static String MARKER_ANDROID = LEGACY_PLUGIN_ID + ".androidProblem"; //$NON-NLS-1$ + /** aapt marker error when running the package command, only to be used in {@link ApkBuilder} */ + public final static String MARKER_AAPT_PACKAGE = LEGACY_PLUGIN_ID + ".aapt2Problem"; //$NON-NLS-1$ + + /** final packaging error marker, only to be used in {@link ApkBuilder} */ + public final static String MARKER_PACKAGING = AdtPlugin.PLUGIN_ID + ".packagingProblem"; //$NON-NLS-1$ + + /** Name for the "type" marker attribute */ public final static String MARKER_ATTR_TYPE = "android.type"; //$NON-NLS-1$ /** Name for the "class" marker attribute */ diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/ApkBuilder.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/ApkBuilder.java index b2f89f6f9..c6fe72bfe 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/ApkBuilder.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/ApkBuilder.java @@ -240,6 +240,18 @@ public class ApkBuilder extends BaseBuilder { super(); } + @Override + protected void clean(IProgressMonitor monitor) throws CoreException { + super.clean(monitor); + + // Get the project. + IProject project = getProject(); + + // Clear the project of the generic markers + removeMarkersFromProject(project, AndroidConstants.MARKER_AAPT_COMPILE); + removeMarkersFromProject(project, AndroidConstants.MARKER_PACKAGING); + } + // build() returns a list of project from which this project depends for future compilation. @SuppressWarnings("unchecked") @Override @@ -329,9 +341,12 @@ public class ApkBuilder extends BaseBuilder { return referencedProjects; } + // remove older packaging markers. + removeMarkersFromProject(javaProject.getProject(), AndroidConstants.MARKER_PACKAGING); + if (outputFolder == null) { // mark project and exit - markProject(AndroidConstants.MARKER_ADT, Messages.Failed_To_Get_Output, + markProject(AndroidConstants.MARKER_PACKAGING, Messages.Failed_To_Get_Output, IMarker.SEVERITY_ERROR); return referencedProjects; } @@ -440,7 +455,7 @@ public class ApkBuilder extends BaseBuilder { if (mPackageResources || mConvertToDex || mBuildFinalPackage) { IPath binLocation = outputFolder.getLocation(); if (binLocation == null) { - markProject(AndroidConstants.MARKER_ADT, Messages.Output_Missing, + markProject(AndroidConstants.MARKER_PACKAGING, Messages.Output_Missing, IMarker.SEVERITY_ERROR); return referencedProjects; } @@ -483,7 +498,7 @@ public class ApkBuilder extends BaseBuilder { // mark project and exit String msg = String.format(Messages.s_File_Missing, AndroidConstants.FN_ANDROID_MANIFEST); - markProject(AndroidConstants.MARKER_ADT, msg, IMarker.SEVERITY_ERROR); + markProject(AndroidConstants.MARKER_PACKAGING, msg, IMarker.SEVERITY_ERROR); return referencedProjects; } @@ -628,7 +643,7 @@ public class ApkBuilder extends BaseBuilder { msg = String.format("Unknown error: %1$s", msg); AdtPlugin.printErrorToConsole(project, msg); - markProject(AndroidConstants.MARKER_ADT, msg, IMarker.SEVERITY_ERROR); + markProject(AndroidConstants.MARKER_PACKAGING, msg, IMarker.SEVERITY_ERROR); } return referencedProjects; @@ -729,7 +744,7 @@ public class ApkBuilder extends BaseBuilder { // not all files that should have been marked, were marked), we put a generic // marker on the project and abort. if (parsingError) { - markProject(AndroidConstants.MARKER_ADT, Messages.Unparsed_AAPT_Errors, + markProject(AndroidConstants.MARKER_PACKAGING, Messages.Unparsed_AAPT_Errors, IMarker.SEVERITY_ERROR); } @@ -738,11 +753,11 @@ public class ApkBuilder extends BaseBuilder { } } catch (IOException e1) { String msg = String.format(Messages.AAPT_Exec_Error, command[0]); - markProject(AndroidConstants.MARKER_ADT, msg, IMarker.SEVERITY_ERROR); + markProject(AndroidConstants.MARKER_PACKAGING, msg, IMarker.SEVERITY_ERROR); return false; } catch (InterruptedException e) { String msg = String.format(Messages.AAPT_Exec_Error, command[0]); - markProject(AndroidConstants.MARKER_ADT, msg, IMarker.SEVERITY_ERROR); + markProject(AndroidConstants.MARKER_PACKAGING, msg, IMarker.SEVERITY_ERROR); return false; } @@ -810,7 +825,7 @@ public class ApkBuilder extends BaseBuilder { String message = String.format(Messages.Dalvik_Error_d, res); AdtPlugin.printErrorToConsole(getProject(), message); - markProject(AndroidConstants.MARKER_ADT, message, IMarker.SEVERITY_ERROR); + markProject(AndroidConstants.MARKER_PACKAGING, message, IMarker.SEVERITY_ERROR); return false; } } catch (Throwable ex) { @@ -820,7 +835,7 @@ public class ApkBuilder extends BaseBuilder { } message = String.format(Messages.Dalvik_Error_s, message); AdtPlugin.printErrorToConsole(getProject(), message); - markProject(AndroidConstants.MARKER_ADT, message, IMarker.SEVERITY_ERROR); + markProject(AndroidConstants.MARKER_PACKAGING, message, IMarker.SEVERITY_ERROR); if ((ex instanceof NoClassDefFoundError) || (ex instanceof NoSuchMethodError)) { AdtPlugin.printErrorToConsole(getProject(), Messages.Incompatible_VM_Warning, @@ -844,6 +859,7 @@ public class ApkBuilder extends BaseBuilder { */ private boolean finalPackage(String intermediateApk, String dex, String output, final IJavaProject javaProject, IJavaProject[] referencedJavaProjects) { + FileOutputStream fos = null; try { IPreferenceStore store = AdtPlugin.getDefault().getPreferenceStore(); @@ -878,7 +894,7 @@ public class ApkBuilder extends BaseBuilder { String msg = String.format(Messages.Final_Archive_Error_s, Messages.ApkBuilder_Unable_To_Gey_Key); AdtPlugin.printErrorToConsole(javaProject.getProject(), msg); - markProject(AndroidConstants.MARKER_ADT, msg, IMarker.SEVERITY_ERROR); + markProject(AndroidConstants.MARKER_PACKAGING, msg, IMarker.SEVERITY_ERROR); return false; } @@ -889,7 +905,7 @@ public class ApkBuilder extends BaseBuilder { String.format(Messages.ApkBuilder_Certificate_Expired_on_s, DateFormat.getInstance().format(certificate.getNotAfter()))); AdtPlugin.printErrorToConsole(javaProject.getProject(), msg); - markProject(AndroidConstants.MARKER_ADT, msg, IMarker.SEVERITY_ERROR); + markProject(AndroidConstants.MARKER_PACKAGING, msg, IMarker.SEVERITY_ERROR); return false; } @@ -935,7 +951,7 @@ public class ApkBuilder extends BaseBuilder { String msg = String.format("Native libraries detected in '%1$s'. See console for more information.", libName); - markProject(AndroidConstants.MARKER_ADT, msg, + markProject(AndroidConstants.MARKER_PACKAGING, msg, nativeInterference ? IMarker.SEVERITY_ERROR : IMarker.SEVERITY_WARNING); @@ -976,20 +992,20 @@ public class ApkBuilder extends BaseBuilder { // mark project and return String msg = String.format(Messages.Final_Archive_Error_s, e1.getMessage()); AdtPlugin.printErrorToConsole(javaProject.getProject(), msg); - markProject(AndroidConstants.MARKER_ADT, msg, IMarker.SEVERITY_ERROR); + markProject(AndroidConstants.MARKER_PACKAGING, msg, IMarker.SEVERITY_ERROR); return false; } catch (IOException e1) { // mark project and return String msg = String.format(Messages.Final_Archive_Error_s, e1.getMessage()); AdtPlugin.printErrorToConsole(javaProject.getProject(), msg); - markProject(AndroidConstants.MARKER_ADT, msg, IMarker.SEVERITY_ERROR); + markProject(AndroidConstants.MARKER_PACKAGING, msg, IMarker.SEVERITY_ERROR); return false; } catch (KeytoolException e) { String eMessage = e.getMessage(); // mark the project with the standard message String msg = String.format(Messages.Final_Archive_Error_s, eMessage); - markProject(AndroidConstants.MARKER_ADT, msg, IMarker.SEVERITY_ERROR); + markProject(AndroidConstants.MARKER_PACKAGING, msg, IMarker.SEVERITY_ERROR); // output more info in the console AdtPlugin.printErrorToConsole(javaProject.getProject(), @@ -1002,7 +1018,7 @@ public class ApkBuilder extends BaseBuilder { // mark the project with the standard message String msg = String.format(Messages.Final_Archive_Error_s, eMessage); - markProject(AndroidConstants.MARKER_ADT, msg, IMarker.SEVERITY_ERROR); + markProject(AndroidConstants.MARKER_PACKAGING, msg, IMarker.SEVERITY_ERROR); // and also output it in the console AdtPlugin.printErrorToConsole(javaProject.getProject(), msg); @@ -1010,7 +1026,7 @@ public class ApkBuilder extends BaseBuilder { // mark project and return String msg = String.format(Messages.Final_Archive_Error_s, e.getMessage()); AdtPlugin.printErrorToConsole(javaProject.getProject(), msg); - markProject(AndroidConstants.MARKER_ADT, msg, IMarker.SEVERITY_ERROR); + markProject(AndroidConstants.MARKER_PACKAGING, msg, IMarker.SEVERITY_ERROR); return false; } catch (Exception e) { // try to catch other exception to actually display an error. This will be useful @@ -1024,7 +1040,7 @@ public class ApkBuilder extends BaseBuilder { msg = String.format("Unknown error: %1$s", msg); AdtPlugin.printErrorToConsole(javaProject.getProject(), msg); - markProject(AndroidConstants.MARKER_ADT, msg, IMarker.SEVERITY_ERROR); + markProject(AndroidConstants.MARKER_PACKAGING, msg, IMarker.SEVERITY_ERROR); return false; } finally { if (fos != null) { 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 270d1f209..cc82efb67 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 @@ -277,17 +277,19 @@ abstract class BaseBuilder extends IncrementalProjectBuilder { } /** - * Adds a marker to the current project. + * Adds a marker to the current project. This methods catches thrown {@link CoreException}, + * and returns null instead. * * @param markerId The id of the marker to add. * @param message the message associated with the mark * @param severity the severity of the marker. + * @return the marker that was created (or null if failure) + * @see IMarker */ - protected final void markProject(String markerId, String message, int severity) { - BaseProjectHelper.addMarker(getProject(), markerId, message, severity); + protected final IMarker markProject(String markerId, String message, int severity) { + return BaseProjectHelper.markResource(getProject(), markerId, message, severity); } - /** * Removes markers from a file. * @param file The file from which to delete the markers. @@ -332,7 +334,7 @@ abstract class BaseBuilder extends IncrementalProjectBuilder { String markerId) { try { if (project.exists()) { - project.deleteMarkers(markerId, true, IResource.DEPTH_ZERO); + project.deleteMarkers(markerId, true, IResource.DEPTH_INFINITE); } } catch (CoreException ce) { String msg = String.format(Messages.Marker_Delete_Error, markerId, project.getName()); @@ -763,11 +765,7 @@ abstract class BaseBuilder extends IncrementalProjectBuilder { } if (markerAlreadyExists == false) { - if (line != -1) { - BaseProjectHelper.addMarker(f2, markerId, message, line, severity); - } else { - BaseProjectHelper.addMarker(f2, markerId, message, severity); - } + BaseProjectHelper.markResource(f2, markerId, message, line, severity); } return true; @@ -866,7 +864,7 @@ abstract class BaseBuilder extends IncrementalProjectBuilder { project, message); // Also put a warning marker on the project - markProject(AndroidConstants.MARKER_ADT, message, + markProject(AndroidConstants.MARKER_PACKAGING, message, IMarker.SEVERITY_WARNING); } } 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 2e1972882..9ca7842a0 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 @@ -342,7 +342,7 @@ public class PreCompilerBuilder extends BaseBuilder { "Platform %1$s is a preview and requires appication manifest to set %2$s to '%1$s'", codename, AndroidManifest.ATTRIBUTE_MIN_SDK_VERSION); AdtPlugin.printErrorToConsole(project, msg); - BaseProjectHelper.addMarker(manifest, AndroidConstants.MARKER_ADT, msg, + BaseProjectHelper.markResource(manifest, AndroidConstants.MARKER_ADT, msg, IMarker.SEVERITY_ERROR); stopBuild(msg); } else if (minSdkValue < projectVersion.getApiLevel()) { @@ -352,7 +352,7 @@ public class PreCompilerBuilder extends BaseBuilder { AndroidManifest.ATTRIBUTE_MIN_SDK_VERSION, minSdkValue, projectVersion.getApiLevel()); AdtPlugin.printBuildToConsole(BuildVerbosity.VERBOSE, project, msg); - BaseProjectHelper.addMarker(manifest, AndroidConstants.MARKER_ADT, msg, + BaseProjectHelper.markResource(manifest, AndroidConstants.MARKER_ADT, msg, IMarker.SEVERITY_WARNING); } else if (minSdkValue > projectVersion.getApiLevel()) { // integer minSdk is too high for the target => warning @@ -361,7 +361,7 @@ public class PreCompilerBuilder extends BaseBuilder { AndroidManifest.ATTRIBUTE_MIN_SDK_VERSION, minSdkValue, projectVersion.getApiLevel()); AdtPlugin.printBuildToConsole(BuildVerbosity.VERBOSE, project, msg); - BaseProjectHelper.addMarker(manifest, AndroidConstants.MARKER_ADT, msg, + BaseProjectHelper.markResource(manifest, AndroidConstants.MARKER_ADT, msg, IMarker.SEVERITY_WARNING); } } else { @@ -374,7 +374,7 @@ public class PreCompilerBuilder extends BaseBuilder { "Manifest attribute '%1$s' is set to '%2$s'. Integer is expected.", AndroidManifest.ATTRIBUTE_MIN_SDK_VERSION, minSdkVersion); AdtPlugin.printErrorToConsole(project, msg); - BaseProjectHelper.addMarker(manifest, AndroidConstants.MARKER_ADT, msg, + BaseProjectHelper.markResource(manifest, AndroidConstants.MARKER_ADT, msg, IMarker.SEVERITY_ERROR); stopBuild(msg); } else if (codename.equals(minSdkVersion) == false) { @@ -383,7 +383,7 @@ public class PreCompilerBuilder extends BaseBuilder { "Value of manifest attribute '%1$s' does not match platform codename '%2$s'", AndroidManifest.ATTRIBUTE_MIN_SDK_VERSION, codename); AdtPlugin.printErrorToConsole(project, msg); - BaseProjectHelper.addMarker(manifest, AndroidConstants.MARKER_ADT, msg, + BaseProjectHelper.markResource(manifest, AndroidConstants.MARKER_ADT, msg, IMarker.SEVERITY_ERROR); stopBuild(msg); } @@ -396,7 +396,7 @@ public class PreCompilerBuilder extends BaseBuilder { "Platform %1$s is a preview and requires appication manifests to set %2$s to '%1$s'", codename, AndroidManifest.ATTRIBUTE_MIN_SDK_VERSION); AdtPlugin.printErrorToConsole(project, msg); - BaseProjectHelper.addMarker(manifest, AndroidConstants.MARKER_ADT, msg, + BaseProjectHelper.markResource(manifest, AndroidConstants.MARKER_ADT, msg, IMarker.SEVERITY_ERROR); stopBuild(msg); } @@ -608,11 +608,20 @@ public class PreCompilerBuilder extends BaseBuilder { protected void clean(IProgressMonitor monitor) throws CoreException { super.clean(monitor); - AdtPlugin.printBuildToConsole(BuildVerbosity.VERBOSE, getProject(), + // Get the project. + IProject project = getProject(); + + AdtPlugin.printBuildToConsole(BuildVerbosity.VERBOSE, project, Messages.Removing_Generated_Classes); // remove all the derived resources from the 'gen' source folder. 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 @@ -1011,7 +1020,7 @@ public class PreCompilerBuilder extends BaseBuilder { } // mark the file - BaseProjectHelper.addMarker(file, AndroidConstants.MARKER_AIDL, msg, line, + BaseProjectHelper.markResource(file, AndroidConstants.MARKER_AIDL, msg, line, IMarker.SEVERITY_ERROR); // success, go to the next line 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 7bad5ad30..b6e6ac3fe 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 @@ -55,6 +55,17 @@ public class ResourceManagerBuilder extends BaseBuilder { super(); } + @Override + protected void clean(IProgressMonitor monitor) throws CoreException { + super.clean(monitor); + + // Get the project. + IProject project = getProject(); + + // Clear the project of the generic markers + removeMarkersFromProject(project, AndroidConstants.MARKER_ADT); + } + // build() returns a list of project from which this project depends for future compilation. @SuppressWarnings("unchecked") @Override 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 347b08805..163445083 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 @@ -259,7 +259,7 @@ public class AndroidClasspathContainerInitializer extends ClasspathContainerInit } try { - BaseProjectHelper.addMarker(iProject, AndroidConstants.MARKER_TARGET, + BaseProjectHelper.markProject(iProject, AndroidConstants.MARKER_TARGET, markerMessage, IMarker.SEVERITY_ERROR, IMarker.PRIORITY_HIGH); } catch (CoreException e) { // In some cases, the workspace may be locked for modification when we @@ -270,7 +270,7 @@ public class AndroidClasspathContainerInitializer extends ClasspathContainerInit @Override protected IStatus run(IProgressMonitor monitor) { try { - BaseProjectHelper.addMarker(iProject, + BaseProjectHelper.markProject(iProject, AndroidConstants.MARKER_TARGET, fmessage, IMarker.SEVERITY_ERROR, IMarker.PRIORITY_HIGH); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidManifestParser.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidManifestParser.java index f03749ccd..189fb81ad 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidManifestParser.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidManifestParser.java @@ -562,9 +562,8 @@ public class AndroidManifestParser { int line = mLocator.getLineNumber(); // mark the file - IMarker marker = BaseProjectHelper.addMarker(getFile(), - AndroidConstants.MARKER_ANDROID, - result, line, IMarker.SEVERITY_ERROR); + IMarker marker = BaseProjectHelper.markResource(getFile(), + AndroidConstants.MARKER_ANDROID, result, line, IMarker.SEVERITY_ERROR); // add custom attributes to be used by the manifest editor. if (marker != null) { 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 8a8d1a324..772470049 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 @@ -84,34 +84,40 @@ public final class BaseProjectHelper { /** * Adds a marker to a file on a specific line. This methods catches thrown * {@link CoreException}, and returns null instead. - * @param file the file to be marked + * @param resource the resource to be marked * @param markerId The id of the marker to add. * @param message the message associated with the mark * @param lineNumber the line number where to put the mark. If line is < 1, it puts the marker - * on line 1. + * on line 1, * @param severity the severity of the marker. * @return the IMarker that was added or null if it failed to add one. */ - public final static IMarker addMarker(IResource file, String markerId, + public final static IMarker markResource(IResource resource, String markerId, String message, int lineNumber, int severity) { try { - IMarker marker = file.createMarker(markerId); + IMarker marker = resource.createMarker(markerId); marker.setAttribute(IMarker.MESSAGE, message); marker.setAttribute(IMarker.SEVERITY, severity); - if (lineNumber < 1) { + + // if marker is text type, enforce a line number so that it shows in the editor + // somewhere (line 1) + if (lineNumber < 1 && marker.isSubtypeOf(IMarker.TEXT)) { lineNumber = 1; } - marker.setAttribute(IMarker.LINE_NUMBER, lineNumber); + + if (lineNumber >= 1) { + marker.setAttribute(IMarker.LINE_NUMBER, lineNumber); + } // on Windows, when adding a marker to a project, it takes a refresh for the marker // to show. In order to fix this we're forcing a refresh of elements receiving // markers (and only the element, not its children), to force the marker display. - file.refreshLocal(IResource.DEPTH_ZERO, new NullProgressMonitor()); + resource.refreshLocal(IResource.DEPTH_ZERO, new NullProgressMonitor()); return marker; } catch (CoreException e) { AdtPlugin.log(e, "Failed to add marker '%1$s' to '%2$s'", //$NON-NLS-1$ - markerId, file.getFullPath()); + markerId, resource.getFullPath()); } return null; @@ -126,30 +132,15 @@ public final class BaseProjectHelper { * @param severity the severity of the marker. * @return the IMarker that was added or null if it failed to add one. */ - public final static IMarker addMarker(IResource resource, String markerId, + public final static IMarker markResource(IResource resource, String markerId, String message, int severity) { - try { - IMarker marker = resource.createMarker(markerId); - marker.setAttribute(IMarker.MESSAGE, message); - marker.setAttribute(IMarker.SEVERITY, severity); - - // on Windows, when adding a marker to a project, it takes a refresh for the marker - // to show. In order to fix this we're forcing a refresh of elements receiving - // markers (and only the element, not its children), to force the marker display. - resource.refreshLocal(IResource.DEPTH_ZERO, new NullProgressMonitor()); - - return marker; - } catch (CoreException e) { - AdtPlugin.log(e, "Failed to add marker '%1$s' to '%2$s'", //$NON-NLS-1$ - markerId, resource.getFullPath()); - } - - return null; + return markResource(resource, markerId, message, -1, severity); } /** - * Adds a marker to a resource. This method does not catch {@link CoreException} and instead - * throw them. + * Adds a marker to an {@link IProject}. This method does not catch {@link CoreException}, like + * {@link #markResource(IResource, String, String, int)}. + * * @param resource the file to be marked * @param markerId The id of the marker to add. * @param message the message associated with the mark @@ -158,7 +149,7 @@ public final class BaseProjectHelper { * @return the IMarker that was added. * @throws CoreException */ - public final static IMarker addMarker(IProject project, String markerId, + public final static IMarker markProject(IProject project, String markerId, String message, int severity, int priority) throws CoreException { IMarker marker = project.createMarker(markerId); marker.setAttribute(IMarker.MESSAGE, message); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/XmlErrorHandler.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/XmlErrorHandler.java index fe73d49b6..ab0022560 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/XmlErrorHandler.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/XmlErrorHandler.java @@ -34,7 +34,7 @@ public class XmlErrorHandler extends DefaultHandler { /** link to the delta visitor, to set the xml error flag */ private XmlErrorListener mErrorListener; - + /** * Classes which implement this interface provide a method that deals * with XML errors. @@ -45,10 +45,10 @@ public class XmlErrorHandler extends DefaultHandler { */ public void errorFound(); } - + public static class BasicXmlErrorListener implements XmlErrorListener { public boolean mHasXmlError = false; - + public void errorFound() { mHasXmlError = true; } @@ -62,7 +62,7 @@ public class XmlErrorHandler extends DefaultHandler { /** * Xml Error call back * @param exception the parsing exception - * @throws SAXException + * @throws SAXException */ @Override public void error(SAXParseException exception) throws SAXException { @@ -72,7 +72,7 @@ public class XmlErrorHandler extends DefaultHandler { /** * Xml Fatal Error call back * @param exception the parsing exception - * @throws SAXException + * @throws SAXException */ @Override public void fatalError(SAXParseException exception) throws SAXException { @@ -82,23 +82,23 @@ public class XmlErrorHandler extends DefaultHandler { /** * Xml Warning call back * @param exception the parsing exception - * @throws SAXException + * @throws SAXException */ @Override public void warning(SAXParseException exception) throws SAXException { if (mFile != null) { - BaseProjectHelper.addMarker(mFile, + BaseProjectHelper.markResource(mFile, AndroidConstants.MARKER_XML, exception.getMessage(), exception.getLineNumber(), IMarker.SEVERITY_WARNING); } } - + protected final IFile getFile() { return mFile; } - + /** * Handles a parsing error and an optional line number. * @param exception @@ -108,25 +108,18 @@ public class XmlErrorHandler extends DefaultHandler { if (mErrorListener != null) { mErrorListener.errorFound(); } - + String message = exception.getMessage(); if (message == null) { message = "Unknown error " + exception.getClass().getCanonicalName(); } - + if (mFile != null) { - if (lineNumber != -1) { - BaseProjectHelper.addMarker(mFile, - AndroidConstants.MARKER_XML, - message, - lineNumber, - IMarker.SEVERITY_ERROR); - } else { - BaseProjectHelper.addMarker(mFile, - AndroidConstants.MARKER_XML, - message, - IMarker.SEVERITY_ERROR); - } + BaseProjectHelper.markResource(mFile, + AndroidConstants.MARKER_XML, + message, + lineNumber, + IMarker.SEVERITY_ERROR); } } } |