diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/Class.java b/src/be/jeffcheasey88/peeratcode/parser/java/Class.java index 65ef1a3..28aa655 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/Class.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/Class.java @@ -6,7 +6,7 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class Class { +public class Class{ private static Pattern PATTERN = Pattern.compile("^(\\s*([^\\{]*)\\{(.*)\\})\\s*$"); @@ -18,7 +18,9 @@ public class Class { public Class(){} - public int parse(String content) throws Exception{ + public int parse(String content, CleanerPool cleaner) throws Exception{ + content = cleaner.clean(content); + Matcher matcher = PATTERN.matcher(content); matcher.matches(); @@ -42,7 +44,7 @@ public class Class { Variable last = null; do { Variable variable = (last == null) ? new Variable() : new Variable(last.getModifier(), last.getType()); - int index = variable.parse(content); + int index = variable.parse(content, cleaner); this.vars.add(variable); content = content.substring(index); quote = content.startsWith(","); @@ -57,7 +59,7 @@ public class Class { Variable last = null; do { Variable variable = (last == null) ? new Variable() : new Variable(last.getModifier(), last.getType()); - int index = variable.parse(content); + int index = variable.parse(content, cleaner); this.vars.add(variable); content = content.substring(index); quote = content.startsWith(","); diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/CleanerPool.java b/src/be/jeffcheasey88/peeratcode/parser/java/CleanerPool.java index 23c7b64..7345ba4 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/CleanerPool.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/CleanerPool.java @@ -57,7 +57,7 @@ public class CleanerPool{ StringBuilder builder = new StringBuilder(); for(int i = 0; i < value.length(); i++){ char c = value.charAt(i); - if(c == '<'){ + if(c == open){ i+=cutOpenable(value.substring(i+1), constants, pattern, open, close); builder.append(pattern+(constants.size()-1)); }else{ @@ -69,21 +69,21 @@ public class CleanerPool{ private int cutOpenable(String value, List constants, String pattern, char open, char close){ StringBuilder builder = new StringBuilder(); - - for(int i = 0; i < value.length(); i++){ + int i = 0; + for(;i < value.length(); i++){ char c = value.charAt(i); - if(c == open){ + if(c == close){ + break; + }else if(c == open){ i+=cutOpenable(value.substring(i+1), constants, pattern, open, close); builder.append(pattern+(constants.size()-1)); - }else if(c == close){ - break; }else{ builder.append(c); } } constants.add(builder.toString()); - return builder.length()+1; + return i+1; } } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java index 12043c9..2e4025e 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java @@ -5,8 +5,11 @@ import java.io.File; import java.io.FileReader; import java.lang.reflect.Modifier; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import be.jeffcheasey88.peeratcode.parser.java.CleanerPool.Cleaner; + public class JavaParser { public static void main(String[] args) throws Exception { @@ -51,7 +54,7 @@ public class JavaParser { } this.clazz = new Class(); - index = this.clazz.parse(content); + index = this.clazz.parse(content, new CleanerPool(Arrays.asList(new Cleaner("$GENERIC_TYPE_",'<','>')))); content = content.substring(index); } diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/Variable.java b/src/be/jeffcheasey88/peeratcode/parser/java/Variable.java index c41fa29..da77208 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/Variable.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/Variable.java @@ -21,7 +21,7 @@ public class Variable { this.type = type; } - public int parse(String content) throws Exception{ + public int parse(String content, CleanerPool cleaner) throws Exception{ Matcher matcher = PATTERN.matcher(content); matcher.matches(); @@ -65,20 +65,7 @@ public class Variable { } private String generiqueTypes(String content){ - System.out.println(content); - String result = ""; - int opened = 0; - for(char c : content.toCharArray()){ - if(c == '<') opened++; - else if(c == '>') opened--; - - if(opened > 0){ - if(Character.isWhitespace(c)) continue; - } - result+=c; - } - result = result.replaceAll("(>\\s*)", "> ").replace("> >", ">>"); - return result; + return content; } private int indexOf(String value, String target){ diff --git a/test/be/jeffcheasey88/peeratcode/parser/java/CleanerTest.java b/test/be/jeffcheasey88/peeratcode/parser/java/CleanerTest.java index 137ff86..81a771b 100644 --- a/test/be/jeffcheasey88/peeratcode/parser/java/CleanerTest.java +++ b/test/be/jeffcheasey88/peeratcode/parser/java/CleanerTest.java @@ -13,8 +13,13 @@ public class CleanerTest { @Test void cutter(){ CleanerPool cleaner = new CleanerPool(Arrays.asList(new Cleaner("$TEST",'<','>'))); - String result = cleaner.clean("test>"); - assertEquals("test$TEST1", result); - assertEquals("Lol", cleaner.getConstant("$TEST0")); + String result = cleaner.clean("Test0< List< Map< Test1, List< Test2 >, Test3>> > "); + assertEquals("Test0$TEST3 ", result); + } + @Test + void cutterLittle(){ + CleanerPool cleaner = new CleanerPool(Arrays.asList(new Cleaner("$TEST",'<','>'))); + String result = cleaner.clean("Test0> "); + assertEquals("Test0$TEST1 ", result); } } diff --git a/test/be/jeffcheasey88/peeratcode/parser/java/VariableTest.java b/test/be/jeffcheasey88/peeratcode/parser/java/VariableTest.java index 5e0bcbd..3c5e389 100644 --- a/test/be/jeffcheasey88/peeratcode/parser/java/VariableTest.java +++ b/test/be/jeffcheasey88/peeratcode/parser/java/VariableTest.java @@ -4,13 +4,19 @@ import static org.junit.Assert.assertNull; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.fail; +import java.util.Arrays; import java.util.List; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.TestInstance.Lifecycle; +import be.jeffcheasey88.peeratcode.parser.java.CleanerPool.Cleaner; import be.jeffcheasey88.peeratcode.parser.java.Variable.Value; -class VariableTest { +@TestInstance(Lifecycle.PER_CLASS) +class VariableTest{ //int i = 4; //int i,j,k,l=1; @@ -20,11 +26,18 @@ class VariableTest { //Test j = new Test().schedule(p -> { return true;}); //int i =j=k=l=4; + private CleanerPool cleaner; + + @BeforeAll + void init(){ + this.cleaner = new CleanerPool(Arrays.asList(new Cleaner("$GENERIC_TYPE_",'<','>'))); + } + @Test void case1(){ try { Variable variable = new Variable(); - variable.parse(" int i = 4 ; "); + variable.parse(cleaner.clean(" int i = 4 ; "), cleaner); assertEquals(0, variable.getModifier()); assertEquals("int", variable.getType()); @@ -39,7 +52,7 @@ class VariableTest { void case2(){ try { Variable variable = new Variable(); - variable.parse("public static int l ; "); + variable.parse(cleaner.clean("public static int l ; "), cleaner); assertEquals(JavaParser.getModifier("public")+JavaParser.getModifier("static"), variable.getModifier()); assertEquals("int", variable.getType()); @@ -54,7 +67,7 @@ class VariableTest { void case3(){ try { Variable variable = new Variable(); - variable.parse(" int lm ; "); + variable.parse(cleaner.clean(" int lm ; "), cleaner); assertEquals(0, variable.getModifier()); assertEquals("int", variable.getType()); @@ -69,10 +82,10 @@ class VariableTest { void case4(){ try { Variable variable = new Variable(); - variable.parse("Testas< List< Map< Test, List< Test >, Test>> >t; "); + variable.parse(cleaner.clean("Test0< List< Map< Test1, List< Test2 >, Test3>> >t; "), cleaner); assertEquals(0, variable.getModifier()); - assertEquals("Testas,Test>>>", variable.getType()); + assertEquals("Test0,Test3>>>", variable.getType()); assertEquals("t", variable.getName()); assertNull(variable.getValue()); }catch(Exception e){ @@ -84,7 +97,7 @@ class VariableTest { void case5(){ try { Variable variable = new Variable(); - variable.parse(" int i,j,k,l=1; "); + variable.parse(cleaner.clean(" int i,j,k,l=1; "), cleaner); assertEquals(0, variable.getModifier()); assertEquals("int", variable.getType()); @@ -99,7 +112,7 @@ class VariableTest { void case6(){ try { Class clazz = new Class(); - clazz.parse("public class Test{ int i ,j,k,l=1; } "); + clazz.parse(cleaner.clean("public class Test{ int i ,j,k,l=1; } "), cleaner); List vars = clazz.getVariables(); assertEquals(vars.size(), 4); @@ -124,7 +137,7 @@ class VariableTest { void case7(){ try { Class clazz = new Class(); - clazz.parse("public class Test{ int i ,j,k; int l=i=k=l=4; } "); + clazz.parse(cleaner.clean("public class Test{ int i ,j,k; int l=i=k=l=4; } "), new CleanerPool(Arrays.asList(new Cleaner("$GENERIC_TYPE",'<','>')))); List vars = clazz.getVariables(); assertEquals(vars.size(), 4);