8172154: jshell tool: make all IMPORTS.jsh generated at build time
Reviewed-by: jlahoda
This commit is contained in:
parent
180e7d2bb0
commit
846d6be95c
@ -36,6 +36,9 @@ import java.io.InputStreamReader;
|
||||
import java.io.PrintStream;
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
import java.lang.module.ModuleDescriptor;
|
||||
import java.lang.module.ModuleFinder;
|
||||
import java.lang.module.ModuleReference;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.file.FileSystems;
|
||||
import java.nio.file.Files;
|
||||
@ -55,6 +58,7 @@ import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Optional;
|
||||
import java.util.Scanner;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
@ -2771,8 +2775,56 @@ public class JShellTool implements MessageHandler {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Read a built-in file from resources
|
||||
static String readResource(String name) throws IOException {
|
||||
// Read a built-in file from resources or compute it
|
||||
static String readResource(String name) throws Exception {
|
||||
// Class to compute imports by following requires for a module
|
||||
class ComputeImports {
|
||||
final String base;
|
||||
ModuleFinder finder = ModuleFinder.ofSystem();
|
||||
|
||||
ComputeImports(String base) {
|
||||
this.base = base;
|
||||
}
|
||||
|
||||
Set<ModuleDescriptor> modules() {
|
||||
Set<ModuleDescriptor> closure = new HashSet<>();
|
||||
moduleClosure(finder.find(base), closure);
|
||||
return closure;
|
||||
}
|
||||
|
||||
void moduleClosure(Optional<ModuleReference> omr, Set<ModuleDescriptor> closure) {
|
||||
if (omr.isPresent()) {
|
||||
ModuleDescriptor mdesc = omr.get().descriptor();
|
||||
if (closure.add(mdesc)) {
|
||||
for (ModuleDescriptor.Requires req : mdesc.requires()) {
|
||||
if (!req.modifiers().contains(ModuleDescriptor.Requires.Modifier.STATIC)) {
|
||||
moduleClosure(finder.find(req.name()), closure);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Set<String> packages() {
|
||||
return modules().stream().flatMap(md -> md.exports().stream())
|
||||
.filter(e -> !e.isQualified()).map(Object::toString).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
String imports() {
|
||||
Set<String> si = packages();
|
||||
String[] ai = si.toArray(new String[si.size()]);
|
||||
Arrays.sort(ai);
|
||||
return Arrays.stream(ai)
|
||||
.map(p -> String.format("import %s.*;\n", p))
|
||||
.collect(Collectors.joining());
|
||||
}
|
||||
}
|
||||
|
||||
if (name.equals("JAVASE")) {
|
||||
// The built-in JAVASE is computed as the imports of all the packages in Java SE
|
||||
return new ComputeImports("java.se").imports();
|
||||
}
|
||||
|
||||
// Attempt to find the file as a resource
|
||||
String spec = String.format(BUILTIN_FILE_PATH_FORMAT, name);
|
||||
|
||||
|
@ -1,173 +0,0 @@
|
||||
import java.applet.*;
|
||||
import java.awt.*;
|
||||
import java.awt.color.*;
|
||||
import java.awt.datatransfer.*;
|
||||
import java.awt.desktop.*;
|
||||
import java.awt.dnd.*;
|
||||
import java.awt.event.*;
|
||||
import java.awt.font.*;
|
||||
import java.awt.geom.*;
|
||||
import java.awt.im.*;
|
||||
import java.awt.im.spi.*;
|
||||
import java.awt.image.*;
|
||||
import java.awt.image.renderable.*;
|
||||
import java.awt.print.*;
|
||||
import java.beans.*;
|
||||
import java.beans.beancontext.*;
|
||||
import java.io.*;
|
||||
import java.lang.*;
|
||||
import java.lang.annotation.*;
|
||||
import java.lang.instrument.*;
|
||||
import java.lang.invoke.*;
|
||||
import java.lang.management.*;
|
||||
import java.lang.module.*;
|
||||
import java.lang.ref.*;
|
||||
import java.lang.reflect.*;
|
||||
import java.math.*;
|
||||
import java.net.*;
|
||||
import java.net.spi.*;
|
||||
import java.nio.*;
|
||||
import java.nio.channels.*;
|
||||
import java.nio.channels.spi.*;
|
||||
import java.nio.charset.*;
|
||||
import java.nio.charset.spi.*;
|
||||
import java.nio.file.*;
|
||||
import java.nio.file.attribute.*;
|
||||
import java.nio.file.spi.*;
|
||||
import java.rmi.*;
|
||||
import java.rmi.activation.*;
|
||||
import java.rmi.dgc.*;
|
||||
import java.rmi.registry.*;
|
||||
import java.rmi.server.*;
|
||||
import java.security.*;
|
||||
import java.security.acl.*;
|
||||
import java.security.cert.*;
|
||||
import java.security.interfaces.*;
|
||||
import java.security.spec.*;
|
||||
import java.sql.*;
|
||||
import java.text.*;
|
||||
import java.text.spi.*;
|
||||
import java.time.*;
|
||||
import java.time.chrono.*;
|
||||
import java.time.format.*;
|
||||
import java.time.temporal.*;
|
||||
import java.time.zone.*;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.*;
|
||||
import java.util.concurrent.atomic.*;
|
||||
import java.util.concurrent.locks.*;
|
||||
import java.util.function.*;
|
||||
import java.util.jar.*;
|
||||
import java.util.logging.*;
|
||||
import java.util.prefs.*;
|
||||
import java.util.regex.*;
|
||||
import java.util.spi.*;
|
||||
import java.util.stream.*;
|
||||
import java.util.zip.*;
|
||||
import javax.accessibility.*;
|
||||
import javax.annotation.processing.*;
|
||||
import javax.crypto.*;
|
||||
import javax.crypto.interfaces.*;
|
||||
import javax.crypto.spec.*;
|
||||
import javax.imageio.*;
|
||||
import javax.imageio.event.*;
|
||||
import javax.imageio.metadata.*;
|
||||
import javax.imageio.plugins.bmp.*;
|
||||
import javax.imageio.plugins.jpeg.*;
|
||||
import javax.imageio.plugins.tiff.*;
|
||||
import javax.imageio.spi.*;
|
||||
import javax.imageio.stream.*;
|
||||
import javax.lang.model.*;
|
||||
import javax.lang.model.element.*;
|
||||
import javax.lang.model.type.*;
|
||||
import javax.lang.model.util.*;
|
||||
import javax.management.*;
|
||||
import javax.management.loading.*;
|
||||
import javax.management.modelmbean.*;
|
||||
import javax.management.monitor.*;
|
||||
import javax.management.openmbean.*;
|
||||
import javax.management.relation.*;
|
||||
import javax.management.remote.*;
|
||||
import javax.management.remote.rmi.*;
|
||||
import javax.management.timer.*;
|
||||
import javax.naming.*;
|
||||
import javax.naming.directory.*;
|
||||
import javax.naming.event.*;
|
||||
import javax.naming.ldap.*;
|
||||
import javax.naming.spi.*;
|
||||
import javax.net.*;
|
||||
import javax.net.ssl.*;
|
||||
import javax.print.*;
|
||||
import javax.print.attribute.*;
|
||||
import javax.print.attribute.standard.*;
|
||||
import javax.print.event.*;
|
||||
import javax.rmi.ssl.*;
|
||||
import javax.script.*;
|
||||
import javax.security.auth.*;
|
||||
import javax.security.auth.callback.*;
|
||||
import javax.security.auth.kerberos.*;
|
||||
import javax.security.auth.login.*;
|
||||
import javax.security.auth.spi.*;
|
||||
import javax.security.auth.x500.*;
|
||||
import javax.security.cert.*;
|
||||
import javax.security.sasl.*;
|
||||
import javax.sound.midi.*;
|
||||
import javax.sound.midi.spi.*;
|
||||
import javax.sound.sampled.*;
|
||||
import javax.sound.sampled.spi.*;
|
||||
import javax.sql.*;
|
||||
import javax.sql.rowset.*;
|
||||
import javax.sql.rowset.serial.*;
|
||||
import javax.sql.rowset.spi.*;
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.*;
|
||||
import javax.swing.colorchooser.*;
|
||||
import javax.swing.event.*;
|
||||
import javax.swing.filechooser.*;
|
||||
import javax.swing.plaf.*;
|
||||
import javax.swing.plaf.basic.*;
|
||||
import javax.swing.plaf.metal.*;
|
||||
import javax.swing.plaf.multi.*;
|
||||
import javax.swing.plaf.nimbus.*;
|
||||
import javax.swing.plaf.synth.*;
|
||||
import javax.swing.table.*;
|
||||
import javax.swing.text.*;
|
||||
import javax.swing.text.html.*;
|
||||
import javax.swing.text.html.parser.*;
|
||||
import javax.swing.text.rtf.*;
|
||||
import javax.swing.tree.*;
|
||||
import javax.swing.undo.*;
|
||||
import javax.tools.*;
|
||||
import javax.transaction.xa.*;
|
||||
import javax.xml.*;
|
||||
import javax.xml.catalog.*;
|
||||
import javax.xml.crypto.*;
|
||||
import javax.xml.crypto.dom.*;
|
||||
import javax.xml.crypto.dsig.*;
|
||||
import javax.xml.crypto.dsig.dom.*;
|
||||
import javax.xml.crypto.dsig.keyinfo.*;
|
||||
import javax.xml.crypto.dsig.spec.*;
|
||||
import javax.xml.datatype.*;
|
||||
import javax.xml.namespace.*;
|
||||
import javax.xml.parsers.*;
|
||||
import javax.xml.stream.*;
|
||||
import javax.xml.stream.events.*;
|
||||
import javax.xml.stream.util.*;
|
||||
import javax.xml.transform.*;
|
||||
import javax.xml.transform.dom.*;
|
||||
import javax.xml.transform.sax.*;
|
||||
import javax.xml.transform.stax.*;
|
||||
import javax.xml.transform.stream.*;
|
||||
import javax.xml.validation.*;
|
||||
import javax.xml.xpath.*;
|
||||
import org.ietf.jgss.*;
|
||||
import org.w3c.dom.*;
|
||||
import org.w3c.dom.bootstrap.*;
|
||||
import org.w3c.dom.events.*;
|
||||
import org.w3c.dom.ls.*;
|
||||
import org.w3c.dom.ranges.*;
|
||||
import org.w3c.dom.traversal.*;
|
||||
import org.w3c.dom.views.*;
|
||||
import org.xml.sax.*;
|
||||
import org.xml.sax.ext.*;
|
||||
import org.xml.sax.helpers.*;
|
@ -23,7 +23,7 @@
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8153716 8143955 8151754 8150382 8153920 8156910 8131024 8160089 8153897 8167128 8154513 8170015 8170368 8172102 8172103 8165405 8173073 8173848 8174041 8173916 8174028 8174262 8174797 8177079 8180508 8177466
|
||||
* @bug 8153716 8143955 8151754 8150382 8153920 8156910 8131024 8160089 8153897 8167128 8154513 8170015 8170368 8172102 8172103 8165405 8173073 8173848 8174041 8173916 8174028 8174262 8174797 8177079 8180508 8177466 8172154
|
||||
* @summary Simple jshell tool tests
|
||||
* @modules jdk.compiler/com.sun.tools.javac.api
|
||||
* jdk.compiler/com.sun.tools.javac.main
|
||||
@ -632,6 +632,17 @@ public class ToolSimpleTest extends ReplToolTesting {
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJavaSeSetStart() {
|
||||
test(
|
||||
(a) -> assertCommand(a, "/set sta JAVASE", ""),
|
||||
(a) -> assertCommand(a, "/reset", "| Resetting state."),
|
||||
(a) -> assertCommandCheckOutput(a, "/li -a",
|
||||
s -> assertTrue(s.split("import ").length > 160,
|
||||
"not enough imports for JAVASE:\n" + s))
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void defineClasses() {
|
||||
test(
|
||||
|
Loading…
x
Reference in New Issue
Block a user