Project layout re-organization and various cleanups/fixes #1

Merged
gered merged 25 commits from reorg into master 2017-04-11 23:15:33 -04:00
52 changed files with 208 additions and 175 deletions
Showing only changes of commit d5b5f36a81 - Show all commits

View file

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="compiled" level="project" />
</component>
</module>

34
generator/pom.xml Normal file
View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>bwmirror</groupId>
<artifactId>generator</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.7.3</version>
</dependency>
</dependencies>
<name>BWMirror Generator</name>
<description>Tool for preparing BWMirror Java sources and generating JNI C++ sources for integration with BWAPI and BWTA2.</description>
<licenses>
<license>
<name>GNU Lesser General Public License v3.0</name>
<url>https://www.gnu.org/licenses/lgpl.html</url>
</license>
</licenses>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
</project>

View file

@ -1,14 +1,10 @@
package api;
package bwmirror.api;
import c.CClass;
import c.CDeclaration;
import c.Param;
import generator.Generator;
import generator.MirrorContext;
import generator.PackageProcessOptions;
import impl.Function;
import bwmirror.c.CDeclaration;
import bwmirror.generator.Generator;
import bwmirror.generator.MirrorContext;
import bwmirror.generator.PackageProcessOptions;
import java.util.ArrayList;
import java.util.List;
/**

View file

@ -1,9 +1,9 @@
package api;
package bwmirror.api;
import c.CDeclaration;
import generator.Generator;
import generator.MirrorContext;
import generator.PackageProcessOptions;
import bwmirror.c.CDeclaration;
import bwmirror.generator.Generator;
import bwmirror.generator.MirrorContext;
import bwmirror.generator.PackageProcessOptions;
import java.util.List;

View file

@ -1,4 +1,4 @@
package c;
package bwmirror.c;
import java.util.List;

View file

@ -1,4 +1,4 @@
package c;
package bwmirror.c;
/**
* Created with IntelliJ IDEA.

View file

@ -1,4 +1,4 @@
package c;
package bwmirror.c;
import java.util.List;

View file

@ -1,4 +1,4 @@
package c;
package bwmirror.c;
/**
* Created with IntelliJ IDEA.

View file

@ -1,4 +1,4 @@
package c;
package bwmirror.c;
/**
* User: PC

View file

@ -1,6 +1,6 @@
package c;
package bwmirror.c;
import util.Pair;
import bwmirror.util.Pair;
/**
* User: PC

View file

@ -1,4 +1,4 @@
package c;
package bwmirror.c;
/**
* Created with IntelliJ IDEA.

View file

@ -1,7 +1,4 @@
package c;
import util.Pair;
import util.Triple;
package bwmirror.c;
import java.util.List;

View file

@ -1,6 +1,6 @@
package c;
package bwmirror.c;
import util.Triple;
import bwmirror.util.Triple;
/**
* Created with IntelliJ IDEA.

View file

@ -1,4 +1,4 @@
package c;
package bwmirror.c;
/**
* Created with IntelliJ IDEA.

View file

@ -1,6 +1,6 @@
package compile;
package bwmirror.compile;
import util.FileToString;
import bwmirror.util.FileToString;
import javax.tools.SimpleJavaFileObject;
import java.io.File;

View file

@ -1,23 +1,24 @@
package generator;
package bwmirror.generator;
import api.DefaultEventListener;
import api.GeneratorEventListener;
import c.CClass;
import c.CDeclaration;
import c.CEnum;
import c.DeclarationType;
import generator.c.Bind;
import generator.c.HeaderMaker;
import generator.c.IdCache;
import generator.c.TypeTable;
import generator.ccalls.CallImplementer;
import impl.CApiParser;
import impl.Clazz;
import inject.GetPolygonPointsInjector;
import util.FileUtils;
import bwmirror.api.DefaultEventListener;
import bwmirror.api.GeneratorEventListener;
import bwmirror.c.CClass;
import bwmirror.c.CDeclaration;
import bwmirror.c.CEnum;
import bwmirror.c.DeclarationType;
import bwmirror.generator.c.Bind;
import bwmirror.generator.c.HeaderMaker;
import bwmirror.generator.c.IdCache;
import bwmirror.generator.c.TypeTable;
import bwmirror.generator.ccalls.CallImplementer;
import bwmirror.impl.CApiParser;
import bwmirror.impl.Clazz;
import bwmirror.inject.GetPolygonPointsInjector;
import bwmirror.util.FileUtils;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.*;
@ -61,10 +62,15 @@ public class CJavaPipeline {
}
public void run(PackageProcessOptions[] packages, Properties processingOptions) {
System.out.println("Processing options:");
processingOptions.list(System.out);
/**
Init
*/
System.out.println("\n\nInit");
for (PackageProcessOptions pkg : packages) {
System.out.println("Deleting " + pkg.packageName);
FileUtils.deleteDirectory(new File(pkg.packageName));
}
@ -76,6 +82,7 @@ public class CJavaPipeline {
/**
* Phase 1 & 2 - parse headers and create .java source files
*/
System.out.println("\n\nPhase 1 & 2 - parse headers and create .java source files");
for (PackageProcessOptions pkg : packages) {
CApiParser parser = new CApiParser();
@ -125,11 +132,15 @@ public class CJavaPipeline {
/**
* Phase 3 - copy additional classes into api, such as Mirror.java, AIModule, EventListener, etc
*/
System.out.println("\n\nPhase 3 - copy additional classes into api, such as Mirror.java, AIModule, EventListener, etc");
for (PackageProcessOptions pkg : packages) {
if (pkg.manualCopyClassesDir != null) {
try {
for (File file : pkg.manualCopyClassesDir.listFiles()) {
Files.copy(file.getAbsoluteFile().toPath(), new File(processingOptions.get(GENERATE_TO_DIR) + "/" + pkg.packageName + "/" + file.getName()).getAbsoluteFile().toPath(), StandardCopyOption.REPLACE_EXISTING);
Path source = file.getAbsoluteFile().toPath();
Path target = new File(processingOptions.get(GENERATE_TO_DIR) + "/" + pkg.packageName + "/" + file.getName()).getAbsoluteFile().toPath();
System.out.println("File copy: " + source + " --> " + target);
Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);
}
} catch (IOException e) {
e.printStackTrace();
@ -141,6 +152,7 @@ public class CJavaPipeline {
/**
* Phase 4 - compile .java sources
*/
System.out.println("\n\nPhase 4 - compile .java sources");
File javaOut = new File(processingOptions.getProperty(COMPILE_DIR_PROPERTY));
MyJavaCompiler compiler = new MyJavaCompiler();
@ -151,8 +163,10 @@ public class CJavaPipeline {
/**
* Phase 5 - run javah to create header files for native functions
*/
System.out.println("\n\nPhase 5 - run javah to create header files for native functions");
List<String> packageDirNames = new ArrayList<>();
for (PackageProcessOptions pkg : packages) {
System.out.println("Adding package: " + pkg.packageName);
packageDirNames.add(pkg.packageName);
}
HeaderMaker hm = new HeaderMaker();
@ -161,12 +175,14 @@ public class CJavaPipeline {
/**
* Phase 6 - implementation of native functions
*/
System.out.println("\n\nPhase 6 - implementation of native functions");
JavaContext javaContext = new JavaContext();
CallImplementer callImplementer = new CallImplementer(javaContext);
TypeTable typeTable = new TypeTable();
System.out.println("Using output native implementation source file: " + new File(processingOptions.getProperty(C_IMPLEMENTATION_FILE_PROPERTY)));
PrintStream out = null;
try {
out = new PrintStream(new FileOutputStream(new File(processingOptions.getProperty(C_IMPLEMENTATION_FILE_PROPERTY))));
@ -180,6 +196,7 @@ public class CJavaPipeline {
/**
* Phase 6.1 - implement caches
*/
System.out.println("\n\nPhase 6.1 - implement caches");
//caches for constants
typeTable.implementTypeTable(allDecs);
@ -191,7 +208,7 @@ public class CJavaPipeline {
/**
* Phase 6.2 - implement the native function bodies
*/
System.out.println("\n\nPhase 6.2 - implement the native function bodies");
File headersDir = new File(processingOptions.getProperty(HEADERS_DIR_PROPERTY));
for (PackageProcessOptions pkg : packages) {
@ -210,6 +227,7 @@ public class CJavaPipeline {
//pair each .java file with its native header file
File header = new File(headersDir, pkg.packageName + "_" + file.getName().substring(0, file.getName().lastIndexOf(".")) + ".h");
System.out.println("implementing natives in " + file + " using native header " + header);
try {
//implement the native method bodies
callImplementer.implementMethodCalls(file, header);
@ -225,7 +243,7 @@ public class CJavaPipeline {
* Phase 6.3 - bind the remaining part of the java API to the C part:
* Bind constants together and create initialisation function
*/
System.out.println("\n\nPhase 6.3 - bind the remaining part of the java API to the C part");
javaContext.setPackageName(packages[0].packageName);
Bind bind = new Bind(javaContext);
bind.setOut(out);

View file

@ -1,9 +1,9 @@
package generator;
package bwmirror.generator;
import c.CClass;
import c.CEnum;
import generator.java.ClassMirror;
import generator.java.EnumMirror;
import bwmirror.c.CClass;
import bwmirror.c.CEnum;
import bwmirror.generator.java.ClassMirror;
import bwmirror.generator.java.EnumMirror;
import java.io.File;
import java.util.ArrayList;

View file

@ -1,8 +1,7 @@
package generator;
package bwmirror.generator;
import util.Generic;
import util.PointerTest;
import util.StringUtils;
import bwmirror.util.Generic;
import bwmirror.util.PointerTest;
import java.util.Arrays;
import java.util.HashMap;

View file

@ -1,4 +1,4 @@
package generator;
package bwmirror.generator;
import java.io.File;
import java.util.ArrayList;

View file

@ -1,6 +1,6 @@
package generator;
package bwmirror.generator;
import compile.JavaSourceFile;
import bwmirror.compile.JavaSourceFile;
import javax.tools.*;
import java.io.File;
@ -20,30 +20,41 @@ public class MyJavaCompiler {
@SuppressWarnings("ConstantConditions")
public void run(File inDir, File outDir) {
System.out.println("Compiling " + inDir + ", output " + outDir);
outDir.delete();
outDir.mkdir();
List<JavaFileObject> javaFileObjects = new ArrayList<JavaFileObject>();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
Iterable<String> compilationOptions = Arrays.asList("-d", outDir.getName());
Iterable<String> compilationOptions = Arrays.asList("-d", outDir.getName(), "-cp", outDir.getName());
System.out.print("Compile options: ");
for (String option : compilationOptions) {
System.out.print(option + " ");
}
System.out.println();
System.out.println("Compiling source files:");
for (File file : inDir.listFiles()) {
if(file.isDirectory()){
for(File ffile : file.listFiles()){
if(ffile.isDirectory()){
for(File fffile : ffile.listFiles()){
System.out.println(fffile);
javaFileObjects.add(new JavaSourceFile(fffile));
}
continue;
}
System.out.println(ffile);
javaFileObjects.add(new JavaSourceFile(ffile));
}
continue;
}
System.out.println(file);
javaFileObjects.add(new JavaSourceFile(file));
}
System.out.println("\nCompiling ...");
JavaCompiler.CompilationTask compilerTask =
compiler.getTask(null, compiler.getStandardFileManager(null, Locale.getDefault(), null), diagnostics, compilationOptions, null, javaFileObjects);

View file

@ -1,4 +1,4 @@
package generator;
package bwmirror.generator;
import java.io.File;
import java.util.List;

View file

@ -1,17 +1,17 @@
package generator.c;
package bwmirror.generator.c;
import c.CClass;
import c.CDeclaration;
import c.DeclarationType;
import c.Field;
import generator.CJavaPipeline;
import generator.JavaContext;
import impl.ClassVariable;
import bwmirror.c.CClass;
import bwmirror.c.CDeclaration;
import bwmirror.c.DeclarationType;
import bwmirror.c.Field;
import bwmirror.generator.CJavaPipeline;
import bwmirror.generator.JavaContext;
import bwmirror.impl.ClassVariable;
import java.io.PrintStream;
import java.util.List;
import static generator.JavaContext.checkBWAPI3brackets;
import static bwmirror.generator.JavaContext.checkBWAPI3brackets;
/**
* User: PC

View file

@ -1,4 +1,4 @@
package generator.c;
package bwmirror.generator.c;
import java.io.*;
import java.util.List;
@ -33,11 +33,8 @@ public class HeaderMaker {
return result.toString();
}
public void run(List<String> javaRoot, File clpath, String outputFile, String outputDir) {
String command;
command = "javah -o " + outputFile +" -classpath " + clpath.toString() + prepareClassList(javaRoot, clpath);
// System.out.println(command);
private void runCommand(String command) {
System.out.println(command);
try {
Process process = Runtime.getRuntime().exec(command);
//process.getErrorStream()
@ -49,18 +46,14 @@ public class HeaderMaker {
} catch (IOException e) {
e.printStackTrace();
}
/*command = "javah -d " + outputDir +" -classpath " + clpath.toString() + prepareClassList(javaRoot, clpath);
try {
Process process = Runtime.getRuntime().exec(command);
//process.getErrorStream()
BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String s;
while ((s = br.readLine()) != null) {
System.out.println(s);
}
} catch (IOException e) {
e.printStackTrace();
} */
}
public void run(List<String> javaRoot, File clpath, String outputFile, String outputDir) {
// need to run javah twice. once to generate all the individual header files (one per class)
// and then again to generate a combined header. unfortunately javah will only use the "-d"
// option if we pass in both "-o" and "-d"
runCommand("javah -o " + outputFile + " -classpath " + clpath.toString() + prepareClassList(javaRoot, clpath));
runCommand("javah -d " + outputDir + " -classpath " + clpath.toString() + prepareClassList(javaRoot, clpath));
}
}

View file

@ -1,4 +1,4 @@
package generator.c;
package bwmirror.generator.c;
import java.io.PrintStream;

View file

@ -1,11 +1,9 @@
package generator.c;
package bwmirror.generator.c;
import c.CClass;
import c.CDeclaration;
import c.DeclarationType;
import c.Field;
import generator.CJavaPipeline;
import util.PointerTest;
import bwmirror.c.CClass;
import bwmirror.c.CDeclaration;
import bwmirror.c.DeclarationType;
import bwmirror.c.Field;
import java.io.PrintStream;
import java.util.List;

View file

@ -1,10 +1,10 @@
package generator.ccalls;
package bwmirror.generator.ccalls;
import c.Param;
import generator.CJavaPipeline;
import generator.JavaContext;
import util.Generic;
import util.PointerTest;
import bwmirror.c.Param;
import bwmirror.generator.CJavaPipeline;
import bwmirror.generator.JavaContext;
import bwmirror.util.Generic;
import bwmirror.util.PointerTest;
import java.io.BufferedReader;
import java.io.File;

View file

@ -1,7 +1,7 @@
package generator.java;
package bwmirror.generator.java;
import c.*;
import generator.MirrorContext;
import bwmirror.c.*;
import bwmirror.generator.MirrorContext;
import java.io.File;
import java.io.PrintStream;

View file

@ -1,9 +1,9 @@
package generator.java;
package bwmirror.generator.java;
import c.CDeclaration;
import c.CEnum;
import c.EnumValue;
import generator.MirrorContext;
import bwmirror.c.CDeclaration;
import bwmirror.c.CEnum;
import bwmirror.c.EnumValue;
import bwmirror.generator.MirrorContext;
import java.io.File;
import java.io.PrintStream;

View file

@ -1,13 +1,13 @@
package generator.java;
package bwmirror.generator.java;
import c.CClass;
import c.CDeclaration;
import generator.CJavaPipeline;
import generator.MirrorContext;
import javadoc.Crawler;
import javadoc.CrawlerBWAPI4;
import javadoc.Documentation;
import javadoc.DocumentedField;
import bwmirror.c.CClass;
import bwmirror.c.CDeclaration;
import bwmirror.generator.CJavaPipeline;
import bwmirror.generator.MirrorContext;
import bwmirror.javadoc.Crawler;
import bwmirror.javadoc.CrawlerBWAPI4;
import bwmirror.javadoc.Documentation;
import bwmirror.javadoc.DocumentedField;
import java.io.PrintStream;

View file

@ -1,7 +1,7 @@
package impl;
package bwmirror.impl;
import c.*;
import generator.CJavaPipeline;
import bwmirror.c.*;
import bwmirror.generator.CJavaPipeline;
import java.io.BufferedReader;
import java.io.File;

View file

@ -1,7 +1,7 @@
package impl;
package bwmirror.impl;
import c.DeclarationType;
import c.Variable;
import bwmirror.c.DeclarationType;
import bwmirror.c.Variable;
/**
* User: PC

View file

@ -1,8 +1,8 @@
package impl;
package bwmirror.impl;
import c.CClass;
import c.DeclarationType;
import c.Field;
import bwmirror.c.CClass;
import bwmirror.c.DeclarationType;
import bwmirror.c.Field;
import java.util.List;

View file

@ -1,8 +1,8 @@
package impl;
package bwmirror.impl;
import c.CEnum;
import c.DeclarationType;
import c.EnumValue;
import bwmirror.c.CEnum;
import bwmirror.c.DeclarationType;
import bwmirror.c.EnumValue;
import java.util.ArrayList;
import java.util.List;

View file

@ -1,4 +1,4 @@
package impl;
package bwmirror.impl;
import java.util.ArrayList;

View file

@ -1,8 +1,8 @@
package impl;
package bwmirror.impl;
import c.DeclarationType;
import c.Method;
import c.Param;
import bwmirror.c.DeclarationType;
import bwmirror.c.Method;
import bwmirror.c.Param;
import java.util.ArrayList;
import java.util.List;

View file

@ -1,11 +1,11 @@
package inject;
package bwmirror.inject;
import api.DefaultEventListener;
import c.CClass;
import c.CDeclaration;
import c.Param;
import generator.PackageProcessOptions;
import impl.Function;
import bwmirror.api.DefaultEventListener;
import bwmirror.c.CClass;
import bwmirror.c.CDeclaration;
import bwmirror.c.Param;
import bwmirror.generator.PackageProcessOptions;
import bwmirror.impl.Function;
import java.util.ArrayList;

View file

@ -1,4 +1,4 @@
package javadoc;
package bwmirror.javadoc;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

View file

@ -1,4 +1,4 @@
package javadoc;
package bwmirror.javadoc;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

View file

@ -1,4 +1,4 @@
package javadoc;
package bwmirror.javadoc;
import java.util.HashMap;

View file

@ -1,4 +1,4 @@
package javadoc;
package bwmirror.javadoc;
/**
* User: PC

View file

@ -1,4 +1,4 @@
package util;
package bwmirror.util;
import java.io.IOException;
import java.net.URI;

View file

@ -1,4 +1,4 @@
package util;
package bwmirror.util;
import java.io.File;

View file

@ -1,4 +1,4 @@
package util;
package bwmirror.util;
/**
* User: PC

View file

@ -1,4 +1,4 @@
package util;
package bwmirror.util;
/**
* Created with IntelliJ IDEA.

View file

@ -1,4 +1,4 @@
package util;
package bwmirror.util;
/**
* Created with IntelliJ IDEA.

View file

@ -1,6 +1,6 @@
package util;
package bwmirror.util;
import generator.CJavaPipeline;
import bwmirror.generator.CJavaPipeline;
import java.util.Arrays;
import java.util.List;

View file

@ -1,4 +1,4 @@
package util;
package bwmirror.util;
/**
* User: PC

View file

@ -1,4 +1,4 @@
package util;
package bwmirror.util;
/**
* Created with IntelliJ IDEA.

Binary file not shown.