[apex] CPD: Prepared option to switch on case sensitive check
This commit is contained in:
@@ -4,8 +4,21 @@
|
||||
|
||||
package net.sourceforge.pmd.cpd;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
public class ApexLanguage extends AbstractLanguage {
|
||||
|
||||
public ApexLanguage() {
|
||||
this(new Properties());
|
||||
}
|
||||
|
||||
public ApexLanguage(Properties properties) {
|
||||
super("Apex", "apex", new ApexTokenizer(), ".cls");
|
||||
setProperties(properties);
|
||||
}
|
||||
|
||||
public final void setProperties(Properties properties) {
|
||||
ApexTokenizer tokenizer = (ApexTokenizer) getTokenizer();
|
||||
tokenizer.setProperties(properties);
|
||||
}
|
||||
}
|
||||
|
@@ -5,6 +5,7 @@
|
||||
package net.sourceforge.pmd.cpd;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.antlr.runtime.ANTLRStringStream;
|
||||
import org.antlr.runtime.Lexer;
|
||||
@@ -16,6 +17,18 @@ import apex.jorje.parser.impl.ApexLexer;
|
||||
|
||||
public class ApexTokenizer implements Tokenizer {
|
||||
|
||||
/**
|
||||
* If the properties is <code>false</code> (default), then the case of any token
|
||||
* is ignored.
|
||||
*/
|
||||
public static final String CASE_SENSITIVE = "net.sourceforge.pmd.cpd.ApexTokenizer.caseSensitive";
|
||||
|
||||
private boolean caseSensitive;
|
||||
|
||||
public void setProperties(Properties properties) {
|
||||
caseSensitive = Boolean.parseBoolean(properties.getProperty(CASE_SENSITIVE, "false"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tokenize(SourceCode sourceCode, Tokens tokenEntries) {
|
||||
StringBuilder code = sourceCode.getCodeBuffer();
|
||||
@@ -33,8 +46,9 @@ public class ApexTokenizer implements Tokenizer {
|
||||
while (token.getType() != Token.EOF) {
|
||||
if (token.getChannel() != Lexer.HIDDEN) {
|
||||
String tokenText = token.getText();
|
||||
// note: old behavior of AbstractTokenizer was, to consider only lowercase
|
||||
tokenText = tokenText.toLowerCase(Locale.ROOT);
|
||||
if (!caseSensitive) {
|
||||
tokenText = tokenText.toLowerCase(Locale.ROOT);
|
||||
}
|
||||
TokenEntry tokenEntry = new TokenEntry(tokenText, sourceCode.getFileName(), token.getLine());
|
||||
tokenEntries.add(tokenEntry);
|
||||
}
|
||||
|
@@ -11,6 +11,7 @@ import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.junit.Test;
|
||||
@@ -30,6 +31,16 @@ public class ApexTokenizerTest {
|
||||
assertEquals("someparam", findTokensByLine(8, tokens).get(0).toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTokenizeCaseSensitive() throws IOException {
|
||||
Tokens tokens = tokenize(load("Simple.cls"), true);
|
||||
if (tokens.size() != 28) {
|
||||
printTokens(tokens);
|
||||
}
|
||||
assertEquals(28, tokens.size());
|
||||
assertEquals("someParam", findTokensByLine(8, tokens).get(0).toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Comments are ignored since using ApexLexer.
|
||||
*/
|
||||
@@ -56,7 +67,14 @@ public class ApexTokenizerTest {
|
||||
}
|
||||
|
||||
private Tokens tokenize(String code) {
|
||||
return tokenize(code, false);
|
||||
}
|
||||
|
||||
private Tokens tokenize(String code, boolean caseSensitive) {
|
||||
ApexTokenizer tokenizer = new ApexTokenizer();
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(ApexTokenizer.CASE_SENSITIVE, Boolean.toString(caseSensitive));
|
||||
tokenizer.setProperties(properties);
|
||||
Tokens tokens = new Tokens();
|
||||
tokenizer.tokenize(new SourceCode(new StringCodeLoader(code)), tokens);
|
||||
return tokens;
|
||||
|
Reference in New Issue
Block a user