< prev index next >

src/jdk.jextract/share/classes/com/sun/tools/jextract/JextractTool.java

Print this page

        

*** 30,39 **** --- 30,40 ---- import java.io.IOException; import java.io.UncheckedIOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.Collection; + import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set;
*** 42,62 **** import java.util.stream.Stream; public class JextractTool { private final HeaderResolver headerResolver; private final Parser parser; - private final Function<HeaderFile, AsmCodeFactory> codeFactory; private final Collection<String> clangArgs; private final Collection<Path> sources; private final Context ctx; public JextractTool(Context ctx) { this.headerResolver = new HeaderResolver(ctx); this.parser = new Parser(ctx, Options.INCLUDE_MACROS); - this.codeFactory = ctx.options.genStaticForwarder ? - hf -> new AsmCodeFactoryExt(ctx, hf) : - hf -> new AsmCodeFactory(ctx, hf); this.clangArgs = ctx.options.clangArgs; this.sources = ctx.sources; this.ctx = ctx; assert sources.size() > 0; } --- 43,59 ----
*** 75,99 **** .flatMap(h -> h.declarations().stream()) .peek(new FlexibleArrayWarningVisitor(ctx)) .collect(Collectors.groupingBy(this::headerFromDecl)); //generate classes ! Map<String, byte[]> results = new LinkedHashMap<>(); ! headerMap.forEach((hf, decls) -> generateHeader(hf, decls, results)); ! return new Writer(ctx, results); } ! private void generateHeader(HeaderFile hf, List<Tree> decls, Map<String, byte[]> results) { TypeEnter enter = new TypeEnter(hf.dictionary()); decls.forEach(t -> t.accept(enter, null)); - if (ctx.options.srcDumpDir != null) { JavaSourceFactory jsb = ctx.options.genStaticForwarder ? new JavaSourceFactoryExt(ctx, hf) : new JavaSourceFactory(ctx, hf); ! jsb.generate(decls); ! } ! AsmCodeFactory cf = codeFactory.apply(hf); ! results.putAll(cf.generateNativeHeader(decls)); } private HeaderFile headerFromDecl(Tree tree) { Path path = tree.cursor().getSourceLocation().getFileLocation().path(); return headerResolver.headerFor(path); --- 72,93 ---- .flatMap(h -> h.declarations().stream()) .peek(new FlexibleArrayWarningVisitor(ctx)) .collect(Collectors.groupingBy(this::headerFromDecl)); //generate classes ! Map<String, String> srcMap = new HashMap<>(); ! headerMap.forEach((hf, decls) -> generateHeader(hf, decls,srcMap)); ! Map<String, byte[]> classMap = !srcMap.isEmpty()? InMemoryJavaCompiler.compile(srcMap) : Map.of(); ! return new Writer(ctx, classMap); } ! private void generateHeader(HeaderFile hf, List<Tree> decls, Map<String, String> srcMap) { TypeEnter enter = new TypeEnter(hf.dictionary()); decls.forEach(t -> t.accept(enter, null)); JavaSourceFactory jsb = ctx.options.genStaticForwarder ? new JavaSourceFactoryExt(ctx, hf) : new JavaSourceFactory(ctx, hf); ! srcMap.putAll(jsb.generate(decls)); } private HeaderFile headerFromDecl(Tree tree) { Path path = tree.cursor().getSourceLocation().getFileLocation().path(); return headerResolver.headerFor(path);
< prev index next >