+- CompilationUnit[@PackageName = ""]
   +- ModuleDeclaration[@Name = "com.example.foo", @Open = true]
      +- ModuleName[@Name = "com.example.foo"]
      +- ModuleRequiresDirective[@Static = false, @Transitive = false]
      |  +- ModuleName[@Name = "com.example.foo.http"]
      +- ModuleRequiresDirective[@Static = false, @Transitive = false]
      |  +- ModuleName[@Name = "java.logging"]
      +- ModuleRequiresDirective[@Static = false, @Transitive = true]
      |  +- ModuleName[@Name = "com.example.foo.network"]
      +- ModuleExportsDirective[@PackageName = "com.example.foo.bar"]
      +- ModuleExportsDirective[@PackageName = "com.example.foo.internal"]
      |  +- ModuleName[@Name = "com.example.foo.probe"]
      +- ModuleUsesDirective[]
      |  +- ClassType[@FullyQualified = true, @PackageQualifier = "com.example.foo.spi", @SimpleName = "Intf"]
      +- ModuleProvidesDirective[]
      |  +- ClassType[@FullyQualified = true, @PackageQualifier = "com.example.foo.spi", @SimpleName = "Intf"]
      |  +- ClassType[@FullyQualified = true, @PackageQualifier = "com.example.foo", @SimpleName = "Impl"]
      +- ModuleProvidesDirective[]
         +- ClassType[@FullyQualified = true, @PackageQualifier = "com.example.foo.spi", @SimpleName = "Intf2"]
         +- ClassType[@FullyQualified = true, @PackageQualifier = "com.example.foo", @SimpleName = "Impl"]
         +- ClassType[@FullyQualified = true, @PackageQualifier = "com.example.foo", @SimpleName = "Impl2"]
