summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/plugin.xml7
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/AndroidConstants.java25
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/ApkBuilder.java52
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/BaseBuilder.java20
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/PreCompilerBuilder.java25
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/ResourceManagerBuilder.java11
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerInitializer.java4
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidManifestParser.java5
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/BaseProjectHelper.java49
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/XmlErrorHandler.java39
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);
}
}
}