Skip to content

Commit 16c6586

Browse files
refactor: let Marlin.java use a custom constructor method of PreprocessorAnnotationParser
1 parent 50c1d8a commit 16c6586

2 files changed

Lines changed: 23 additions & 4 deletions

File tree

src/main/java/org/variantsync/diffdetective/datasets/predefined/Marlin.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
*/
1515
public class Marlin {
1616
public static final PreprocessorAnnotationParser ANNOTATION_PARSER =
17-
new PreprocessorAnnotationParser(
18-
PreprocessorAnnotationParser.CPP_PATTERN,
17+
PreprocessorAnnotationParser.CreateCppAnnotationParser(
1918
PropositionalFormulaParser.Default,
2019
new MarlinCPPDiffLineFormulaExtractor()
2120
);

src/main/java/org/variantsync/diffdetective/feature/PreprocessorAnnotationParser.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class PreprocessorAnnotationParser implements AnnotationParser {
2020
* <p>
2121
* Note that this pattern doesn't handle comments between {@code #} and the macro name.
2222
*/
23-
public final static Pattern CPP_PATTERN =
23+
protected final static Pattern CPP_PATTERN =
2424
Pattern.compile("^[+-]?\\s*#\\s*(if|elif|else|endif)");
2525

2626
/**
@@ -29,7 +29,7 @@ public class PreprocessorAnnotationParser implements AnnotationParser {
2929
* matched and only {@code "if"} is captured.
3030
* <p>
3131
*/
32-
public final static Pattern JPP_PATTERN =
32+
protected final static Pattern JPP_PATTERN =
3333
Pattern.compile("^[+-]?\\s*//\\s*#\\s*(if|elif|else|endif)");
3434

3535
/**
@@ -74,6 +74,26 @@ public PreprocessorAnnotationParser(final Pattern annotationPattern, final Propo
7474
this.extractor = formulaExtractor;
7575
}
7676

77+
/**
78+
* Creates a new preprocessor annotation parser for C preprocessor annotations.
79+
*
80+
* @param formulaParser Parser that is used to parse propositional formulas in conditional annotations (e.g., the formula <code>f</code> in <code>#if f</code>).
81+
* @param formulaExtractor An extractor that extracts the formula part of a preprocessor annotation that is then given to the formulaParser.
82+
*/
83+
public static PreprocessorAnnotationParser CreateCppAnnotationParser(final PropositionalFormulaParser formulaParser, DiffLineFormulaExtractor formulaExtractor) {
84+
return new PreprocessorAnnotationParser(CPP_PATTERN, formulaParser, formulaExtractor);
85+
}
86+
87+
/**
88+
* Creates a new preprocessor annotation parser for <a href="https://www.slashdev.ca/javapp/">JavaPP (Java PreProcessor)</a> annotations.
89+
*
90+
* @param formulaParser Parser that is used to parse propositional formulas in conditional annotations (e.g., the formula <code>f</code> in <code>#if f</code>).
91+
* @param formulaExtractor An extractor that extracts the formula part of a preprocessor annotation that is then given to the formulaParser.
92+
*/
93+
public static PreprocessorAnnotationParser CreateJppAnnotationParser(final PropositionalFormulaParser formulaParser, DiffLineFormulaExtractor formulaExtractor) {
94+
return new PreprocessorAnnotationParser(JPP_PATTERN, formulaParser, formulaExtractor);
95+
}
96+
7797
/**
7898
* Parses the condition of the given line of source code that contains a preprocessor macro (i.e., IF, IFDEF, ELIF).
7999
*

0 commit comments

Comments
 (0)