460 */
461 static class MainClassListener implements TaskListener {
462 TypeElement mainClass;
463
464 MainClassListener(JavacTask t) {
465 t.addTaskListener(this);
466 }
467
468 @Override
469 public void started(TaskEvent ev) {
470 if (ev.getKind() == TaskEvent.Kind.ANALYZE && mainClass == null) {
471 TypeElement te = ev.getTypeElement();
472 if (te.getNestingKind() == NestingKind.TOP_LEVEL) {
473 mainClass = te;
474 }
475 }
476 }
477 }
478
479 /**
480 * An object to encapulate the set of in-memory classes, such that
481 * they can be written by a file manager and subsequently used by
482 * a class loader.
483 */
484 private static class Context {
485 private final Path file;
486 private final Map<String, byte[]> inMemoryClasses = new HashMap<>();
487
488 Context(Path file) {
489 this.file = file;
490 }
491
492 JavaFileManager getFileManager(StandardJavaFileManager delegate) {
493 return new MemoryFileManager(inMemoryClasses, delegate);
494 }
495
496 ClassLoader getClassLoader(ClassLoader parent) {
497 return new MemoryClassLoader(inMemoryClasses, parent, file);
498 }
499 }
500
|
460 */
461 static class MainClassListener implements TaskListener {
462 TypeElement mainClass;
463
464 MainClassListener(JavacTask t) {
465 t.addTaskListener(this);
466 }
467
468 @Override
469 public void started(TaskEvent ev) {
470 if (ev.getKind() == TaskEvent.Kind.ANALYZE && mainClass == null) {
471 TypeElement te = ev.getTypeElement();
472 if (te.getNestingKind() == NestingKind.TOP_LEVEL) {
473 mainClass = te;
474 }
475 }
476 }
477 }
478
479 /**
480 * An object to encapsulate the set of in-memory classes, such that
481 * they can be written by a file manager and subsequently used by
482 * a class loader.
483 */
484 private static class Context {
485 private final Path file;
486 private final Map<String, byte[]> inMemoryClasses = new HashMap<>();
487
488 Context(Path file) {
489 this.file = file;
490 }
491
492 JavaFileManager getFileManager(StandardJavaFileManager delegate) {
493 return new MemoryFileManager(inMemoryClasses, delegate);
494 }
495
496 ClassLoader getClassLoader(ClassLoader parent) {
497 return new MemoryClassLoader(inMemoryClasses, parent, file);
498 }
499 }
500
|