--- old/src/jdk.jextract/share/classes/com/sun/tools/jextract/HeaderFile.java 2018-02-23 10:56:58.000000000 +0530 +++ new/src/jdk.jextract/share/classes/com/sun/tools/jextract/HeaderFile.java 2018-02-23 10:56:58.000000000 +0530 @@ -28,6 +28,7 @@ import jdk.internal.clang.TypeKind; import java.nio.file.Path; +import java.util.Collections; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Logger; import java.util.List; @@ -36,34 +37,40 @@ * This class represent a native code header file */ public final class HeaderFile { + private final Context ctx; final Path path; final String pkgName; final String clsName; - final TypeDictionary dict; + private final TypeDictionary dict; // The top header file cause this file to be parsed - HeaderFile main; - CodeFactory cf; - List libraries; - List libraryPaths; + private HeaderFile main; + private CodeFactory cf; + List libraries; // immutable + List libraryPaths; // immutable private final AtomicInteger serialNo; private final Context.SymbolChecker symChecker; - final Logger logger = Logger.getLogger(getClass().getPackage().getName()); + private final Logger logger = Logger.getLogger(getClass().getPackage().getName()); - HeaderFile(Path path, String pkgName, String clsName, HeaderFile main, Context.SymbolChecker symChecker) { + HeaderFile(Context ctx, Path path, String pkgName, String clsName, HeaderFile main, Context.SymbolChecker symChecker) { + this.ctx = ctx; this.path = path; this.pkgName = pkgName; this.clsName = clsName; - dict = TypeDictionary.of(pkgName); + dict = ctx.typeDictionaryFor(pkgName); serialNo = new AtomicInteger(); this.main = main == null ? this : main; this.symChecker = symChecker; } void useLibraries(List libraries, List libraryPaths) { - this.libraries = libraries; - this.libraryPaths = libraryPaths; + this.libraries = Collections.unmodifiableList(libraries); + this.libraryPaths = Collections.unmodifiableList(libraryPaths); + } + + CodeFactory getCodeFactory() { + return cf; } /** @@ -76,7 +83,7 @@ logger.config(() -> "CodeFactory had been initialized for " + path); // Diagnosis code if (Main.DEBUG) { - new Throwable().printStackTrace(Context.getInstance().err); + new Throwable().printStackTrace(ctx.err); } } else { this.cf = cf; @@ -100,7 +107,7 @@ t.kind() == TypeKind.FunctionNoProto) { String name = c.spelling(); if (!symChecker.lookup(name)) { - Context.getInstance().err.println(Main.format("warn.symbol.not.found", name)); + ctx.err.println(Main.format("warn.symbol.not.found", name)); } } }