forked from jasder/antlr
Merge pull request #1945 from dhalperi/all-imports-count
Many fixes to antlr4-maven-plugin dependency analysis
This commit is contained in:
commit
56f5190cd0
|
@ -395,7 +395,7 @@ public class Antlr4Mojo extends AbstractMojo {
|
|||
String tokensFileName = grammarFile.getName().split("\\.")[0] + ".tokens";
|
||||
File outputFile = new File(outputDirectory, tokensFileName);
|
||||
if ( (! outputFile.exists()) ||
|
||||
outputFile.lastModified() < grammarFile.lastModified() ||
|
||||
outputFile.lastModified() <= grammarFile.lastModified() ||
|
||||
dependencies.isDependencyChanged(grammarFile)) {
|
||||
grammarFilesToProcess.add(grammarFile);
|
||||
}
|
||||
|
@ -412,10 +412,7 @@ public class Antlr4Mojo extends AbstractMojo {
|
|||
// Iterate each grammar file we were given and add it into the tool's list of
|
||||
// grammars to process.
|
||||
for (File grammarFile : grammarFiles) {
|
||||
if (!buildContext.hasDelta(grammarFile)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
buildContext.refresh(grammarFile);
|
||||
buildContext.removeMessages(grammarFile);
|
||||
|
||||
getLog().debug("Grammar file '" + grammarFile.getPath() + "' detected.");
|
||||
|
|
|
@ -216,14 +216,14 @@ class GrammarDependencies {
|
|||
return;
|
||||
|
||||
for (GrammarAST importDecl : grammar.getAllChildrenWithType(ANTLRParser.IMPORT)) {
|
||||
Tree id = importDecl.getFirstChildWithType(ANTLRParser.ID);
|
||||
for (Tree id: importDecl.getAllChildrenWithType(ANTLRParser.ID)) {
|
||||
// missing id is not valid, but we don't want to prevent the root cause from
|
||||
// being reported by the ANTLR tool
|
||||
if (id != null) {
|
||||
String grammarPath = getRelativePath(grammarFile);
|
||||
|
||||
// missing id is not valid, but we don't want to prevent the root cause from
|
||||
// being reported by the ANTLR tool
|
||||
if (id != null) {
|
||||
String grammarPath = getRelativePath(grammarFile);
|
||||
|
||||
graph.addEdge(id.getText() + ".g4", grammarPath);
|
||||
graph.addEdge(id.getText() + ".g4", grammarPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -202,6 +202,7 @@ public class Antlr4MojoTest {
|
|||
Path genHello = generatedSources.resolve("test/HelloParser.java");
|
||||
|
||||
Path baseGrammar = antlrDir.resolve("imports/TestBaseLexer.g4");
|
||||
Path baseGrammar2 = antlrDir.resolve("imports/TestBaseLexer2.g4");
|
||||
Path lexerGrammar = antlrDir.resolve("test/TestLexer.g4");
|
||||
Path parserGrammar = antlrDir.resolve("test/TestParser.g4");
|
||||
|
||||
|
@ -222,21 +223,20 @@ public class Antlr4MojoTest {
|
|||
assertTrue(Files.exists(genHello));
|
||||
assertTrue(Files.exists(genTestParser));
|
||||
assertTrue(Files.exists(genTestLexer));
|
||||
byte[] origTestLexerSum = checksum(genTestLexer);
|
||||
byte[] origTestParserSum = checksum(genTestParser);
|
||||
byte[] origHelloSum = checksum(genHello);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// 2nd - nothing has been modified, no grammars have to be processed
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
{
|
||||
byte[] testLexerSum = checksum(genTestLexer);
|
||||
byte[] testParserSum = checksum(genTestParser);
|
||||
byte[] helloSum = checksum(genHello);
|
||||
|
||||
maven.executeMojo(session, project, exec);
|
||||
|
||||
assertTrue(Arrays.equals(testLexerSum, checksum(genTestLexer)));
|
||||
assertTrue(Arrays.equals(testParserSum, checksum(genTestParser)));
|
||||
assertTrue(Arrays.equals(helloSum, checksum(genHello)));
|
||||
assertTrue(Arrays.equals(origTestLexerSum, checksum(genTestLexer)));
|
||||
assertTrue(Arrays.equals(origTestParserSum, checksum(genTestParser)));
|
||||
assertTrue(Arrays.equals(origHelloSum, checksum(genHello)));
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
@ -245,50 +245,71 @@ public class Antlr4MojoTest {
|
|||
|
||||
// modify the grammar to make checksum comparison detect a change
|
||||
try(Change change = Change.of(baseGrammar, "DOT: '.' ;")) {
|
||||
byte[] testLexerSum = checksum(genTestLexer);
|
||||
byte[] testParserSum = checksum(genTestParser);
|
||||
byte[] helloSum = checksum(genHello);
|
||||
|
||||
maven.executeMojo(session, project, exec);
|
||||
|
||||
assertFalse(Arrays.equals(testLexerSum, checksum(genTestLexer)));
|
||||
assertFalse(Arrays.equals(testParserSum, checksum(genTestParser)));
|
||||
assertTrue(Arrays.equals(helloSum, checksum(genHello)));
|
||||
assertFalse(Arrays.equals(origTestLexerSum, checksum(genTestLexer)));
|
||||
assertFalse(Arrays.equals(origTestParserSum, checksum(genTestParser)));
|
||||
assertTrue(Arrays.equals(origHelloSum, checksum(genHello)));
|
||||
}
|
||||
// Restore file and confirm it was restored.
|
||||
maven.executeMojo(session, project, exec);
|
||||
assertTrue(Arrays.equals(origTestLexerSum, checksum(genTestLexer)));
|
||||
assertTrue(Arrays.equals(origTestParserSum, checksum(genTestParser)));
|
||||
assertTrue(Arrays.equals(origHelloSum, checksum(genHello)));
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// 4th - the lexer grammar changed, the parser grammar has to be processed as well
|
||||
// 4th - the second imported grammar changed, every dependency has to be processed
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// modify the grammar to make checksum comparison detect a change
|
||||
try(Change change = Change.of(lexerGrammar)) {
|
||||
byte[] testLexerSum = checksum(genTestLexer);
|
||||
byte[] testParserSum = checksum(genTestParser);
|
||||
byte[] helloSum = checksum(genHello);
|
||||
|
||||
try(Change change = Change.of(baseGrammar2, "BANG: '!' ;")) {
|
||||
maven.executeMojo(session, project, exec);
|
||||
|
||||
assertFalse(Arrays.equals(testLexerSum, checksum(genTestLexer)));
|
||||
assertFalse(Arrays.equals(testParserSum, checksum(genTestParser)));
|
||||
assertTrue(Arrays.equals(helloSum, checksum(genHello)));
|
||||
assertFalse(Arrays.equals(origTestLexerSum, checksum(genTestLexer)));
|
||||
assertFalse(Arrays.equals(origTestParserSum, checksum(genTestParser)));
|
||||
assertTrue(Arrays.equals(origHelloSum, checksum(genHello)));
|
||||
}
|
||||
// Restore file and confirm it was restored.
|
||||
maven.executeMojo(session, project, exec);
|
||||
assertTrue(Arrays.equals(origTestLexerSum, checksum(genTestLexer)));
|
||||
assertTrue(Arrays.equals(origTestParserSum, checksum(genTestParser)));
|
||||
assertTrue(Arrays.equals(origHelloSum, checksum(genHello)));
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// 5th - the parser grammar changed, no other grammars have to be processed
|
||||
// 5th - the lexer grammar changed, the parser grammar has to be processed as well
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// modify the grammar to make checksum comparison detect a change
|
||||
try(Change change = Change.of(lexerGrammar, "FOO: 'foo' ;")) {
|
||||
maven.executeMojo(session, project, exec);
|
||||
|
||||
assertFalse(Arrays.equals(origTestLexerSum, checksum(genTestLexer)));
|
||||
assertFalse(Arrays.equals(origTestParserSum, checksum(genTestParser)));
|
||||
assertTrue(Arrays.equals(origHelloSum, checksum(genHello)));
|
||||
}
|
||||
// Restore file and confirm it was restored.
|
||||
maven.executeMojo(session, project, exec);
|
||||
assertTrue(Arrays.equals(origTestLexerSum, checksum(genTestLexer)));
|
||||
assertTrue(Arrays.equals(origTestParserSum, checksum(genTestParser)));
|
||||
assertTrue(Arrays.equals(origHelloSum, checksum(genHello)));
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// 6th - the parser grammar changed, no other grammars have to be processed
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// modify the grammar to make checksum comparison detect a change
|
||||
try(Change change = Change.of(parserGrammar, " t : WS* ;")) {
|
||||
byte[] testLexerSum = checksum(genTestLexer);
|
||||
byte[] testParserSum = checksum(genTestParser);
|
||||
byte[] helloSum = checksum(genHello);
|
||||
|
||||
maven.executeMojo(session, project, exec);
|
||||
|
||||
assertTrue(Arrays.equals(testLexerSum, checksum(genTestLexer)));
|
||||
assertFalse(Arrays.equals(testParserSum, checksum(genTestParser)));
|
||||
assertTrue(Arrays.equals(helloSum, checksum(genHello)));
|
||||
assertTrue(Arrays.equals(origTestLexerSum, checksum(genTestLexer)));
|
||||
assertFalse(Arrays.equals(origTestParserSum, checksum(genTestParser)));
|
||||
assertTrue(Arrays.equals(origHelloSum, checksum(genHello)));
|
||||
}
|
||||
// Restore file and confirm it was restored.
|
||||
maven.executeMojo(session, project, exec);
|
||||
assertTrue(Arrays.equals(origTestLexerSum, checksum(genTestLexer)));
|
||||
assertTrue(Arrays.equals(origTestParserSum, checksum(genTestParser)));
|
||||
assertTrue(Arrays.equals(origHelloSum, checksum(genHello)));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -10,7 +10,4 @@ fragment
|
|||
Whitespace : ' ' | '\n' | '\t' | '\r' ;
|
||||
|
||||
fragment
|
||||
Hexdigit : [a-fA-F0-9] ;
|
||||
|
||||
fragment
|
||||
Digit : [0-9] ;
|
||||
Hexdigit : [a-fA-F0-9] ;
|
|
@ -0,0 +1,4 @@
|
|||
lexer grammar TestBaseLexer2;
|
||||
|
||||
fragment
|
||||
Digit : [0-9] ;
|
|
@ -1,6 +1,6 @@
|
|||
lexer grammar TestLexer;
|
||||
|
||||
import TestBaseLexer;
|
||||
import TestBaseLexer, TestBaseLexer2;
|
||||
|
||||
WS : Whitespace+ -> skip;
|
||||
TEXT : ~[<&]+ ; // match any 16 bit char other than < and &
|
||||
TEXT : ~[<&]+ ; // match any 16 bit char other than < and &
|
||||
|
|
|
@ -150,4 +150,5 @@ YYYY/MM/DD, github id, Full name, email
|
|||
2017/05/29, kosak, Corey Kosak, kosak@kosak.com
|
||||
2017/06/11, erikbra, Erik A. Brandstadmoen, erik@brandstadmoen.net
|
||||
2017/06/10, jm-mikkelsen, Jan Martin Mikkelsen, janm@transactionware.com
|
||||
2017/06/25, alimg, Alim Gökkaya, alim.gokkaya@gmail.com
|
||||
2017/06/25, alimg, Alim Gökkaya, alim.gokkaya@gmail.com
|
||||
2017/07/11, dhalperi, Daniel Halperin, daniel@halper.in
|
||||
|
|
Loading…
Reference in New Issue