aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-12-06 10:34:11 +0000
committerMichael Williamson <mike@zwobble.org>2015-12-06 10:34:11 +0000
commit9ecc34a6884473feda3882c1339b29ac1a8c6557 (patch)
tree31a8ac65b53f27229bdc9fe6d47ada14cbeaf257 /src
parentc4f1fc49321a21eefb3ecb0eaa97a1e06ecb45b5 (diff)
Add disabled code for checking for unique declarations
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java40
1 files changed, 35 insertions, 5 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java
index bccd4a8..fa44676 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java
@@ -1,25 +1,55 @@
package org.zwobble.couscous.frontends.java;
+import com.google.common.collect.Multimaps;
+import org.zwobble.couscous.Frontend;
+import org.zwobble.couscous.ast.ClassNode;
+import org.zwobble.couscous.ast.Node;
+import org.zwobble.couscous.ast.VariableDeclaration;
+import org.zwobble.couscous.ast.VariableNode;
+
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.zwobble.couscous.Frontend;
-import org.zwobble.couscous.ast.ClassNode;
-import org.zwobble.couscous.util.ExtraLists;
+import static org.zwobble.couscous.ast.structure.NodeStructure.descendantNodesAndSelf;
+import static org.zwobble.couscous.util.Casts.tryCast;
+import static org.zwobble.couscous.util.ExtraLists.eagerFlatMap;
+import static org.zwobble.couscous.util.ExtraLists.flatMap;
+import static org.zwobble.couscous.util.ExtraStreams.toStream;
public class JavaFrontend implements Frontend {
@Override
public List<ClassNode> readSourceDirectory(Path directoryPath) throws IOException {
- return ExtraLists.flatMap(
+ List<ClassNode> classNodes = flatMap(
findJavaFiles(directoryPath),
javaFile -> JavaReader.readClassFromFile(directoryPath, javaFile));
+ //ensureDeclarationsAreUnique(classNodes);
+ return classNodes;
}
-
+
private Stream<Path> findJavaFiles(Path directoryPath) throws IOException {
return Files.walk(directoryPath)
.filter(path -> path.toFile().isFile() && path.toString().endsWith(".java"));
}
+
+ private void ensureDeclarationsAreUnique(List<ClassNode> classNodes) {
+ List<VariableDeclaration> declarations = eagerFlatMap(classNodes, this::findDeclarations);
+ Multimaps.index(declarations, declaration -> declaration.getId())
+ .asMap()
+ .forEach((id, declarationsWithId) -> {
+ if (declarationsWithId.size() > 1) {
+ throw new RuntimeException("Declaration " + id + " is declared more than once");
+ }
+ });
+ }
+
+ private List<VariableDeclaration> findDeclarations(Node root) {
+ return descendantNodesAndSelf(root)
+ .flatMap(node -> toStream(tryCast(VariableNode.class, node)
+ .map(VariableNode::getDeclaration)))
+ .collect(Collectors.toList());
+ }
} \ No newline at end of file