Skip to content

Commit

Permalink
implicit collector regression fixed
Browse files Browse the repository at this point in the history
#SCL-10624 fixed
#SCL-8827 fixed
#SCL-9877 fixed
  • Loading branch information
niktrop authored and teamcityserver committed Oct 25, 2016
1 parent f92c5ea commit ffcaa52
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 1 deletion.
Expand Up @@ -231,7 +231,9 @@ class ImplicitCollector(private var place: PsiElement,
if (isAccessible(member)) addResultForElement()
case _: ScBindingPattern | _: ScFieldId =>
val member = ScalaPsiUtil.getContextOfType(element, true, classOf[ScValue], classOf[ScVariable]) match {
case m: ScMember if m.hasModifierProperty("implicit") => m
case m: ScMember if m.hasModifierProperty("implicit") =>
placeCalculated = true
m
case _ => return true
}
if (isAccessible(member)) addResultForElement()
Expand Down
Expand Up @@ -26,4 +26,6 @@ class TypeInferenceImplicitsTest extends TypeInferenceTestBase {
def testSpecialConversion() {doTest()}

def testSCL7475() {doTest()}

def testSCL9877() {doTest()}
}
52 changes: 52 additions & 0 deletions testdata/typeInference/implicits/SCL9877.scala
@@ -0,0 +1,52 @@
object Holder {

object ActorMaterializer {

def apply()(implicit context: ActorRefFactory): ActorMaterializer = ???
}

trait Materializer

abstract class ActorMaterializer extends Materializer

class ActorMaterializerSettings

trait ActorRefFactory

case class ActorSystem(s: String) extends ActorRefFactory

class Route

class Flow

implicit def route2HandlerFlow(route: Route)
(implicit routingSettings: RoutingSettings, materializer: Materializer): Flow = ???

trait SettingsCompanion[T] {
implicit def default(implicit system: ActorRefFactory): T = ???
}

object RoutingSettings extends SettingsCompanion[RoutingSettings]

abstract class RoutingSettings
}

object Test {

import scala.concurrent.ExecutionContext
import Holder._

def bindAndHandle(handler: Flow, interface: String, port: Int)
(implicit fm: Materializer): Any = ???

def main(args: Array[String]) {
implicit val system = ActorSystem("foo")
implicit val materializer = ActorMaterializer()
implicit val executionContext: ExecutionContext = ???

val route: Route = ???

val bindingFuture = bindAndHandle(/*start*/route/*end*/, "localhost", 8080)
}
}
//Holder.Flow

0 comments on commit ffcaa52

Please sign in to comment.