--- a/src/share/classes/sun/module/bootstrap/BootstrapRepository.java Wed Aug 06 15:42:11 2008 -0700
+++ b/src/share/classes/sun/module/bootstrap/BootstrapRepository.java Thu Aug 07 14:31:45 2008 -0700
@@ -30,9 +30,11 @@ import java.io.IOException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
+import java.module.ModuleArchiveInfo;
import java.module.ModuleDefinition;
-import java.module.ModuleArchiveInfo;
+import java.module.ModuleSystemPermission;
import java.module.Query;
import java.module.Repository;
import sun.module.repository.JamModuleArchiveInfo;
@@ -47,10 +49,6 @@ public final class BootstrapRepository e
private static final BootstrapRepository INSTANCE = new BootstrapRepository();
- private List<ModuleDefinition> moduleDefs;
- private List<ModuleArchiveInfo> moduleArchiveInfos;
- private boolean initialized = false;
-
public static Repository getInstance() {
return INSTANCE;
}
@@ -59,51 +57,24 @@ public final class BootstrapRepository e
super("bootstrap", null);
}
- /**
- * Initialize the bootstrap repostory lazily.
- */
- private void lazyInitialize() {
- if (initialized) {
- return;
+ @Override
+ protected List<ModuleArchiveInfo> doInitialize() {
+ // Obtains the set of standard module definitions.
+ List<ModuleDefinition> moduleDefs = VirtualModuleDefinitions.getModuleDefinitions();
+
+ List<ModuleArchiveInfo> moduleArchiveInfos = new ArrayList<ModuleArchiveInfo>();
+ for (ModuleDefinition md : moduleDefs) {
+ moduleArchiveInfos.add(md.getModuleArchiveInfo());
}
- initialized = true;
+ addModuleDefinitions(new HashSet<ModuleDefinition>(moduleDefs));
- // Obtains the set of standard module definitions.
- moduleDefs = VirtualModuleDefinitions.getModuleDefinitions();
-
- // Setup ModuleArchiveInfo for the standard module definition.
- moduleArchiveInfos = new ArrayList<ModuleArchiveInfo>();
- for (ModuleDefinition md : moduleDefs) {
- moduleArchiveInfos.add(new JamModuleArchiveInfo(this,
- md.getName(), md.getVersion(),
- null, null, null));
- }
+ return moduleArchiveInfos;
}
@Override
- public void initialize() {
- if (initialized)
- throw new IllegalStateException("Bootstrap repository has already been initialized.");
-
- lazyInitialize();
- }
-
- @Override
- public List<ModuleDefinition> findModuleDefinitions(Query constraint) {
- lazyInitialize();
-
- if (constraint == Query.ANY) {
- return Collections.unmodifiableList(moduleDefs);
- } else {
- List<ModuleDefinition> result = new ArrayList<ModuleDefinition>();
- for (ModuleDefinition md : moduleDefs) {
- if (constraint.match(md)) {
- result.add(md);
- }
- }
- return result;
- }
+ protected void doShutdown() throws IOException {
+ throw new IOException("Bootstrap repository cannot be shutdown.");
}
@Override
@@ -117,29 +88,32 @@ public final class BootstrapRepository e
}
@Override
- public void reload() throws IOException {
- // empty
+ public List<ModuleArchiveInfo> list() {
+ SecurityManager sm = System.getSecurityManager();
+ if (sm != null) {
+ sm.checkPermission(new ModuleSystemPermission("listModuleArchive"));
+ }
+
+ // lazy initialize
+ try {
+ initialize();
+ } catch(IOException e) {
+ throw new AssertionError("bootstrap repository internal error: cannot initialize.");
+ }
+
+ return getModuleArchiveInfos();
}
@Override
- public ModuleArchiveInfo install(URI u) throws IOException {
- throw new IOException("Bootstrap repository is read-only.");
- }
+ public List<ModuleDefinition> findModuleDefinitions(Query q) {
+ // lazy initialize
+ try {
+ initialize();
+ } catch(IOException e) {
+ throw new AssertionError("bootstrap repository internal error: cannot initialize.");
+ }
- @Override
- public boolean uninstall(ModuleArchiveInfo m) throws IOException {
- throw new IOException("Bootstrap repository is read-only.");
- }
-
- @Override
- public void shutdown() throws IOException {
- throw new IOException("Bootstrap repository cannot be shutdown.");
- }
-
- @Override
- public List<ModuleArchiveInfo> list() {
- lazyInitialize();
- return Collections.unmodifiableList(moduleArchiveInfos);
+ return super.findModuleDefinitions(q);
}
@Override
--- a/src/share/classes/sun/module/bootstrap/VirtualModuleDefinition.java Wed Aug 06 15:42:11 2008 -0700
+++ b/src/share/classes/sun/module/bootstrap/VirtualModuleDefinition.java Thu Aug 07 14:31:45 2008 -0700
@@ -34,11 +34,13 @@ import java.module.ModuleArchiveInfo;
import java.module.ModuleArchiveInfo;
import java.module.ModuleContent;
import java.module.ModuleSystem;
+import java.module.ModuleSystemPermission;
import java.module.PackageDefinition;
import java.module.Version;
import java.module.Repository;
import sun.module.core.AbstractModuleDefinition;
import sun.module.core.JamPackageDefinition;
+import sun.module.repository.JamModuleArchiveInfo;
/**
* A ModuleDefinition for the virtual modules.
@@ -59,6 +61,7 @@ class VirtualModuleDefinition extends Ab
private final Class metadataClass;
private volatile Set<PackageDefinition> memberPackageDefs;
private volatile Set<PackageDefinition> exportedPackageDefs;
+ private volatile ModuleArchiveInfo mai;
@SuppressWarnings({"unchecked"})
VirtualModuleDefinition(String name, Version version, Class<?> metadataClass) {
@@ -69,6 +72,9 @@ class VirtualModuleDefinition extends Ab
repository,
false);
this.metadataClass = metadataClass;
+ this.mai = new JamModuleArchiveInfo(repository,
+ name, version,
+ null, null, null);
}
@Override
@@ -164,10 +170,12 @@ class VirtualModuleDefinition extends Ab
getName() + "\" module");
}
- // XXX: TODO provide implementation
@Override
public ModuleArchiveInfo getModuleArchiveInfo() {
- throw new UnsupportedOperationException("No module archive info supported for \"" +
- getName() + "\" module");
+ SecurityManager sm = System.getSecurityManager();
+ if (sm != null) {
+ sm.checkPermission(new ModuleSystemPermission("getModuleArchiveInfo"));
+ }
+ return mai;
}
}
--- a/src/share/classes/sun/module/bootstrap/VirtualModuleDefinitions.java Wed Aug 06 15:42:11 2008 -0700
+++ b/src/share/classes/sun/module/bootstrap/VirtualModuleDefinitions.java Thu Aug 07 14:31:45 2008 -0700
@@ -395,7 +395,7 @@ public final class VirtualModuleDefiniti
for (Class clazz : metadataClasses) {
ModuleName moduleNameAnnotation = (ModuleName) clazz.getAnnotation(ModuleName.class);
- Version versionAnnotation = (Version) clazz.getAnnotation(java.module.annotation.Version.class);
+ Version versionAnnotation = (Version) clazz.getAnnotation(Version.class);
String name = moduleNameAnnotation.value();
String version = versionAnnotation.value();
moduleDefs.add(new VirtualModuleDefinition(name, java.module.Version.valueOf(version), clazz));
--- a/src/share/classes/sun/module/repository/cache/CacheModuleContent.java Wed Aug 06 15:42:11 2008 -0700
+++ b/src/share/classes/sun/module/repository/cache/CacheModuleContent.java Thu Aug 07 14:31:45 2008 -0700
@@ -284,6 +284,10 @@ abstract class CacheModuleContent implem
@Override
public ByteBuffer getEntryAsByteBuffer(String name) throws IOException {
ReadableByteChannel src = getEntryAsChannel(name);
+ if (src == null) {
+ return null;
+ }
+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
WritableByteChannel dest = Channels.newChannel(baos);
--- a/test/java/module/modinit/mtest/classpath/basic1.mtest Wed Aug 06 15:42:11 2008 -0700
+++ b/test/java/module/modinit/mtest/classpath/basic1.mtest Thu Aug 07 14:31:45 2008 -0700
@@ -59,9 +59,6 @@ import java.net.URL;
in.close();
}
>> end class
->> begin file ../../../../classp/cp1.txt
-> copy ../../classp/cp1.txt
->> end file
>>> end module
>>> begin test m1
return
--- a/test/java/module/modinit/mtest/deepvalidate/deepvalidate.mtest Wed Aug 06 15:42:11 2008 -0700
+++ b/test/java/module/modinit/mtest/deepvalidate/deepvalidate.mtest Thu Aug 07 14:31:45 2008 -0700
@@ -4,7 +4,7 @@
# - m4 imports m5 imports m6; overlapped member class in m4 and m6
# - m7 imports m4, m6; overlapped member class in m4 and m6
# - m8 imports m9 imports java.classpath; deep validation is not supported
-# - m10 imports m11 imports m11 imports m9 again; overlapped member class in m10 and m11
+# - m10 imports m11 imports m12 imports m10 again; overlapped member class in m11 and m12
#
>>> begin module m1
> annotations
@@ -132,8 +132,7 @@ m1.MainA
}
catch (ModuleInitializationException e) {
}
- boolean FIXME = false;
- if (FIXME) { // TODO: remove the FIXME when these tests are fixed
+
// m10, m11 and m12 should NOT support deep validation
ModuleDefinition md10 = r.find("m10");
ModuleDefinition md11 = r.find("m11");
@@ -185,7 +184,6 @@ m1.MainA
}
catch (ModuleInitializationException e) {
}
- } // FIXME
>> end class
>>> end module
>>> begin module m2
@@ -271,9 +269,6 @@ m1.MainA
@ImportModule(name="java.se"),
@ImportModule(name="java.classpath")
})
-@sun.module.annotation.LegacyClasses({ // Use it as a workaround to populate the membership list
- "m9.MainH"
-})
>> begin class m9.MainH
>> end class
>>> end module
@@ -284,9 +279,6 @@ m1.MainA
@ImportModule(name="java.se"),
@ImportModule(name="m11")
})
-@sun.module.annotation.LegacyClasses({ // Use it as a workaround to populate the membership list
- "m10.MainH"
-})
>> begin class m10.MainH
>> end class
>>> end module
@@ -297,12 +289,11 @@ m1.MainA
@ImportModule(name="java.se"),
@ImportModule(name="m12")
})
-@sun.module.annotation.LegacyClasses({ // Use it as a workaround to populate the membership list
- "m11.MainH",
- "conflictTypeXYZ"
-})
>> begin class m11.MainH
>> end class
+>> begin file Foo.java
+> compile Foo.java
+>> end file
>>> end module
>>> begin module m12
> annotations
@@ -311,12 +302,11 @@ m1.MainA
@ImportModule(name="java.se"),
@ImportModule(name="m10")
})
-@sun.module.annotation.LegacyClasses({ // Use it as a workaround to populate the membership list
- "m12.MainH",
- "conflictTypeXYZ"
-})
>> begin class m12.MainH
>> end class
+>> begin file Foo.java
+> compile Foo.java
+>> end file
>>> end module
>>> begin test m1
return