Skip to content

Commit d76a984

Browse files
gselzerctrueden
authored andcommitted
generate module-info via Apache Velocity
1 parent efd5182 commit d76a984

6 files changed

Lines changed: 205 additions & 8 deletions

File tree

scijava/scijava-ops/src/main/java/module-info.java

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,57 @@
1-
open module org.scijava.ops {
2-
1+
module org.scijava.ops {
2+
3+
/*
4+
* This is autogenerated source code -- DO NOT EDIT. Instead, edit the
5+
* corresponding template in templates/ and rerun bin/generate.groovy.
6+
*/
7+
38
//TODO: rearrange packages to export only needed classes
49
exports org.scijava.ops; //contains OpDependency interface
510
exports org.scijava.ops.core; // contains OpCollection, Op interfaces
611
exports org.scijava.ops.core.builder; // contains OpBuilder classes
7-
exports org.scijava.ops.hints;
812
exports org.scijava.ops.matcher;
9-
exports org.scijava.ops.provenance;
1013
exports org.scijava.ops.math;
1114
exports org.scijava.ops.simplify;
1215
exports org.scijava.ops.conversionLoss;
16+
exports org.scijava.ops.provenance;
1317
// TODO: move OpWrapper to its own package (org.scijava.ops.wrap??)
1418
exports org.scijava.ops.util; // contains OpWrapper interface
1519
exports org.scijava.struct;
1620
exports org.scijava.param;
1721

18-
// FIXME: This is a file name and is thus unstable
19-
requires geantyref;
22+
opens org.scijava.ops.conversionLoss to therapi.runtime.javadoc;
23+
opens org.scijava.ops.log to therapi.runtime.javadoc;
24+
opens org.scijava.ops.core.builder to therapi.runtime.javadoc;
25+
opens org.scijava.ops.copy to therapi.runtime.javadoc;
26+
opens org.scijava.ops.hints to therapi.runtime.javadoc;
27+
opens org.scijava.ops.adapt.complexLift to therapi.runtime.javadoc;
28+
opens org.scijava.ops.math to therapi.runtime.javadoc;
29+
opens org.scijava.ops.adapt.lift to therapi.runtime.javadoc;
30+
opens org.scijava.ops.create to therapi.runtime.javadoc;
31+
opens org.scijava.ops.impl to therapi.runtime.javadoc, org.scijava;
32+
opens org.scijava.ops.monitor to therapi.runtime.javadoc;
33+
opens org.scijava.ops.provenance to therapi.runtime.javadoc;
34+
opens org.scijava.ops.hints.impl to therapi.runtime.javadoc;
35+
opens org.scijava.ops.adapt.functional to therapi.runtime.javadoc;
36+
opens org.scijava.ops to therapi.runtime.javadoc, org.scijava;
37+
opens org.scijava.ops.util to therapi.runtime.javadoc;
38+
opens org.scijava.struct to therapi.runtime.javadoc;
39+
opens org.scijava.ops.matcher to therapi.runtime.javadoc;
40+
opens org.scijava.ops.simplify to therapi.runtime.javadoc;
41+
opens org.scijava.ops.stats to therapi.runtime.javadoc;
42+
opens org.scijava.ops.core to therapi.runtime.javadoc;
43+
opens org.scijava.ops.provenance.impl to therapi.runtime.javadoc, org.scijava;
44+
opens org.scijava.param to therapi.runtime.javadoc;
2045

21-
requires java.desktop;
46+
// FIXME: This is a file name and is thus unstable
47+
requires geantyref;
48+
49+
requires java.desktop;
2250

2351
requires org.scijava;
52+
requires org.scijava.function;
2453
requires org.scijava.types;
2554
requires javassist;
26-
requires org.scijava.function;
2755
requires java.compiler;
2856
requires therapi.runtime.javadoc;
2957

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
2+
package org.scijava.ops;
3+
4+
import static org.junit.Assert.assertTrue;
5+
6+
import java.io.File;
7+
import java.io.IOException;
8+
import java.nio.file.Files;
9+
import java.nio.file.Paths;
10+
import java.util.HashSet;
11+
import java.util.List;
12+
import java.util.Set;
13+
import java.util.stream.Collectors;
14+
import java.util.stream.Stream;
15+
16+
import org.junit.Test;
17+
18+
public class ModuleTest extends AbstractTestEnvironment {
19+
20+
String moduleBaseDirectory = "src/main/java/org/scijava";
21+
22+
/**
23+
* Recursively finds the name of each package within the module
24+
* org.scijava.ops
25+
*
26+
* @param set the set that will be populated with the module names
27+
* @param dirName the starting directory
28+
*/
29+
private void findPackageNames(Set<String> set, String dirName) {
30+
File directory = new File(dirName);
31+
// get all the files from a directory
32+
File[] fList = directory.listFiles();
33+
for (File file : fList) {
34+
if (file.isFile()) {
35+
String path = file.getPath();
36+
String packName = path.substring(path.indexOf("org"), path.lastIndexOf(File.separatorChar));
37+
set.add(packName.replace(File.separatorChar, '.'));
38+
}
39+
else if (file.isDirectory()) {
40+
findPackageNames(set, file.getAbsolutePath());
41+
}
42+
}
43+
}
44+
45+
private Set<String> getPackagesExported(String path) {
46+
try {
47+
Stream<String> stream = Files.lines(Paths.get(path));
48+
// remove outside whitespace
49+
Set<String> exportedPackages = stream.map(str -> str.trim())
50+
// consider only opens
51+
.filter(str -> str.startsWith("opens"))
52+
// consider only opens to therapi
53+
.filter(str -> str.contains("therapi.runtime.javadoc"))
54+
// get the package from the opens
55+
.map(str -> str.split(" ")[1]).collect(Collectors.toSet());
56+
return exportedPackages;
57+
}
58+
catch (IOException e) {
59+
throw new RuntimeException();
60+
}
61+
}
62+
63+
@Test
64+
public void testTherapiExports() {
65+
Set<String> packages = new HashSet<>();
66+
findPackageNames(packages, moduleBaseDirectory);
67+
68+
Set<String> exportedPackages = getPackagesExported(
69+
"src/main/java/module-info.java");
70+
71+
assertTrue(
72+
"module-info.java does not export all packages to therapi.runtime.javadoc," +
73+
" use bin/generate-groovy.sh to update the list!", packages.equals(
74+
exportedPackages));
75+
}
76+
77+
}

scijava/scijava-ops/src/test/java/org/scijava/ops/OpMethodTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.scijava.ops.core.OpCollection;
4646
import org.scijava.param.Parameter;
4747
import org.scijava.plugin.Plugin;
48+
import org.scijava.struct.ItemIO;
4849
import org.scijava.types.Nil;
4950

5051
/**

scijava/scijava-ops/src/test/java/org/scijava/ops/OpMethodTestOps.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.scijava.ops.core.OpCollection;
4141
import org.scijava.param.Parameter;
4242
import org.scijava.plugin.Plugin;
43+
import org.scijava.struct.ItemIO;
4344

4445
@Plugin(type = OpCollection.class)
4546
public class OpMethodTestOps {
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
[module-info.java]
2+
findPackageNames = ```
3+
import java.io.File;
4+
import java.util.Set;
5+
{ set, dirName ->
6+
7+
File directory = new File(dirName);
8+
// get all the files from a directory
9+
File[] fList = directory.listFiles();
10+
for (File file : fList) {
11+
if (file.isFile()) {
12+
String path = file.getPath();
13+
int begin = path.indexOf("org");
14+
int end = path.lastIndexOf('/');
15+
String packName = path.substring(begin, end);
16+
set.add(packName.replace('/', '.'));
17+
}
18+
else if (file.isDirectory()) {
19+
findPackageNames(set, file.getAbsolutePath());
20+
}
21+
}
22+
}
23+
```
24+
25+
modulePackages = ```
26+
import java.util.HashSet;
27+
{ path ->
28+
set = new HashSet<>();
29+
findPackageNames(set, path);
30+
return set;
31+
}
32+
```
33+
34+
opensToString = ```
35+
import java.util.HashSet;
36+
{ p, scijavaPackages, therapiPackages ->
37+
set = new HashSet<>();
38+
if (scijavaPackages.contains(p))
39+
set.add("org.scijava");
40+
if (therapiPackages.contains(p))
41+
set.add("therapi.runtime.javadoc");
42+
String packageString = set.toArray().toString();
43+
return packageString.substring(1, packageString.length() - 1);
44+
}
45+
```
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
module org.scijava.ops {
2+
3+
/*
4+
* This is autogenerated source code -- DO NOT EDIT. Instead, edit the
5+
* corresponding template in templates/ and rerun bin/generate.groovy.
6+
*/
7+
8+
## Determines all packages in the module
9+
#set($packages = $modulePackages.call("src/main/java/org/scijava"))
10+
## Defines the packages that should be exported to org.scijava
11+
#set($scijavaPackages = ["org.scijava.ops", "org.scijava.ops.impl", "org.scijava.ops.provenance.impl"])
12+
## Defines the packages that should be exported to therapi.runtime.javadoc
13+
#set($therapiPackages = $modulePackages.call("src/main/java/org/scijava"))
14+
//TODO: rearrange packages to export only needed classes
15+
exports org.scijava.ops; //contains OpDependency interface
16+
exports org.scijava.ops.core; // contains OpCollection, Op interfaces
17+
exports org.scijava.ops.core.builder; // contains OpBuilder classes
18+
exports org.scijava.ops.matcher;
19+
exports org.scijava.ops.math;
20+
exports org.scijava.ops.simplify;
21+
exports org.scijava.ops.conversionLoss;
22+
exports org.scijava.ops.provenance;
23+
// TODO: move OpWrapper to its own package (org.scijava.ops.wrap??)
24+
exports org.scijava.ops.util; // contains OpWrapper interface
25+
exports org.scijava.struct;
26+
exports org.scijava.param;
27+
28+
#foreach($package in $packages)
29+
opens $package to $opensToString.call($package, $scijavaPackages, $therapiPackages);
30+
#end
31+
32+
// FIXME: This is a file name and is thus unstable
33+
requires geantyref;
34+
35+
requires java.desktop;
36+
37+
requires org.scijava;
38+
requires org.scijava.function;
39+
requires org.scijava.types;
40+
requires javassist;
41+
requires java.compiler;
42+
requires therapi.runtime.javadoc;
43+
44+
uses javax.annotation.processing.Processor;
45+
}

0 commit comments

Comments
 (0)