Skip to content

Commit

Permalink
simplify ValidatorFactory using reflections lib.
Browse files Browse the repository at this point in the history
  • Loading branch information
yusuke committed May 2, 2016
1 parent 3e1a53d commit 140ec84
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 54 deletions.
5 changes: 5 additions & 0 deletions redpen-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,11 @@
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.10</version>
</dependency>
</dependencies>

<profiles>
Expand Down
63 changes: 15 additions & 48 deletions redpen-core/src/main/java/cc/redpen/validator/ValidatorFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@
import cc.redpen.RedPenException;
import cc.redpen.config.Configuration;
import cc.redpen.config.ValidatorConfiguration;
import cc.redpen.validator.section.*;
import cc.redpen.validator.sentence.*;
import org.reflections.Reflections;

import java.lang.reflect.Modifier;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import static java.util.Arrays.asList;
import static java.util.stream.Collectors.*;
import static java.util.stream.Collectors.toList;
import static org.apache.commons.lang3.StringUtils.join;

/**
Expand All @@ -39,55 +39,22 @@ public class ValidatorFactory {
private static final List<String> VALIDATOR_PACKAGES = asList(validatorPackage, validatorPackage + ".sentence", validatorPackage + ".section");
static final Map<String, Validator> validators = new LinkedHashMap<>();

public static void registerValidator(Class<? extends Validator> clazz) {
static void registerValidator(Class<? extends Validator> clazz) {
validators.put(clazz.getSimpleName().replace("Validator", ""), createValidator(clazz));
}

static {
// section
registerValidator(DuplicatedSectionValidator.class);
registerValidator(FrequentSentenceStartValidator.class);
registerValidator(ParagraphNumberValidator.class);
registerValidator(ParagraphStartWithValidator.class);
registerValidator(SectionLengthValidator.class);
registerValidator(UnexpandedAcronymValidator.class);
registerValidator(WordFrequencyValidator.class);
registerValidator(SectionLevelValidator.class);

// sentence
registerValidator(CommaNumberValidator.class);
registerValidator(ContractionValidator.class);
registerValidator(DoubledJoshiValidator.class);
registerValidator(DoubledWordValidator.class);
registerValidator(DoubleNegativeValidator.class);
registerValidator(EndOfSentenceValidator.class);
registerValidator(HankakuKanaValidator.class);
registerValidator(HyphenationValidator.class);
registerValidator(InvalidExpressionValidator.class);
registerValidator(InvalidSymbolValidator.class);
registerValidator(InvalidWordValidator.class);
registerValidator(JapaneseStyleValidator.class);
registerValidator(KatakanaEndHyphenValidator.class);
registerValidator(KatakanaSpellCheckValidator.class);
registerValidator(NumberFormatValidator.class);
registerValidator(OkuriganaValidator.class);
registerValidator(ParenthesizedSentenceValidator.class);
registerValidator(QuotationValidator.class);
registerValidator(SentenceLengthValidator.class);
registerValidator(SpaceBeginningOfSentenceValidator.class);
registerValidator(SpaceBetweenAlphabeticalWordValidator.class);
registerValidator(SpellingValidator.class);
registerValidator(StartWithCapitalLetterValidator.class);
registerValidator(SuccessiveWordValidator.class);
registerValidator(SuggestExpressionValidator.class);
registerValidator(SymbolWithSpaceValidator.class);
registerValidator(WeakExpressionValidator.class);
registerValidator(WordNumberValidator.class);
registerValidator(LongKanjiChainValidator.class);
registerValidator(JapaneseAmbiguousNounConjunctionValidator.class);

// other
registerValidator(JavaScriptValidator.class);
Reflections reflections = new Reflections("cc.redpen.validator");
// register Validator implimentations under cc.redpen.validator package
reflections.getSubTypesOf(Validator.class).stream()
.filter(validator -> !Modifier.isAbstract(validator.getModifiers()))
.forEach(validator -> {
try {
registerValidator(validator);
} catch (RuntimeException ignored) {
// the validator doesn't implement default constructor
}
});
}

public static List<ValidatorConfiguration> getConfigurations(String lang) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package cc.redpen;

import cc.redpen.validator.Validator;

/**
* @author Yusuke Yamamoto
*/
public class NoDefaultConstructorValidator extends Validator {
@SuppressWarnings("UnusedParameters")
public NoDefaultConstructorValidator(String blah) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
*/
package cc.redpen.validator;

import cc.redpen.NoDefaultConstructorValidator;
import cc.redpen.RedPenException;
import cc.redpen.config.Configuration;
import cc.redpen.config.ValidatorConfiguration;
Expand All @@ -34,12 +35,6 @@
class CustomValidator extends Validator {
}

class NoDefaultConstructorValidator extends Validator {
@SuppressWarnings("UnusedParameters")
public NoDefaultConstructorValidator(String blah) {
}
}

public class ValidatorFactoryTest {
@Test
public void createValidator() throws RedPenException {
Expand Down

0 comments on commit 140ec84

Please sign in to comment.