Skip to content

Commit ff6b0d9

Browse files
committed
added way to find PreprocessorExtension and SpecialVariableProcessor among Java services
1 parent cfec0c2 commit ff6b0d9

File tree

6 files changed

+54
-55
lines changed

6 files changed

+54
-55
lines changed

changelog.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
__7.3.0 (SNAPSHOT)__
22

3+
- added way to find `PreprocessorExtension` and `SpecialVariableProcessor` among Java services
34
- refactoring of API for `SpecialVariableProcessor` and `CommentTextProcessor`
45
- replaced single string property `actionPreprocessorExtension` by string list `actionPreprocessorExtensions` to provide way for many preprocessor extensions.
56
- internal refactoring

jcp/src/main/java/com/igormaznitsa/jcp/JcpPreprocessor.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
package com.igormaznitsa.jcp;
2323

2424
import static com.igormaznitsa.jcp.InfoHelper.makeTextForHelpInfo;
25-
import static com.igormaznitsa.jcp.utils.PreprocessorUtils.findAndInstantiateAllServices;
25+
import static com.igormaznitsa.jcp.utils.PreprocessorUtils.fillContextByFoundServices;
2626
import static com.igormaznitsa.jcp.utils.PreprocessorUtils.readWholeTextFileIntoArray;
2727
import static com.igormaznitsa.jcp.utils.PreprocessorUtils.throwPreprocessorException;
2828

@@ -51,7 +51,6 @@
5151
import com.igormaznitsa.jcp.cmdline.UnknownAsFalseHandler;
5252
import com.igormaznitsa.jcp.cmdline.VerboseHandler;
5353
import com.igormaznitsa.jcp.containers.FileInfoContainer;
54-
import com.igormaznitsa.jcp.context.CommentTextProcessor;
5554
import com.igormaznitsa.jcp.context.PreprocessingState;
5655
import com.igormaznitsa.jcp.context.PreprocessorContext;
5756
import com.igormaznitsa.jcp.directives.ExcludeIfDirectiveHandler;
@@ -73,7 +72,6 @@
7372
import java.util.Locale;
7473
import java.util.Objects;
7574
import java.util.Set;
76-
import java.util.stream.Collectors;
7775
import lombok.Data;
7876
import org.apache.commons.io.FileUtils;
7977
import org.apache.commons.io.FilenameUtils;
@@ -192,14 +190,7 @@ private static PreprocessorContext processCommandLine(final File baseDir,
192190
}
193191
}
194192

195-
final List<CommentTextProcessor> commentTextProcessors = findAndInstantiateAllServices(
196-
CommentTextProcessor.class);
197-
if (!commentTextProcessors.isEmpty()) {
198-
System.out.printf("Detected comment text processors: %s%n",
199-
commentTextProcessors.stream().map(x -> x.getClass().getCanonicalName())
200-
.collect(Collectors.joining(",")));
201-
commentTextProcessors.forEach(result::addCommentTextProcessor);
202-
}
193+
fillContextByFoundServices(result);
203194

204195
return result;
205196
}

jcp/src/main/java/com/igormaznitsa/jcp/ant/PreprocessTask.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,10 @@
2121

2222
package com.igormaznitsa.jcp.ant;
2323

24-
import static com.igormaznitsa.jcp.utils.PreprocessorUtils.findAndInstantiateAllServices;
24+
import static com.igormaznitsa.jcp.utils.PreprocessorUtils.fillContextByFoundServices;
2525

2626
import com.igormaznitsa.jcp.JcpPreprocessor;
2727
import com.igormaznitsa.jcp.context.CommentRemoverType;
28-
import com.igormaznitsa.jcp.context.CommentTextProcessor;
2928
import com.igormaznitsa.jcp.context.PreprocessorContext;
3029
import com.igormaznitsa.jcp.context.SpecialVariableProcessor;
3130
import com.igormaznitsa.jcp.exceptions.PreprocessorException;
@@ -188,20 +187,11 @@ PreprocessorContext makePreprocessorContext() {
188187
x.trim())));
189188
}
190189

