Update AndroidManifest to accept a SourcePath for a skeleton argument.
diff --git a/src/com/facebook/buck/android/AndroidManifest.java b/src/com/facebook/buck/android/AndroidManifest.java
index ed531f3..fb7270d 100644
--- a/src/com/facebook/buck/android/AndroidManifest.java
+++ b/src/com/facebook/buck/android/AndroidManifest.java
@@ -27,12 +27,15 @@
 import com.facebook.buck.rules.Buildable;
 import com.facebook.buck.rules.BuildableContext;
 import com.facebook.buck.rules.DependencyGraph;
+import com.facebook.buck.rules.SourcePath;
+import com.facebook.buck.rules.SourcePaths;
 import com.facebook.buck.step.Step;
 import com.facebook.buck.util.BuckConstant;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 
 import java.io.IOException;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -64,16 +67,16 @@
 public class AndroidManifest extends AbstractBuildable {
 
   private final BuildTarget buildTarget;
-  private final String skeletonFile;
+  private final SourcePath skeletonFile;
 
-  protected AndroidManifest(BuildTarget buildTarget, String skeletonFile) {
+  protected AndroidManifest(BuildTarget buildTarget, SourcePath skeletonFile) {
     this.buildTarget = Preconditions.checkNotNull(buildTarget);
     this.skeletonFile = Preconditions.checkNotNull(skeletonFile);
   }
 
   @Override
-  public List<String> getInputsToCompareToOutput() {
-    return ImmutableList.of(skeletonFile);
+  public Iterable<String> getInputsToCompareToOutput() {
+    return SourcePaths.filterInputsToCompareToOutput(Collections.singleton(skeletonFile));
   }
 
   public BuildTarget getBuildTarget() {
@@ -93,7 +96,7 @@
 
     ImmutableList.Builder<Step> commands = ImmutableList.builder();
     commands.add(new GenerateManifestStep(
-        skeletonFile,
+        skeletonFile.resolve(context).toString(),
         transitiveDependencies.manifestFiles,
         getPathToOutputFile()));
 
@@ -125,7 +128,7 @@
 
   public static class Builder extends AbstractBuildable.Builder {
 
-    protected String skeletonFile;
+    protected SourcePath skeletonFile;
 
     private Builder(AbstractBuildRuleBuilderParams params) {
       super(params);
@@ -142,7 +145,7 @@
       return BuildRuleType.ANDROID_MANIFEST;
     }
 
-    public Builder setSkeletonFile(String skeletonFile) {
+    public Builder setSkeletonFile(SourcePath skeletonFile) {
       this.skeletonFile = skeletonFile;
       return this;
     }
diff --git a/src/com/facebook/buck/android/AndroidManifestBuildRuleFactory.java b/src/com/facebook/buck/android/AndroidManifestBuildRuleFactory.java
index 071f30e..c7fa58f 100644
--- a/src/com/facebook/buck/android/AndroidManifestBuildRuleFactory.java
+++ b/src/com/facebook/buck/android/AndroidManifestBuildRuleFactory.java
@@ -15,9 +15,10 @@
  */
 package com.facebook.buck.android;
 
+import com.facebook.buck.rules.AbstractBuildRuleBuilderParams;
 import com.facebook.buck.rules.AbstractBuildRuleFactory;
 import com.facebook.buck.rules.BuildRuleFactoryParams;
-import com.facebook.buck.rules.AbstractBuildRuleBuilderParams;
+import com.facebook.buck.rules.SourcePath;
 
 public final class AndroidManifestBuildRuleFactory extends AbstractBuildRuleFactory<AndroidManifest.Builder> {
 
@@ -30,7 +31,7 @@
   protected void amendBuilder(AndroidManifest.Builder builder, BuildRuleFactoryParams params) {
     // skeleton file
     String skeletonFile = params.getRequiredStringAttribute("skeleton");
-    String skeletonPath = params.resolveFilePathRelativeToBuildFileDirectory(skeletonFile);
+    SourcePath skeletonPath = params.asSourcePath(skeletonFile, builder);
     builder.setSkeletonFile(skeletonPath);
   }
 }
diff --git a/test/com/facebook/buck/android/AndroidManifestTest.java b/test/com/facebook/buck/android/AndroidManifestTest.java
index ab6bff7..9a6b74f 100644
--- a/test/com/facebook/buck/android/AndroidManifestTest.java
+++ b/test/com/facebook/buck/android/AndroidManifestTest.java
@@ -31,6 +31,7 @@
 import com.facebook.buck.rules.FakeAbstractBuildRuleBuilderParams;
 import com.facebook.buck.rules.FakeBuildRule;
 import com.facebook.buck.rules.FakeBuildableContext;
+import com.facebook.buck.rules.FileSourcePath;
 import com.facebook.buck.step.Step;
 import com.facebook.buck.testutil.MoreAsserts;
 import com.facebook.buck.util.BuckConstant;
@@ -62,7 +63,7 @@
 
     assertEquals(
         ImmutableList.of("java/com/example/AndroidManifestSkeleton.xml"),
-        androidManifestRule.getInputsToCompareToOutput());
+        ImmutableList.copyOf(androidManifestRule.getInputsToCompareToOutput()));
     assertEquals(
         BuckConstant.GEN_DIR + "/java/com/example/AndroidManifest__manifest__.xml",
         androidManifestRule.getPathToOutputFile());
@@ -109,7 +110,7 @@
     AndroidManifest.Builder builder = AndroidManifest.newManifestMergeRuleBuilder(
         new FakeAbstractBuildRuleBuilderParams());
     final AndroidManifest androidManifest = builder
-        .setSkeletonFile("java/com/example/AndroidManifestSkeleton.xml")
+        .setSkeletonFile(new FileSourcePath("java/com/example/AndroidManifestSkeleton.xml"))
         .newBuildable(buildRuleParams, new BuildRuleResolver());
 
     // Then create a BuildRule whose Buildable is the AndroidManifest.