From 1c73ff7b5e40df89ede9aafbb13039aa3adf55f0 Mon Sep 17 00:00:00 2001 From: ChrisNeveu Date: Tue, 21 Feb 2017 12:51:48 -0500 Subject: [PATCH] Delegate should handle private and protected members correctly. --- macrame/src/main/scala/macrame/delegate.scala | 8 ++++++-- macrame/src/test/scala/macrame/DelegateTest.scala | 13 +++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/macrame/src/main/scala/macrame/delegate.scala b/macrame/src/main/scala/macrame/delegate.scala index e4002d6..4ee1635 100644 --- a/macrame/src/main/scala/macrame/delegate.scala +++ b/macrame/src/main/scala/macrame/delegate.scala @@ -86,7 +86,9 @@ object delegate { val delegatedMembers : List[Tree] = delegateType.members.filter(s ⇒ (containerType.member(s.name) == NoSymbol) && (s.name.decoded != "") && - !(delegateType.typeSymbol.asClass.isCaseClass && s.name.decoded == "copy") + !(delegateType.typeSymbol.asClass.isCaseClass && s.name.decoded == "copy") && + !s.isPrivate && + !s.isProtected ).collect { case method : MethodSymbol ⇒ val arguments = method.paramss.map(_.map { p ⇒ @@ -167,7 +169,9 @@ object delegate { !existingMembers.contains(s.name) && (containerType.member(s.name) == NoSymbol) && (s.name.decoded != "") && - !(delegateType.typeSymbol.asClass.isCaseClass && s.name.decoded == "copy") + !(delegateType.typeSymbol.asClass.isCaseClass && s.name.decoded == "copy") && + !s.isPrivate && + !s.isProtected ).collect { case method : MethodSymbol ⇒ val arguments = method.paramss.map(_.map { p ⇒ diff --git a/macrame/src/test/scala/macrame/DelegateTest.scala b/macrame/src/test/scala/macrame/DelegateTest.scala index 2d2e97f..fa497a5 100644 --- a/macrame/src/test/scala/macrame/DelegateTest.scala +++ b/macrame/src/test/scala/macrame/DelegateTest.scala @@ -133,4 +133,17 @@ class DelegateTest extends FunSuite { "xxx".get """) } + + test("Delegated parameters should handle private members.") { + final case class Delegate( + headline : Option[String] = None) { + private val foo : Int = 5 + private val baz : String = "five" + } + assertCompiles(""" + final case class PostContent( + headline : Option[String] = None, + @delegate un : Delegate) + """) + } }