191-
final List<CommentTextProcessor> commentTextProcessors = findAndInstantiateAllServices(
192-
CommentTextProcessor.class);
193-
if (!commentTextProcessors.isEmpty()) {
194-
info(String.format("Detected %d external comment text processing services",
195-
commentTextProcessors.size()));
196-
info(String.format("Detected comment text processors: %s",
197-
commentTextProcessors.stream().map(x -> x.getClass().getCanonicalName())
198-
.collect(Collectors.joining(","))));
199-
commentTextProcessors.forEach(context::addCommentTextProcessor);
200-
}
201-
202190
this.registerConfigFiles(context);
203191
this.fillGlobalVars(context);
204192

193+
fillContextByFoundServices(context);
194+
205195
return context;
206196
}
207197

jcp/src/main/java/com/igormaznitsa/jcp/gradle/JcpTask.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
package com.igormaznitsa.jcp.gradle;
22

3-
import static com.igormaznitsa.jcp.utils.PreprocessorUtils.findAndInstantiateAllServices;
3+
import static com.igormaznitsa.jcp.utils.PreprocessorUtils.fillContextByFoundServices;
44
import static com.igormaznitsa.jcp.utils.PreprocessorUtils.findAndInstantiatePreprocessorExtensionForClassName;
55
import static com.igormaznitsa.jcp.utils.PreprocessorUtils.findCommentRemoverForId;
66
import static java.util.Collections.emptyMap;
77

