From 467617a4b9cba1b7eb65c6d6c625c34eac510473 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Tue, 25 Jul 2017 01:50:53 -0400 Subject: [PATCH] Implement withRank --- .../src/main/scala/sbt/internal/util/Attributes.scala | 4 ++++ main-settings/src/main/scala/sbt/Structure.scala | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/Attributes.scala b/internal/util-collection/src/main/scala/sbt/internal/util/Attributes.scala index ce0cb8e29..806f29864 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/Attributes.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/Attributes.scala @@ -82,6 +82,10 @@ object AttributeKey { rank: Int): AttributeKey[T] = make(name, Some(description), extend, rank) + + private[sbt] def copyWithRank[T](a: AttributeKey[T], rank: Int): AttributeKey[T] = + make(a.label, a.description, a.extend, rank)(a.manifest, a.optJsonWriter) + private[this] def make[T]( name: String, description0: Option[String], diff --git a/main-settings/src/main/scala/sbt/Structure.scala b/main-settings/src/main/scala/sbt/Structure.scala index 3ec5b1a82..247b776d4 100644 --- a/main-settings/src/main/scala/sbt/Structure.scala +++ b/main-settings/src/main/scala/sbt/Structure.scala @@ -86,6 +86,9 @@ sealed abstract class SettingKey[T] import TupleSyntax._ set((this, other)(f), source) } + + final def withRank(rank: Int): SettingKey[T] = + SettingKey(AttributeKey.copyWithRank(key, rank)) } /** @@ -149,6 +152,9 @@ sealed abstract class TaskKey[T] import TupleSyntax._ set((this, other)((a, b) => (a, b) map f.tupled), source) } + + final def withRank(rank: Int): TaskKey[T] = + TaskKey(AttributeKey.copyWithRank(key, rank)) } /** @@ -176,6 +182,9 @@ sealed trait InputKey[T] final def transform(f: T => T, source: SourcePosition): Setting[InputTask[T]] = set(scopedKey(_ mapTask { _ map f }), source) + + final def withRank(rank: Int): InputKey[T] = + InputKey(AttributeKey.copyWithRank(key, rank)) } /** Methods and types related to constructing settings, including keys, scopes, and initializations. */