Account for !--- doc splitter for properties validation

This commit is contained in:
aboyko
2024-07-26 17:41:56 -04:00
parent 4aa4400c3c
commit 32c8a86d86
10 changed files with 205 additions and 60 deletions

View File

@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2016 Pivotal, Inc.
* Copyright (c) 2016, 2024 Pivotal, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -11,8 +11,6 @@
package org.springframework.ide.vscode.java.properties.parser;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
/**
* Very basic AST for Java Properties to keep comments and key value pairs
@@ -36,21 +34,12 @@ public final class PropertiesAst {
return nodes;
}
public List<Node> getNodes(Predicate<Node> test) {
return nodes.stream().filter(test).collect(Collectors.toList());
public List<KeyValuePair> getPropertyValuePairs() {
return nodes.stream().filter(KeyValuePair.class::isInstance).map(KeyValuePair.class::cast).toList();
}
/**
* Retrieves AST nodes of specific type
* @param clazz Type of AST nodes
* @return List of AST nodes of specific type sorted by line number
*/
@SuppressWarnings("unchecked")
public <T> List<T> getNodes(Class<T> clazz) {
List<Node> l = nodes.stream().filter(line -> {
return clazz.isAssignableFrom(line.getClass());
}).collect(Collectors.toList());
return (List<T>) l;
public List<Comment> getComments() {
return nodes.stream().filter(Comment.class::isInstance).map(Comment.class::cast).toList();
}
/**

View File

@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2016 Pivotal, Inc.
* Copyright (c) 2016, 2024 Pivotal, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -35,7 +35,7 @@ public class PropertiesAntlrParserTest {
assertTrue(results.problems.isEmpty());
assertEquals(1, results.ast.getAllNodes().size());
List<Comment> commentLines = results.ast.getNodes(Comment.class);
List<Comment> commentLines = results.ast.getComments();
assertEquals(1, commentLines.size());
Comment comment = commentLines.get(0);
@@ -52,7 +52,7 @@ public class PropertiesAntlrParserTest {
assertTrue(results.problems.isEmpty());
assertEquals(1, results.ast.getAllNodes().size());
List<KeyValuePair> propertyLines = results.ast.getNodes(KeyValuePair.class);
List<KeyValuePair> propertyLines = results.ast.getPropertyValuePairs();
assertEquals(1, propertyLines.size());
KeyValuePair line = propertyLines.get(0);
@@ -197,7 +197,7 @@ public class PropertiesAntlrParserTest {
assertTrue(results.problems.isEmpty());
// One property line recorded. With key and empty value
assertEquals(3, results.ast.getAllNodes().size());
List<KeyValuePair> lines = results.ast.getNodes(KeyValuePair.class);
List<KeyValuePair> lines = results.ast.getPropertyValuePairs();
assertEquals(3, lines.size());
// Test valid part

View File

@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2016-2017 Pivotal, Inc.
* Copyright (c) 2016, 2024 Pivotal, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -36,8 +36,8 @@ public class PropertiesAstTest {
assertTrue(results.syntaxErrors.isEmpty());
assertTrue(results.problems.isEmpty());
assertEquals(4, results.ast.getAllNodes().size());
assertEquals(1, results.ast.getNodes(Comment.class).size());
assertEquals(3, results.ast.getNodes(EmptyLine.class).size());
assertEquals(1, results.ast.getComments().size());
// assertEquals(3, results.ast.getNodes(EmptyLine.class).size());
}
@Test
@@ -46,8 +46,8 @@ public class PropertiesAstTest {
assertTrue(results.syntaxErrors.isEmpty());
assertTrue(results.problems.isEmpty());
assertEquals(5, results.ast.getAllNodes().size());
assertEquals(1, results.ast.getNodes(Comment.class).size());
assertEquals(4, results.ast.getNodes(EmptyLine.class).size());
assertEquals(1, results.ast.getComments().size());
// assertEquals(4, results.ast.getNodes(EmptyLine.class).size());
}
@Test
@@ -56,26 +56,26 @@ public class PropertiesAstTest {
assertTrue(results.syntaxErrors.isEmpty());
assertTrue(results.problems.isEmpty());
assertEquals(5, results.ast.getAllNodes().size());
assertEquals(1, results.ast.getNodes(Comment.class).size());
assertEquals(1, results.ast.getNodes(KeyValuePair.class).size());
assertEquals(3, results.ast.getNodes(EmptyLine.class).size());
assertEquals(1, results.ast.getComments().size());
assertEquals(1, results.ast.getPropertyValuePairs().size());
// assertEquals(3, results.ast.getNodes(EmptyLine.class).size());
}
@Test
public void testLines4() throws Exception {
ParseResults results = parser.parse("# Comment-1\n\nkey = value 1 \n# Comment-2");
assertEquals(4, results.ast.getAllNodes().size());
assertEquals(2, results.ast.getNodes(Comment.class).size());
assertEquals(1, results.ast.getNodes(KeyValuePair.class).size());
assertEquals(1, results.ast.getNodes(EmptyLine.class).size());
assertEquals(2, results.ast.getComments().size());
assertEquals(1, results.ast.getPropertyValuePairs().size());
// assertEquals(1, results.ast.getNodes(EmptyLine.class).size());
}
@Test
public void testLines5() throws Exception {
ParseResults results = parser.parse("#comment\nliquibase.enabled=\n#comment");
assertEquals(3, results.ast.getAllNodes().size());
assertEquals(2, results.ast.getNodes(Comment.class).size());
assertEquals(1, results.ast.getNodes(KeyValuePair.class).size());
assertEquals(2, results.ast.getComments().size());
assertEquals(1, results.ast.getPropertyValuePairs().size());
}
@Test