Skip to content

Commit

Permalink
#3592: threaded
Browse files Browse the repository at this point in the history
  • Loading branch information
yegor256 committed Dec 3, 2024
1 parent acba6a7 commit 4cb1a5c
Show file tree
Hide file tree
Showing 10 changed files with 208 additions and 162 deletions.
17 changes: 5 additions & 12 deletions eo-maven-plugin/src/main/java/org/eolang/maven/LintMojo.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,17 +34,15 @@
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.cactoos.experimental.Threads;
import org.cactoos.iterable.Filtered;
import org.cactoos.iterable.Mapped;
import org.cactoos.list.ListOf;
import org.cactoos.number.SumOf;
import org.eolang.lints.Defect;
import org.eolang.lints.Program;
import org.eolang.lints.Severity;
import org.eolang.maven.footprint.FpDefault;
import org.eolang.maven.tojos.ForeignTojo;
import org.eolang.maven.tojos.TojoHash;
import org.eolang.maven.util.Threaded;
import org.w3c.dom.Node;
import org.xembly.Directives;
import org.xembly.Xembler;
Expand Down Expand Up @@ -97,15 +95,10 @@ void exec() {
tojos
)
);
final int passed = new SumOf(
new Threads<>(
Runtime.getRuntime().availableProcessors(),
new Mapped<>(
tojo -> () -> this.lintOne(tojo, counts),
must
)
)
).intValue();
final int passed = new Threaded<>(
must,
tojo -> this.lintOne(tojo, counts)
).total();
if (must.isEmpty()) {
Logger.info(this, "No XMIR programs out of %d linted", tojos.size());
} else if (tojos.isEmpty()) {
Expand Down
23 changes: 8 additions & 15 deletions eo-maven-plugin/src/main/java/org/eolang/maven/OptimizeMojo.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,14 @@
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.cactoos.experimental.Threads;
import org.cactoos.iterable.Filtered;
import org.cactoos.iterable.Mapped;
import org.cactoos.number.SumOf;
import org.eolang.maven.footprint.FpDefault;
import org.eolang.maven.optimization.OptSpy;
import org.eolang.maven.optimization.OptTrain;
import org.eolang.maven.optimization.Optimization;
import org.eolang.maven.tojos.ForeignTojo;
import org.eolang.maven.tojos.TojoHash;
import org.eolang.maven.util.Threaded;
import org.eolang.parser.TrParsing;

/**
Expand Down Expand Up @@ -91,18 +89,13 @@ public void exec() {
final long start = System.currentTimeMillis();
final Collection<ForeignTojo> tojos = this.scopedTojos().withXmir();
final Optimization optimization = this.optimization();
final int total = new SumOf(
new Threads<>(
Runtime.getRuntime().availableProcessors(),
new Mapped<>(
tojo -> () -> this.optimized(tojo, optimization),
new Filtered<>(
ForeignTojo::notOptimized,
tojos
)
)
)
).intValue();
final int total = new Threaded<>(
new Filtered<>(
ForeignTojo::notOptimized,
tojos
),
tojo -> this.optimized(tojo, optimization)
).total();
if (total > 0) {
Logger.info(
this,
Expand Down
23 changes: 8 additions & 15 deletions eo-maven-plugin/src/main/java/org/eolang/maven/ParseMojo.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,12 @@
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;
import org.cactoos.Func;
import org.cactoos.experimental.Threads;
import org.cactoos.io.InputOf;
import org.cactoos.iterable.Filtered;
import org.cactoos.iterable.Mapped;
import org.cactoos.number.SumOf;
import org.eolang.maven.footprint.FpDefault;
import org.eolang.maven.tojos.ForeignTojo;
import org.eolang.maven.tojos.TojoHash;
import org.eolang.maven.util.Threaded;
import org.eolang.parser.EoSyntax;
import org.xembly.Directives;
import org.xembly.Xembler;
Expand Down Expand Up @@ -89,18 +87,13 @@ public final class ParseMojo extends SafeMojo {
@Override
public void exec() {
final long start = System.currentTimeMillis();
final int total = new SumOf(
new Threads<>(
Runtime.getRuntime().availableProcessors(),
new Mapped<>(
tojo -> () -> this.parsed(tojo),
new Filtered<>(
ForeignTojo::notParsed,
this.scopedTojos().withSources()
)
)
)
).intValue();
final int total = new Threaded<>(
new Filtered<>(
ForeignTojo::notParsed,
this.scopedTojos().withSources()
),
this::parsed
).total();
if (0 == total) {
if (this.scopedTojos().withSources().isEmpty()) {
Logger.info(
Expand Down
23 changes: 8 additions & 15 deletions eo-maven-plugin/src/main/java/org/eolang/maven/PhiMojo.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,9 @@
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.cactoos.experimental.Threads;
import org.cactoos.iterable.Mapped;
import org.cactoos.number.SumOf;
import org.cactoos.text.TextOf;
import org.eolang.maven.footprint.Saved;
import org.eolang.maven.util.Threaded;
import org.eolang.maven.util.Walk;
import org.eolang.parser.StUnhex;
import org.eolang.parser.TrParsing;
Expand Down Expand Up @@ -111,18 +109,13 @@ public void exec() {
final Walk walk = new Walk(this.phiInputDir.toPath());
final int total = walk.size();
final Xsline xsline = new Xsline(this.train());
final int count = new SumOf(
new Threads<>(
Runtime.getRuntime().availableProcessors(),
new Mapped<>(
xmir -> () -> {
final int position = passed.addAndGet(1);
return this.translate(xmir, xsline, position, total);
},
walk
)
)
).intValue();
final int count = new Threaded<>(
walk,
xmir -> {
final int position = passed.addAndGet(1);
return this.translate(xmir, xsline, position, total);
}
).total();
if (count > 0) {
Logger.info(
this, "Translated %d XMIR file(s) from %[file]s to %[file]s",
Expand Down
61 changes: 27 additions & 34 deletions eo-maven-plugin/src/main/java/org/eolang/maven/PrintMojo.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,10 @@
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.cactoos.experimental.Threads;
import org.cactoos.iterable.Mapped;
import org.cactoos.number.SumOf;
import org.cactoos.text.TextOf;
import org.eolang.maven.util.HmBase;
import org.eolang.maven.util.Home;
import org.eolang.maven.util.Threaded;
import org.eolang.maven.util.Walk;
import org.eolang.parser.Xmir;

Expand Down Expand Up @@ -88,37 +86,32 @@ public final class PrintMojo extends SafeMojo {
@Override
void exec() throws IOException {
final Home home = new HmBase(this.printOutputDir);
final int total = new SumOf(
new Threads<>(
Runtime.getRuntime().availableProcessors(),
new Mapped<>(
source -> () -> {
final Path relative = Paths.get(
this.printSourcesDir.toPath().relativize(source).toString()
.replace(".xmir", ".eo")
);
final XML xml = new XMLDocument(new TextOf(source).asString());
final String program;
if (this.printReversed) {
program = new Xmir(xml).toReversed();
} else {
program = new Xmir(xml).toEO();
}
home.save(program, relative);
Logger.info(
this,
"Printed: %[file]s (%[size]s) => %[file]s (%[size]s)",
source,
source.toFile().length(),
this.printOutputDir.toPath().resolve(relative),
this.printOutputDir.toPath().resolve(relative).toFile().length()
);
return 1;
},
new Walk(this.printSourcesDir.toPath())
)
)
).intValue();
final int total = new Threaded<>(
new Walk(this.printSourcesDir.toPath()),
source -> {
final Path relative = Paths.get(
this.printSourcesDir.toPath().relativize(source).toString()
.replace(".xmir", ".eo")
);
final XML xml = new XMLDocument(new TextOf(source).asString());
final String program;
if (this.printReversed) {
program = new Xmir(xml).toReversed();
} else {
program = new Xmir(xml).toEO();
}
home.save(program, relative);
Logger.info(
this,
"Printed: %[file]s (%[size]s) => %[file]s (%[size]s)",
source,
source.toFile().length(),
this.printOutputDir.toPath().resolve(relative),
this.printOutputDir.toPath().resolve(relative).toFile().length()
);
return 1;
}
).total();
if (total == 0) {
Logger.info(this, "No XMIR sources found");
} else {
Expand Down
23 changes: 8 additions & 15 deletions eo-maven-plugin/src/main/java/org/eolang/maven/ShakeMojo.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,14 @@
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.cactoos.experimental.Threads;
import org.cactoos.iterable.Filtered;
import org.cactoos.iterable.Mapped;
import org.cactoos.number.SumOf;
import org.eolang.maven.footprint.FpDefault;
import org.eolang.maven.optimization.OptSpy;
import org.eolang.maven.optimization.OptTrain;
import org.eolang.maven.optimization.Optimization;
import org.eolang.maven.tojos.ForeignTojo;
import org.eolang.maven.tojos.TojoHash;
import org.eolang.maven.util.Threaded;

/**
* Shake (prepare) XML files after optimizations for translation to java.
Expand Down Expand Up @@ -83,18 +81,13 @@ void exec() {
final long start = System.currentTimeMillis();
final Collection<ForeignTojo> tojos = this.scopedTojos().withOptimized();
final Optimization optimization = this.optimization();
final int total = new SumOf(
new Threads<>(
Runtime.getRuntime().availableProcessors(),
new Mapped<>(
tojo -> () -> this.shaken(tojo, optimization),
new Filtered<>(
ForeignTojo::notShaken,
tojos
)
)
)
).intValue();
final int total = new Threaded<>(
new Filtered<>(
ForeignTojo::notShaken,
tojos
),
tojo -> this.shaken(tojo, optimization)
).total();
if (total > 0) {
Logger.info(
this,
Expand Down
22 changes: 9 additions & 13 deletions eo-maven-plugin/src/main/java/org/eolang/maven/TranspileMojo.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,12 @@
import java.nio.file.Paths;
import java.util.Collection;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Supplier;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;
import org.cactoos.experimental.Threads;
import org.cactoos.iterable.Mapped;
import org.cactoos.number.SumOf;
import org.cactoos.text.Joined;
import org.eolang.maven.footprint.CachePath;
import org.eolang.maven.footprint.Footprint;
Expand All @@ -63,6 +60,7 @@
import org.eolang.maven.tojos.AttributeNotFoundException;
import org.eolang.maven.tojos.ForeignTojo;
import org.eolang.maven.tojos.TojoHash;
import org.eolang.maven.util.Threaded;

/**
* Transpile.
Expand Down Expand Up @@ -164,12 +162,10 @@ public final class TranspileMojo extends SafeMojo {
public void exec() {
final Collection<ForeignTojo> sources = this.scopedTojos().withOptimized();
final Optimization optimization = this.transpilation();
final long saved = new SumOf(
new Threads<>(
Runtime.getRuntime().availableProcessors(),
new Mapped<>(tojo -> () -> this.transpiled(tojo, optimization), sources)
)
).longValue();
final int saved = new Threaded<>(
sources,
tojo -> this.transpiled(tojo, optimization)
).total();
Logger.info(
this, "Transpiled %d XMIRs, created %d Java files in %[file]s",
sources.size(), saved, this.generatedDir
Expand Down Expand Up @@ -197,7 +193,7 @@ public void exec() {
* @return Number of transpiled files.
* @throws java.io.IOException If any issues with I/O
*/
private long transpiled(final ForeignTojo tojo, final Optimization transpilation)
private int transpiled(final ForeignTojo tojo, final Optimization transpilation)
throws IOException {
final Path source;
try {
Expand Down Expand Up @@ -246,10 +242,10 @@ private Optimization transpilation() {
* @return Amount of generated .java files
* @throws IOException If fails to save files
*/
private long javaGenerated(final boolean rewrite, final Path target, final String hsh)
private int javaGenerated(final boolean rewrite, final Path target, final String hsh)
throws IOException {
final Collection<XML> nodes = new XMLDocument(target).nodes("//class[java and not(@atom)]");
final AtomicLong saved = new AtomicLong(0L);
final AtomicInteger saved = new AtomicInteger(0);
for (final XML java : nodes) {
final Path tgt = new Place(java.xpath("@java-name").get(0)).make(
this.generatedDir.toPath(), TranspileMojo.JAVA
Expand Down
Loading

0 comments on commit 4cb1a5c

Please sign in to comment.