diff --git a/config/src/main/java/com/typesafe/config/impl/Parseable.java b/config/src/main/java/com/typesafe/config/impl/Parseable.java index 20ffea42..09536fa1 100644 --- a/config/src/main/java/com/typesafe/config/impl/Parseable.java +++ b/config/src/main/java/com/typesafe/config/impl/Parseable.java @@ -97,7 +97,14 @@ public abstract class Parseable implements ConfigParseable { } ConfigParseable relativeTo(String filename) { - return null; + // fall back to classpath; we treat the "filename" as absolute + // (don't add a package name in front), + // if it starts with "/" then remove the "/", for consistency + // with ParseableResources.relativeTo + String resource = filename; + if (filename.startsWith("/")) + resource = filename.substring(1); + return newResources(resource, options().setOriginDescription(null)); } ConfigIncludeContext includeContext() { @@ -434,14 +441,7 @@ public abstract class Parseable implements ConfigParseable { if (sibling.exists()) { return newFile(sibling, options().setOriginDescription(null)); } else { - // fall back to classpath; we treat the "filename" as absolute - // (don't add a package name in front), - // if it starts with "/" then remove the "/", for consistency - // with ParseableResources.relativeTo - String resource = filename; - if (filename.startsWith("/")) - resource = filename.substring(1); - return newResources(resource, options().setOriginDescription(null)); + return super.relativeTo(filename); } } diff --git a/config/src/test/scala/com/typesafe/config/impl/PublicApiTest.scala b/config/src/test/scala/com/typesafe/config/impl/PublicApiTest.scala index 1f31a59d..c7af7f28 100644 --- a/config/src/test/scala/com/typesafe/config/impl/PublicApiTest.scala +++ b/config/src/test/scala/com/typesafe/config/impl/PublicApiTest.scala @@ -329,6 +329,14 @@ class PublicApiTest extends TestUtils { included.map(_.name)) } + @Test + def includersAreUsedRecursivelyWithString() { + val included = whatWasIncluded(ConfigFactory.parseString(""" include "equiv03/includes.conf" """, _)) + + assertEquals(List("equiv03/includes.conf", "letters/a.conf", "numbers/1.conf", "numbers/2", "letters/b.json", "letters/c", "root/foo.conf"), + included.map(_.name)) + } + @Test def includersAreUsedWithClasspath() { val included = whatWasIncluded(ConfigFactory.parseResources(classOf[PublicApiTest], "/test03.conf", _))