diff --git a/dumpAst/src/main/jastadd/GenerationCommon.jrag b/dumpAst/src/main/jastadd/GenerationCommon.jrag new file mode 100644 index 0000000000000000000000000000000000000000..a05412d3eba8dbf7732e1f364c3664304db7d23a --- /dev/null +++ b/dumpAst/src/main/jastadd/GenerationCommon.jrag @@ -0,0 +1,19 @@ +aspect GenerationCommon { + // --- find{In,Ex}cludePatternCollection --- + syn PatternCollection BuildConfig.findIncludePatternCollection(String typeRegex) { + for (TypePatternCollectionMapping mapping : getIncludeTypePatternList()) { + if (mapping.getTypeRegex().equals(typeRegex)) { + return mapping.getPatternCollection(); + } + } + return null; + } + syn PatternCollection BuildConfig.findExcludePatternCollection(String typeRegex) { + for (TypePatternCollectionMapping mapping : getExcludeTypePatternList()) { + if (mapping.getTypeRegex().equals(typeRegex)) { + return mapping.getPatternCollection(); + } + } + return null; + } +} diff --git a/dumpAst/src/main/jastadd/GenerationFrontend.jadd b/dumpAst/src/main/jastadd/GenerationFrontend.jadd index b6815cef840deb549085fdb2ce28f94f5f2758f6..26466b1cd9ae3b1aa6cb9dec45acccd8437a2dfc 100644 --- a/dumpAst/src/main/jastadd/GenerationFrontend.jadd +++ b/dumpAst/src/main/jastadd/GenerationFrontend.jadd @@ -94,10 +94,10 @@ public class DumpBuilder { * @return this * @see java.util.regex.Pattern#compile(java.lang.String) */ - public DumpBuilder disableTypes(String... regexes) { + public DumpBuilder disableTypes(String regex, String... moreRegexes) { updateRegexes(() -> buildConfig.getTypeIgnorePattern(), s -> buildConfig.setTypeIgnorePattern(s), - regexes); + regex, moreRegexes); return this; } @@ -109,60 +109,100 @@ public class DumpBuilder { * @return this * @see java.util.regex.Pattern#compile(java.lang.String) */ - public DumpBuilder excludeTokens(String... regexes) { + public DumpBuilder excludeTokens(String regex, String... moreRegexes) { updateRegexes(() -> buildConfig.getGlobalPatternCollection().getTokenPattern(), s -> buildConfig.getGlobalPatternCollection().setTokenPattern(s), - regexes); + regex, moreRegexes); return this; } /** TODO: document, implement, sort */ - public DumpBuilder excludeTokensFor(String typeRegex, String... regexes) { + public DumpBuilder excludeTokensFor(String typeRegex, String regex, String... moreRegexes) { + PatternCollection collection = findOrCreateExcludePatternCollection(typeRegex); + updateRegexes(() -> collection.getTokenPattern(), + s -> collection.setTokenPattern(s), + regex, moreRegexes); return this; } /** TODO: document, implement, sort */ - public DumpBuilder excludeChildrenFor(String typeRegex, String... regexes) { + public DumpBuilder excludeChildrenFor(String typeRegex, String regex, String... moreRegexes) { + PatternCollection collection = findOrCreateExcludePatternCollection(typeRegex); + updateRegexes(() -> collection.getChildPattern(), + s -> collection.setChildPattern(s), + regex, moreRegexes); return this; } /** TODO: document, implement, sort */ - public DumpBuilder excludeRelationsFor(String typeRegex, String... regexes) { + public DumpBuilder excludeRelationsFor(String typeRegex, String regex, String... moreRegexes) { + PatternCollection collection = findOrCreateExcludePatternCollection(typeRegex); + updateRegexes(() -> collection.getRelationPattern(), + s -> collection.setRelationPattern(s), + regex, moreRegexes); return this; } /** TODO: document, implement, sort */ - public DumpBuilder excludeAttributesFor(String typeRegex, String... regexes) { + public DumpBuilder excludeAttributesFor(String typeRegex, String regex, String... moreRegexes) { + PatternCollection collection = findOrCreateExcludePatternCollection(typeRegex); + updateRegexes(() -> collection.getAttributePattern(), + s -> collection.setAttributePattern(s), + regex, moreRegexes); return this; } /** TODO: document, implement, sort */ - public DumpBuilder excludeNonterminalAttributesFor(String typeRegex, String... regexes) { + public DumpBuilder excludeNonterminalAttributesFor(String typeRegex, String regex, String... moreRegexes) { + PatternCollection collection = findOrCreateExcludePatternCollection(typeRegex); + updateRegexes(() -> collection.getNonterminalAttributePattern(), + s -> collection.setNonterminalAttributePattern(s), + regex, moreRegexes); return this; } /** TODO: document, implement, sort */ - public DumpBuilder includeTokensFor(String typeRegex, String... regexes) { + public DumpBuilder includeTokensFor(String typeRegex, String regex, String... moreRegexes) { + PatternCollection collection = findOrCreateIncludePatternCollection(typeRegex); + updateRegexes(() -> collection.getTokenPattern(), + s -> collection.setTokenPattern(s), + regex, moreRegexes); return this; } /** TODO: document, implement, sort */ - public DumpBuilder includeChildrenFor(String typeRegex, String... regexes) { + public DumpBuilder includeChildrenFor(String typeRegex, String regex, String... moreRegexes) { + PatternCollection collection = findOrCreateIncludePatternCollection(typeRegex); + updateRegexes(() -> collection.getChildPattern(), + s -> collection.setChildPattern(s), + regex, moreRegexes); return this; } /** TODO: document, implement, sort */ - public DumpBuilder includeRelationsFor(String typeRegex, String... regexes) { + public DumpBuilder includeRelationsFor(String typeRegex, String regex, String... moreRegexes) { + PatternCollection collection = findOrCreateIncludePatternCollection(typeRegex); + updateRegexes(() -> collection.getRelationPattern(), + s -> collection.setRelationPattern(s), + regex, moreRegexes); return this; } /** TODO: document, implement, sort */ - public DumpBuilder includeAttributesFor(String typeRegex, String... regexes) { + public DumpBuilder includeAttributesFor(String typeRegex, String regex, String... moreRegexes) { + PatternCollection collection = findOrCreateIncludePatternCollection(typeRegex); + updateRegexes(() -> collection.getAttributePattern(), + s -> collection.setAttributePattern(s), + regex, moreRegexes); return this; } /** TODO: document, implement, sort */ - public DumpBuilder includeNonterminalAttributesFor(String typeRegex, String... regexes) { + public DumpBuilder includeNonterminalAttributesFor(String typeRegex, String regex, String... moreRegexes) { + PatternCollection collection = findOrCreateIncludePatternCollection(typeRegex); + updateRegexes(() -> collection.getNonterminalAttributePattern(), + s -> collection.setNonterminalAttributePattern(s), + regex, moreRegexes); return this; } @@ -174,10 +214,10 @@ public class DumpBuilder { * @return this * @see java.util.regex.Pattern#compile(java.lang.String) */ - public DumpBuilder includeAttributes(String... regexes) { + public DumpBuilder includeAttributes(String regex, String... moreRegexes) { updateRegexes(() -> buildConfig.getGlobalPatternCollection().getAttributePattern(), s -> buildConfig.getGlobalPatternCollection().setAttributePattern(s), - regexes); + regex, moreRegexes); return this; } @@ -193,10 +233,10 @@ public class DumpBuilder { * @return this * @see java.util.regex.Pattern#compile(java.lang.String) */ - public DumpBuilder includeNonterminalAttributes(String... regexes) { + public DumpBuilder includeNonterminalAttributes(String regex, String... moreRegexes) { updateRegexes(() -> buildConfig.getGlobalPatternCollection().getNonterminalAttributePattern(), s -> buildConfig.getGlobalPatternCollection().setNonterminalAttributePattern(s), - regexes); + regex, moreRegexes); return this; } @@ -209,10 +249,10 @@ public class DumpBuilder { * @return this * @see java.util.regex.Pattern#compile(java.lang.String) */ - public DumpBuilder excludeChildren(String... regexes) { + public DumpBuilder excludeChildren(String regex, String... moreRegexes) { updateRegexes(() -> buildConfig.getGlobalPatternCollection().getChildPattern(), s -> buildConfig.getGlobalPatternCollection().setChildPattern(s), - regexes); + regex, moreRegexes); return this; } /** @@ -225,20 +265,45 @@ public class DumpBuilder { * @return this * @see java.util.regex.Pattern#compile(java.lang.String) */ - public DumpBuilder excludeRelations(String... regexes) { + public DumpBuilder excludeRelations(String regex, String... moreRegexes) { updateRegexes(() -> buildConfig.getGlobalPatternCollection().getRelationPattern(), s -> buildConfig.getGlobalPatternCollection().setRelationPattern(s), - regexes); + regex, moreRegexes); return this; } - private void updateRegexes(java.util.function.Supplier<String> getter, java.util.function.Consumer<String> setter, String... values) { - for (String value : values) { - if (getter.get().isEmpty()) { - setter.accept(value); - } else { - setter.accept(getter.get() + "|" + value); - } + private PatternCollection findOrCreateIncludePatternCollection(String typeRegex) { + PatternCollection result = buildConfig.findIncludePatternCollection(typeRegex); + if (result == null) { + TypePatternCollectionMapping mapping = new TypePatternCollectionMapping(); + mapping.setTypeRegex(typeRegex); + result = new PatternCollection(); + mapping.setPatternCollection(result); + buildConfig.addIncludeTypePattern(mapping); + } + return result; + } + + private PatternCollection findOrCreateExcludePatternCollection(String typeRegex) { + PatternCollection result = buildConfig.findExcludePatternCollection(typeRegex); + if (result == null) { + TypePatternCollectionMapping mapping = new TypePatternCollectionMapping(); + mapping.setTypeRegex(typeRegex); + result = new PatternCollection(); + mapping.setPatternCollection(result); + buildConfig.addExcludeTypePattern(mapping); + } + return result; + } + + private void updateRegexes(java.util.function.Supplier<String> getter, java.util.function.Consumer<String> setter, String regex, String... moreRegexes) { + if (getter.get().isEmpty()) { + setter.accept(regex); + } else { + setter.accept(getter.get() + "|" + regex); + } + for (String value : moreRegexes) { + setter.accept(getter.get() + "|" + value); } }