88
import com.igormaznitsa.jcp.JcpPreprocessor;
9-
import com.igormaznitsa.jcp.context.CommentTextProcessor;
109
import com.igormaznitsa.jcp.context.PreprocessorContext;
1110
import com.igormaznitsa.jcp.expression.Value;
1211
import com.igormaznitsa.jcp.logger.PreprocessorLogger;
@@ -456,6 +455,8 @@ public void warning(final String message) {
456455
preprocessorContext.setUnknownVariableAsFalse(this.unknownVarAsFalse.get());
457456
preprocessorContext.setVerbose(this.verbose.get());
458457

458+
fillContextByFoundServices(preprocessorContext);
459+
459460
if (!this.actionPreprocessorExtensions.get().isEmpty()) {
460461
this.actionPreprocessorExtensions.get()
461462
.forEach(x -> {
@@ -467,17 +468,6 @@ public void warning(final String message) {
467468
});
468469
}
469470

470-
final List<CommentTextProcessor> commentTextProcessors = findAndInstantiateAllServices(
471-
CommentTextProcessor.class);
472-
if (!commentTextProcessors.isEmpty()) {
473-
logger.info("Detected {} external comment text processing services",
474-
commentTextProcessors.size());
475-
logger.info("Detected comment text processors: {}",
476-
commentTextProcessors.stream().map(x -> x.getClass().getCanonicalName())
477-
.collect(Collectors.joining(",")));
478-
commentTextProcessors.forEach(preprocessorContext::addCommentTextProcessor);
479-
}
480-
481471
this.vars.getOrElse(emptyMap()).entrySet().stream()
482472
.filter(e -> {
483473
if (e.getValue() == null) {

jcp/src/main/java/com/igormaznitsa/jcp/maven/PreprocessMojo.java

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,10 @@
2222
package com.igormaznitsa.jcp.maven;
2323

2424
import static com.igormaznitsa.jcp.utils.GetUtils.ensureNonNull;
25-
import static com.igormaznitsa.jcp.utils.PreprocessorUtils.findAndInstantiateAllServices;
25+
import static com.igormaznitsa.jcp.utils.PreprocessorUtils.fillContextByFoundServices;
2626

2727
import com.igormaznitsa.jcp.JcpPreprocessor;
2828
import com.igormaznitsa.jcp.context.CommentRemoverType;
29-
import com.igormaznitsa.jcp.context.CommentTextProcessor;
3029
import com.igormaznitsa.jcp.context.PreprocessorContext;
3130
import com.igormaznitsa.jcp.exceptions.PreprocessorException;
3231
import com.igormaznitsa.jcp.expression.Value;
@@ -480,22 +479,7 @@ public void execute() throws MojoExecutionException, MojoFailureException {
480479
final PreprocessorContext context;
481480
try {
482481
context = makePreprocessorContext();
483-
final List<CommentTextProcessor> commentTextProcessors = findAndInstantiateAllServices(
484-
CommentTextProcessor.class);
485-
if (!commentTextProcessors.isEmpty()) {
486-
getLog().info("Detected " + commentTextProcessors.size() +
487-
" external comment text processing services");
488-
if (this.isVerbose()) {
489-
getLog().info("Detected comment text processors: " +
490-
commentTextProcessors.stream().map(x -> x.getClass().getCanonicalName())
491-
.collect(Collectors.joining(",")));
492-
} else {
493-
getLog().debug("Detected comment text processors: " +
494-
commentTextProcessors.stream().map(x -> x.getClass().getCanonicalName())
495-
.collect(Collectors.joining(",")));
496-
}
497-
commentTextProcessors.forEach(context::addCommentTextProcessor);
498-
}
482+
fillContextByFoundServices(context);
499483
} catch (Exception ex) {
500484
final PreprocessorException newException =
501485
PreprocessorException.extractPreprocessorException(ex);

jcp/src/main/java/com/igormaznitsa/jcp/utils/PreprocessorUtils.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@
2828
import com.igormaznitsa.jcp.containers.FileInfoContainer;
2929
import com.igormaznitsa.jcp.containers.TextFileDataContainer;
3030
import com.igormaznitsa.jcp.context.CommentRemoverType;
31+
import com.igormaznitsa.jcp.context.CommentTextProcessor;
3132
import com.igormaznitsa.jcp.context.PreprocessorContext;
33+
import com.igormaznitsa.jcp.context.SpecialVariableProcessor;
3234
import com.igormaznitsa.jcp.exceptions.FilePositionInfo;
3335
import com.igormaznitsa.jcp.exceptions.PreprocessorException;
3436
import com.igormaznitsa.jcp.expression.Expression;
@@ -113,6 +115,47 @@ public static Optional<FileInfoContainer> findLastActiveFileContainer(
113115
.flatMap(context::findFileInfoContainer);
114116
}
115117

118+
/**
119+
* Find all services in class path and register them in provided context.
120+
*
121+
* @param context target context must not be null
122+
* @since 7.3.0
123+
*/
124+
public static void fillContextByFoundServices(final PreprocessorContext context) {
125+
final List<CommentTextProcessor> commentTextProcessors = findAndInstantiateAllServices(
126+
CommentTextProcessor.class);
127+
if (!commentTextProcessors.isEmpty()) {
128+
context.getPreprocessorLogger()
129+
.info(String.format("Detected %d comment text processing service(s): %s",
130+
commentTextProcessors.size(),
131+
commentTextProcessors.stream().map(x -> x.getClass().getCanonicalName())
132+
.collect(Collectors.joining(","))));
133+
commentTextProcessors.forEach(context::addCommentTextProcessor);
134+
}
135+
136+
final List<SpecialVariableProcessor> specialVariableProcessors = findAndInstantiateAllServices(
137+
SpecialVariableProcessor.class);
138+
if (!specialVariableProcessors.isEmpty()) {
139+
context.getPreprocessorLogger()
140+
.info(String.format("Detected %d special variable service(s): %s",
141+
specialVariableProcessors.size(),
142+
specialVariableProcessors.stream().map(x -> x.getClass().getCanonicalName())
143+
.collect(Collectors.joining(","))));
144+
specialVariableProcessors.forEach(context::registerSpecialVariableProcessor);
145+
}
146+
147+
final List<PreprocessorExtension> preprocessorExtensions = findAndInstantiateAllServices(
148+
PreprocessorExtension.class);
149+
if (!preprocessorExtensions.isEmpty()) {
150+
context.getPreprocessorLogger()
151+
.info(String.format("Detected %d preprocessor extension service(s): %s",
152+
preprocessorExtensions.size(),
153+
preprocessorExtensions.stream().map(x -> x.getClass().getCanonicalName())
154+
.collect(Collectors.joining(","))));
155+
preprocessorExtensions.forEach(context::addPreprocessorExtension);
156+
}
157+
}
158+
116159
/**
117160
* Find and instantiate a preprocessor extension for its class name. <b>Class must have default constructor.</b>
118161
* The preprocessor extension will be called for action directives.

0 commit comments

Comments
 (0)