< prev index next >
src/jdk.jextract/share/classes/com/sun/tools/jextract/HeaderFile.java
Print this page
*** 21,113 ****
* questions.
*/
package com.sun.tools.jextract;
import java.nio.file.Path;
- import java.util.Collections;
- import java.util.List;
- import java.util.logging.Logger;
-
- import com.sun.tools.jextract.tree.StructTree;
- import com.sun.tools.jextract.tree.Tree;
/**
* 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;
private final TypeDictionary dict;
- // The top header file cause this file to be parsed
- private HeaderFile main;
- private AsmCodeFactory cf;
- List<String> libraries; // immutable
- List<String> libraryPaths; // immutable
-
- private final Logger logger = Logger.getLogger(getClass().getPackage().getName());
! HeaderFile(Context ctx, Path path, String pkgName, String clsName, HeaderFile main) {
! this.ctx = ctx;
this.path = path;
this.pkgName = pkgName;
this.clsName = clsName;
! this.main = main == null ? this : main;
! this.dict = new TypeDictionary(ctx, this);
! }
!
! void useLibraries(List<String> libraries, List<String> libraryPaths) {
! this.libraries = Collections.unmodifiableList(libraries);
! this.libraryPaths = Collections.unmodifiableList(libraryPaths);
! }
!
! AsmCodeFactory getCodeFactory() {
! return cf;
}
TypeDictionary dictionary() {
return dict;
}
- /**
- * Call this function to enable code generation for this HeaderFile.
- * This function should only be called once to turn on code generation and before process any cursor.
- * @param cf The CodeFactory used to generate code
- */
- void useCodeFactory(AsmCodeFactory cf) {
- if (null != this.cf) {
- logger.config(() -> "CodeFactory had been initialized for " + path);
- // Diagnosis code
- if (Main.DEBUG) {
- new Throwable().printStackTrace(ctx.err);
- }
- } else {
- this.cf = cf;
- }
- }
-
@Override
public String toString() {
return "HeaderFile(path=" + path + ")";
}
-
- void processTree(Tree tree, HeaderFile main, boolean isBuiltIn) {
- if (tree.isDeclaration()) {
- tree.accept(new TypeEnter(dictionary()), null);
- JType jt = dictionary().lookup(tree.type());
-
- if (tree instanceof StructTree) {
- ((StructTree)tree).nestedTypes().forEach(nt -> processTree(nt, main, isBuiltIn));
- }
-
- // Only main file can define interface
- if (cf != null && this.main == main) {
- cf.addType(jt, tree);
- }
- } else if (tree.isPreprocessing() && !isBuiltIn) {
- if (cf != null) {
- tree.accept(cf, null);
- }
- }
- }
}
--- 21,51 ----
* questions.
*/
package com.sun.tools.jextract;
import java.nio.file.Path;
/**
* This class represent a native code header file
*/
public final class HeaderFile {
final Path path;
final String pkgName;
final String clsName;
private final TypeDictionary dict;
! HeaderFile(HeaderResolver resolver, Path path, String pkgName, String clsName) {
this.path = path;
this.pkgName = pkgName;
this.clsName = clsName;
! this.dict = new TypeDictionary(resolver, this);
}
TypeDictionary dictionary() {
return dict;
}
@Override
public String toString() {
return "HeaderFile(path=" + path + ")";
}
}
< prev index next >