Skip to content

Commit c9a3b44

Browse files
committed
Merge branch 'comprof'
2 parents 2caae61 + d32c023 commit c9a3b44

29 files changed

+423
-298
lines changed

build.sbt

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,14 @@ val commonSettings = Seq(
5151
"-Xfatal-warnings",
5252
s"-Xlint:-missing-interpolator,-adapted-args,${if (scalaBinaryVersion.value == "2.12") "-unused," else ""}_",
5353
),
54+
scalacOptions ++= {
55+
if (scalaBinaryVersion.value == "2.12") Seq(
56+
"-Ycache-plugin-class-loader:last-modified",
57+
"-Ycache-macro-class-loader:last-modified",
58+
) else Seq.empty
59+
},
5460
// some Java 8 related tests use Java interface static methods, Scala 2.11.12 requires JDK8 target for that
55-
scalacOptions in Test ++= (if (scalaBinaryVersion.value == "2.11") Seq("-target:jvm-1.8") else Seq()),
61+
scalacOptions in Test ++= (if (scalaBinaryVersion.value == "2.11") Seq("-target:jvm-1.8") else Nil),
5662
apiURL := Some(url("http://avsystem.github.io/scala-commons/api")),
5763
autoAPIMappings := true,
5864

@@ -131,19 +137,20 @@ val CompileAndTest = "compile->compile;test->test"
131137
lazy val commons = project.in(file("."))
132138
.enablePlugins(ScalaUnidocPlugin)
133139
.aggregate(
140+
`commons-analyzer`,
141+
`commons-macros`,
134142
`commons-annotations`,
135143
`commons-annotations-js`,
136-
`commons-macros`,
137144
`commons-core`,
138145
`commons-core-js`,
139-
`commons-analyzer`,
140146
`commons-jetty`,
141-
`commons-benchmark`,
142147
`commons-mongo`,
143148
`commons-spring`,
144149
`commons-redis`,
145150
`commons-akka`,
146151
`commons-kafka`,
152+
`commons-benchmark`,
153+
`commons-benchmark-js`,
147154
)
148155
.settings(
149156
commonSettings,
@@ -159,6 +166,7 @@ lazy val commons = project.in(file("."))
159166
`commons-core-js`,
160167
`commons-benchmark`,
161168
`commons-benchmark-js`,
169+
`commons-comprof`,
162170
),
163171
)
164172

@@ -285,7 +293,10 @@ lazy val `commons-benchmark-js` = project.in(`commons-benchmark`.base / "js")
285293
"com.lihaoyi" %%% "upickle" % upickleVersion,
286294
"com.github.japgolly.scalajs-benchmark" %%% "benchmark" % scalajsBenchmarkVersion,
287295
),
288-
scalaJSUseMainModuleInitializer := true
296+
scalaJSUseMainModuleInitializer := true,
297+
test := {},
298+
testOnly := {},
299+
testQuick := {},
289300
)
290301

291302
lazy val `commons-mongo` = project
@@ -344,3 +355,31 @@ lazy val `commons-akka` = project
344355
"com.typesafe.akka" %% "akka-testkit" % akkaVersion % Test,
345356
),
346357
)
358+
359+
lazy val `commons-comprof` = project
360+
.dependsOn(`commons-core`)
361+
.settings(
362+
jvmCommonSettings,
363+
noPublishSettings,
364+
ideSkipProject := true,
365+
addCompilerPlugin("ch.epfl.scala" %% "scalac-profiling" % "1.0.0"),
366+
scalacOptions ++= Seq(
367+
s"-P:scalac-profiling:sourceroot:${baseDirectory.value}",
368+
"-P:scalac-profiling:generate-macro-flamegraph",
369+
"-P:scalac-profiling:no-profiledb",
370+
"-Xmacro-settings:statsEnabled",
371+
"-Ystatistics:typer",
372+
),
373+
sourceGenerators in Compile += Def.task {
374+
val originalSrc = (sourceDirectory in `commons-core`).value /
375+
"test/scala/com/avsystem/commons/rest/RestTestApi.scala"
376+
val originalContent = IO.read(originalSrc)
377+
(0 until 100).map { i =>
378+
val pkg = f"oa$i%02d"
379+
val newContent = originalContent.replaceAllLiterally("package rest", s"package rest\npackage $pkg")
380+
val newFile = (sourceManaged in Compile).value / pkg / "RestTestApi.scala"
381+
IO.write(newFile, newContent)
382+
newFile
383+
}
384+
}.taskValue
385+
)

commons-core/src/main/scala/com/avsystem/commons/misc/AnnotationOf.scala

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,26 @@ case class AnnotationsOf[A, T](annots: List[A]) extends AnyVal
1515
object AnnotationsOf {
1616
implicit def materialize[A, T]: AnnotationsOf[A, T] = macro macros.misc.MiscMacros.annotationsOf[A, T]
1717
}
18+
19+
final class HasAnnotation[A, T]
20+
object HasAnnotation {
21+
private[this] val reusable = new HasAnnotation
22+
def create[A, T]: HasAnnotation[A, T] = reusable.asInstanceOf
23+
24+
implicit def materialize[A, T]: AnnotationsOf[A, T] = macro macros.misc.MiscMacros.hasAnnotation[A, T]
25+
}
26+
27+
case class SelfAnnotation[A](annot: A) extends AnyVal
28+
object SelfAnnotation {
29+
implicit def materialize[A]: SelfAnnotation[A] = macro macros.misc.MiscMacros.selfAnnotation[A]
30+
}
31+
32+
case class SelfOptAnnotation[A](annotOpt: Opt[A])
33+
object SelfOptAnnotationOf {
34+
implicit def materialize[A]: SelfOptAnnotation[A] = macro macros.misc.MiscMacros.selfOptAnnotation[A]
35+
}
36+
37+
case class SelfAnnotations[A](annots: List[A]) extends AnyVal
38+
object SelfAnnotations {
39+
implicit def materialize[A]: SelfAnnotations[A] = macro macros.misc.MiscMacros.selfAnnotations[A]
40+
}

