diff --git a/jParser/base/build.gradle.kts b/jParser/base/build.gradle.kts index bfb62332..7f659477 100644 --- a/jParser/base/build.gradle.kts +++ b/jParser/base/build.gradle.kts @@ -4,6 +4,13 @@ plugins { val moduleName = "jParser-base" +tasks { + withType { + from(sourceSets["main"].allSource) + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + } +} + dependencies { } diff --git a/jParser/base/src/main/java/com/github/xpenatan/jparser/base/helper/BoolArray.java b/jParser/base/src/main/java/com/github/xpenatan/jparser/base/helper/BoolArray.java new file mode 100644 index 00000000..fe640742 --- /dev/null +++ b/jParser/base/src/main/java/com/github/xpenatan/jparser/base/helper/BoolArray.java @@ -0,0 +1,7 @@ +package com.github.xpenatan.jparser.base.helper; + +public class BoolArray { + public void copy(double [] array) { + + } +} \ No newline at end of file diff --git a/jParser/base/src/main/java/com/github/xpenatan/jparser/base/helper/CharArray.java b/jParser/base/src/main/java/com/github/xpenatan/jparser/base/helper/CharArray.java new file mode 100644 index 00000000..f04528af --- /dev/null +++ b/jParser/base/src/main/java/com/github/xpenatan/jparser/base/helper/CharArray.java @@ -0,0 +1,7 @@ +package com.github.xpenatan.jparser.base.helper; + +public class CharArray { + public void copy(double [] array) { + + } +} \ No newline at end of file diff --git a/jParser/base/src/main/java/com/github/xpenatan/jparser/base/helper/DoubleArray.java b/jParser/base/src/main/java/com/github/xpenatan/jparser/base/helper/DoubleArray.java new file mode 100644 index 00000000..7e0766d8 --- /dev/null +++ b/jParser/base/src/main/java/com/github/xpenatan/jparser/base/helper/DoubleArray.java @@ -0,0 +1,9 @@ +package com.github.xpenatan.jparser.base.helper; + +import com.github.xpenatan.jparser.base.IDLBase; + +public class DoubleArray extends IDLBase { + public void copy(double [] array) { + + } +} \ No newline at end of file diff --git a/jParser/base/src/main/java/com/github/xpenatan/jparser/base/helper/FloatArray.java b/jParser/base/src/main/java/com/github/xpenatan/jparser/base/helper/FloatArray.java new file mode 100644 index 00000000..59490ab7 --- /dev/null +++ b/jParser/base/src/main/java/com/github/xpenatan/jparser/base/helper/FloatArray.java @@ -0,0 +1,10 @@ +package com.github.xpenatan.jparser.base.helper; + +import com.github.xpenatan.jparser.base.IDLBase; + +public class FloatArray extends IDLBase { + + public void copy(float [] array) { + + } +} \ No newline at end of file diff --git a/jParser/base/src/main/java/com/github/xpenatan/jparser/base/helper/IntArray.java b/jParser/base/src/main/java/com/github/xpenatan/jparser/base/helper/IntArray.java new file mode 100644 index 00000000..29d47380 --- /dev/null +++ b/jParser/base/src/main/java/com/github/xpenatan/jparser/base/helper/IntArray.java @@ -0,0 +1,10 @@ +package com.github.xpenatan.jparser.base.helper; + +import com.github.xpenatan.jparser.base.IDLBase; + +public class IntArray extends IDLBase { + + public void copy(int [] array) { + + } +} diff --git a/jParser/idl/build.gradle.kts b/jParser/idl/build.gradle.kts index 7050d194..2c8d5dd6 100644 --- a/jParser/idl/build.gradle.kts +++ b/jParser/idl/build.gradle.kts @@ -4,11 +4,6 @@ plugins { val moduleName = "jParser-idl" -sourceSets["main"].resources.setSrcDirs(arrayListOf( - "../base/src/main/java/", - "../base/src/main/resources/" -)) - dependencies { implementation(project(":jParser:base")) implementation(project(":jParser:core")) diff --git a/jParser/idl/src/main/java/com/github/xpenatan/jparser/idl/ResourceList.java b/jParser/idl/src/main/java/com/github/xpenatan/jparser/idl/ResourceList.java new file mode 100644 index 00000000..72816808 --- /dev/null +++ b/jParser/idl/src/main/java/com/github/xpenatan/jparser/idl/ResourceList.java @@ -0,0 +1,91 @@ +package com.github.xpenatan.jparser.idl; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Enumeration; +import java.util.regex.Pattern; +import java.util.zip.ZipEntry; +import java.util.zip.ZipException; +import java.util.zip.ZipFile; + +// Class from https://stackoverflow.com/questions/3923129/get-a-list-of-resources-from-classpath-directory +public class ResourceList { + + public static Collection getResources( + final Pattern pattern){ + final ArrayList retval = new ArrayList<>(); + final String classPath = System.getProperty("java.class.path", "."); + final String[] classPathElements = classPath.split(System.getProperty("path.separator")); + for(final String element : classPathElements){ + retval.addAll(getResources(element, pattern)); + } + return retval; + } + + private static Collection getResources( + final String element, + final Pattern pattern){ + final ArrayList retval = new ArrayList(); + final File file = new File(element); + if(file.isDirectory()){ + retval.addAll(getResourcesFromDirectory(file, pattern)); + } else{ + retval.addAll(getResourcesFromJarFile(file, pattern)); + } + return retval; + } + + private static Collection getResourcesFromJarFile( + final File file, + final Pattern pattern){ + final ArrayList retval = new ArrayList(); + ZipFile zf; + try{ + zf = new ZipFile(file); + } catch(final ZipException e){ + throw new Error(e); + } catch(final IOException e){ + throw new Error(e); + } + final Enumeration e = zf.entries(); + while(e.hasMoreElements()){ + final ZipEntry ze = (ZipEntry) e.nextElement(); + final String fileName = ze.getName(); + final boolean accept = pattern.matcher(fileName).matches(); + if(accept){ + retval.add(fileName); + } + } + try{ + zf.close(); + } catch(final IOException e1){ + throw new Error(e1); + } + return retval; + } + + private static Collection getResourcesFromDirectory( + final File directory, + final Pattern pattern){ + final ArrayList retval = new ArrayList(); + final File[] fileList = directory.listFiles(); + for(final File file : fileList){ + if(file.isDirectory()){ + retval.addAll(getResourcesFromDirectory(file, pattern)); + } else{ + try{ + final String fileName = file.getCanonicalPath(); + final boolean accept = pattern.matcher(fileName).matches(); + if(accept){ + retval.add(fileName); + } + } catch(final IOException e){ + throw new Error(e); + } + } + } + return retval; + } +} \ No newline at end of file diff --git a/jParser/idl/src/main/java/com/github/xpenatan/jparser/idl/parser/IDLClassGeneratorParser.java b/jParser/idl/src/main/java/com/github/xpenatan/jparser/idl/parser/IDLClassGeneratorParser.java index 2d7d191d..b14b7e97 100644 --- a/jParser/idl/src/main/java/com/github/xpenatan/jparser/idl/parser/IDLClassGeneratorParser.java +++ b/jParser/idl/src/main/java/com/github/xpenatan/jparser/idl/parser/IDLClassGeneratorParser.java @@ -14,10 +14,13 @@ import com.github.xpenatan.jparser.idl.IDLClass; import com.github.xpenatan.jparser.idl.IDLFile; import com.github.xpenatan.jparser.idl.IDLReader; +import com.github.xpenatan.jparser.idl.ResourceList; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.util.Collection; +import java.util.regex.Pattern; /** * @author xpenatan @@ -55,22 +58,24 @@ public void onParseStart(JParser jParser) { String packagePath = File.separator + basePackage.replace(".", File.separator); String genPath = new File(jParser.genDir + packagePath).getAbsolutePath(); - createBaseUnitFromResources(jParser, genPath); + createBaseUnitFromResources(jParser); generateIDLJavaClasses(jParser, genPath); } - private void createBaseUnitFromResources(JParser jParser, String genPath) { - try { - BASE_CLASS_NAME = IDLBase.class.getSimpleName(); - String basePath = IDLBase.class.getName().replaceAll("\\.", "/") + ".java"; - baseClassUnit = StaticJavaParser.parseResource(basePath); - } catch(IOException e) { - throw new RuntimeException(e); + private void createBaseUnitFromResources(JParser jParser) { + BASE_CLASS_NAME = IDLBase.class.getSimpleName(); + Collection resources = ResourceList.getResources(Pattern.compile("/*.*/*.java")); + for(String resource : resources) { + try { + CompilationUnit compilationUnit = StaticJavaParser.parseResource(resource); + String genBaseClassPath = jParser.genDir + File.separator + resource; + jParser.unitArray.add(new JParserItem(compilationUnit, genBaseClassPath, genBaseClassPath)); + } catch(IOException e) { + throw new RuntimeException(e); + } } - - String genBaseClassPath = genPath + File.separator + BASE_CLASS_NAME + ".java"; - baseClassUnit.setPackageDeclaration(basePackage); - jParser.unitArray.add(new JParserItem(baseClassUnit, genBaseClassPath, genBaseClassPath)); + JParserItem parserUnitItem = jParser.getParserUnitItem(BASE_CLASS_NAME); + baseClassUnit = parserUnitItem.unit; } private void generateIDLJavaClasses(JParser jParser, String genPath) {