From e561999a8517b298406faa30b566e78b1270b91c Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Wed, 19 Jun 2013 01:13:49 +0200 Subject: [PATCH] #3438 - Adding support for non-static top-level classes in check constructors --- .../src/test/java/akka/actor/ActorCreationTest.java | 6 ++++++ .../src/test/java/akka/actor/NonStaticCreator.java | 10 ++++++++++ akka-actor/src/main/scala/akka/actor/Props.scala | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 akka-actor-tests/src/test/java/akka/actor/NonStaticCreator.java diff --git a/akka-actor-tests/src/test/java/akka/actor/ActorCreationTest.java b/akka-actor-tests/src/test/java/akka/actor/ActorCreationTest.java index 2b54d51b0d..82bcb7d422 100644 --- a/akka-actor-tests/src/test/java/akka/actor/ActorCreationTest.java +++ b/akka-actor-tests/src/test/java/akka/actor/ActorCreationTest.java @@ -60,6 +60,12 @@ public class ActorCreationTest { final Props p = Props.create(new C()); assertEquals(UntypedActor.class, p.actorClass()); } + + @Test + public void testTopLevelNonStaticCreator() { + final Props p = Props.create(new NonStaticCreator()); + assertEquals(UntypedActor.class, p.actorClass()); + } @Test public void testParametricCreator() { diff --git a/akka-actor-tests/src/test/java/akka/actor/NonStaticCreator.java b/akka-actor-tests/src/test/java/akka/actor/NonStaticCreator.java new file mode 100644 index 0000000000..b06da54944 --- /dev/null +++ b/akka-actor-tests/src/test/java/akka/actor/NonStaticCreator.java @@ -0,0 +1,10 @@ +package akka.actor; + +import akka.japi.Creator; + +public class NonStaticCreator implements Creator { + @Override + public UntypedActor create() throws Exception { + return null; + } +} diff --git a/akka-actor/src/main/scala/akka/actor/Props.scala b/akka-actor/src/main/scala/akka/actor/Props.scala index 47af4d32d9..3bd6693de8 100644 --- a/akka-actor/src/main/scala/akka/actor/Props.scala +++ b/akka-actor/src/main/scala/akka/actor/Props.scala @@ -123,7 +123,7 @@ object Props { * Create new Props from the given [[Creator]]. */ def create[T <: Actor](creator: Creator[T]): Props = { - if ((creator.getClass.getModifiers & Modifier.STATIC) == 0) + if ((creator.getClass.getEnclosingClass ne null) && (creator.getClass.getModifiers & Modifier.STATIC) == 0) throw new IllegalArgumentException("cannot use non-static local Creator to create actors; make it static or top-level") val ac = classOf[Actor] val actorClass = Reflect.findMarker(creator.getClass, classOf[Creator[_]]) match {