commons-core/src/main/scala/com/avsystem/commons/rpc/RPCFramework.scala

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@ trait RPCFramework {
1919
type RawRPC
2020
val RawRPC: BaseRawRpcCompanion
2121

22-
trait BaseRawRpcCompanion extends RawRpcCompanion[RawRPC] {
23-
override val implicits: RPCFramework.this.type = RPCFramework.this
24-
}
22+
trait BaseRawRpcCompanion extends RawRpcCompanion[RawRPC]
2523

2624
def read[T: Reader](raw: RawValue): T
2725
def write[T: Writer](value: T): RawValue

commons-core/src/main/scala/com/avsystem/commons/rpc/RawRpcCompanion.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import com.avsystem.commons.macros.rpc.RpcMacros
66
/**
77
* Base trait for companion objects of raw RPC traits.
88
*/
9-
trait RawRpcCompanion[Raw] extends RpcImplicitsProvider {
9+
trait RawRpcCompanion[Raw] {
1010
type AsRawRpc[Real] = AsRaw[Raw, Real]
1111
type AsRealRpc[Real] = AsReal[Raw, Real]
1212
type AsRawRealRpc[Real] = AsRawReal[Raw, Real]

commons-core/src/main/scala/com/avsystem/commons/rpc/RpcImplicitsProvider.scala

Lines changed: 0 additions & 11 deletions
This file was deleted.

commons-core/src/main/scala/com/avsystem/commons/rpc/RpcMetadataCompanion.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ package rpc
44
import com.avsystem.commons.macros.rpc.RpcMacros
55
import com.avsystem.commons.meta.MetadataCompanion
66

7-
trait RpcMetadataCompanion[M[_]] extends MetadataCompanion[M] with RpcImplicitsProvider {
7+
trait RpcMetadataCompanion[M[_]] extends MetadataCompanion[M] {
88
def materialize[Real]: M[Real] = macro RpcMacros.rpcMetadata[Real]
99
}

commons-core/src/test/scala/com/avsystem/commons/misc/AnnotationOfTest.scala

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,25 @@ import org.scalatest.FunSuite
66

77
import scala.annotation.StaticAnnotation
88

9-
class genann[T](val value: T) extends StaticAnnotation
10-
class genagg[T](value: T) extends AnnotationAggregate {
9+
case class genann[T](value: T) extends StaticAnnotation
10+
case class genagg[T](value: T) extends AnnotationAggregate {
1111
@genann(value) type Implied
1212
}
1313

1414
@genagg(42)
1515
class Subject
1616

17+
abstract class SelfAnnots(implicit val annots: SelfAnnotations[genann[_]])
18+
@genagg(42) @genann("fuu") class Klass extends SelfAnnots
19+
@genagg(42) @genann("fuu") object Objekt extends SelfAnnots
20+
1721
class AnnotationOfTest extends FunSuite {
1822
test("aggregate with generic") {
1923
assert(AnnotationOf.materialize[genann[Int], Subject].annot.value == 42)
2024
}
25+
26+
test("self annotations") {
27+
assert(new Klass().annots.annots == List(genann(42), genann("fuu")))
28+
assert(Objekt.annots.annots == List(genann(42), genann("fuu")))
29+
}
2130
}

commons-core/src/test/scala/com/avsystem/commons/rest/RestTestApi.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ object FlatBaseEntity extends RestDataCompanion[FlatBaseEntity]
1717
@description("REST entity")
1818
case class RestEntity(
1919
@description("entity id") id: String,
20-
@whenAbsent("anonymous") name: String = whenAbsent.debugMacro.value,
20+
@whenAbsent("anonymous") name: String = whenAbsent.value,
2121
@description("recursive optional subentity") subentity: OptArg[RestEntity] = OptArg.Empty
2222
) extends FlatBaseEntity
2323
object RestEntity extends RestDataCompanion[RestEntity]

commons-core/src/test/scala/com/avsystem/commons/rpc/NewRawRpc.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,6 @@ trait NewRawRpc {
6565
@multi def prefix(@methodName name: String): NewRawRpc
6666
}
6767
object NewRawRpc extends RawRpcCompanion[NewRawRpc] {
68-
override val implicits: this.type = this
69-
7068
implicit def asRawRealFromGenCodec[T: GenCodec]: AsRawReal[String, T] = ???
7169
implicit def futureAsRawRealFromGenCodec[T: GenCodec]: AsRawReal[Future[String], Future[T]] = ???
7270
}

commons-core/src/test/scala/com/avsystem/commons/rpc/NewRpcMetadataTest.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ trait TestApi extends SomeBase {
2525
def postit(arg: String, bar: String, int: Int, @suchMeta(3, "c") foo: String): String
2626
}
2727
object TestApi {
28+
import NewRawRpc._
2829
implicit val asRawReal: NewRawRpc.AsRawRealRpc[TestApi] = NewRawRpc.materializeAsRawReal[TestApi]
2930
implicit val metadata: NewRpcMetadata[TestApi] = NewRpcMetadata.materialize[TestApi]
3031
}

0 commit comments

Comments
 (0)