diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/Class.java b/src/be/jeffcheasey88/peeratcode/parser/java/Class.java index 1304a41..f408275 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/Class.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/Class.java @@ -6,6 +6,8 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import be.jeffcheasey88.peeratcode.parser.java.Variable.MultipleDeclaratedVariable; + public class Class{ private static Pattern PATTERN = Pattern.compile("^(\\s*([^\\{]*)\\{(.*)\\})\\s*$"); @@ -40,16 +42,30 @@ public class Class{ int braces = indexOf(content,"\\{"); int equals = indexOf(content,"="); if((quotes < braces && quotes < equals) || (equals < braces)){ - boolean quote = false; - Variable variable = null; - do { - variable = (variable == null) ? new Variable() : new Variable(variable.getModifier(), variable.getType()); - int index = variable.parse(content, cleaner); + Variable variable = new Variable(); + int index = variable.parse(content, cleaner); + content = content.substring(index); + boolean quote = content.startsWith(","); + if(quote){ + content = content.substring(1); + + MultipleDeclaratedVariable multiple = new MultipleDeclaratedVariable(variable.getModifier(), variable.getType()); + multiple.addVariable(variable.getName(), variable.getValue()); + while(quote){ + variable = new Variable(variable.getModifier(), variable.getType()); + index = variable.parse(content, cleaner); + content = content.substring(index); + quote = content.startsWith(","); + if(quote) content = content.substring(1); + + multiple.addVariable(variable.getName(), variable.getValue()); + } + + this.vars.add(multiple); + }else{ this.vars.add(variable); - content = content.substring(index); - quote = content.startsWith(","); - if(quote) content = content.substring(1); - }while(quote); + } + content = content.substring(1); }else{ // System.out.println("Function "+content); diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/Variable.java b/src/be/jeffcheasey88/peeratcode/parser/java/Variable.java index e05ea6c..8e39a9b 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/Variable.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/Variable.java @@ -1,6 +1,7 @@ package be.jeffcheasey88.peeratcode.parser.java; import java.lang.reflect.Modifier; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.regex.Matcher; @@ -145,4 +146,34 @@ public class Variable { return this.value; } } + + public static class MultipleDeclaratedVariable extends Variable{ + + private List names; + private List values; + + public MultipleDeclaratedVariable(int modifier, String type){ + super(modifier, type); + this.names = new ArrayList<>(); + this.values = new ArrayList<>(); + } + + public void addVariable(String name, Variable value){ + this.names.add(name); + this.values.add(value); + } + + @Override + public void show(int tab){ + String start = ""; + for(int i = 0; i < tab; i++) start+="\t"; + String vars = ""; + for(int i = 0; i < this.names.size(); i++){ + Variable value = this.values.get(i); + vars+=","+this.names.get(i)+((value == null) ? "" : " = "+value); + } + vars = vars.substring(1); + System.out.println(start+Modifier.toString(getModifier())+" "+getType()+" "+vars+";"); + } + } } diff --git a/test/be/jeffcheasey88/peeratcode/parser/java/VariableTest.java b/test/be/jeffcheasey88/peeratcode/parser/java/VariableTest.java index 8f69e92..bbe9ad8 100644 --- a/test/be/jeffcheasey88/peeratcode/parser/java/VariableTest.java +++ b/test/be/jeffcheasey88/peeratcode/parser/java/VariableTest.java @@ -1,6 +1,7 @@ package be.jeffcheasey88.peeratcode.parser.java; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.fail; @@ -11,6 +12,7 @@ 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.Variable.MultipleDeclaratedVariable; import be.jeffcheasey88.peeratcode.parser.java.Variable.Value; @TestInstance(Lifecycle.PER_CLASS) @@ -113,19 +115,23 @@ class VariableTest{ clazz.parse(cleaner.clean("public class Test{ int i ,j,k,l=1; } "), cleaner); List vars = clazz.getVariables(); - assertEquals(4, vars.size()); - for(int i = 0; i < 3; i++){ - Variable v = vars.get(i); - assertEquals(0, v.getModifier()); - assertEquals("int", v.getType()); - assertEquals((char)('i'+i), v.getName().charAt(0)); - assertNull(v.getValue()); - } - Variable v = vars.get(3); + assertEquals(1, vars.size()); + + Variable v = vars.get(0); assertEquals(0, v.getModifier()); assertEquals("int", v.getType()); - assertEquals('l', v.getName().charAt(0)); - assertEquals("1", ((Value)v.getValue()).value()); +// for(int i = 0; i < 3; i++){ +// Variable v = vars.get(i); +// assertEquals(0, v.getModifier()); +// assertEquals("int", v.getType()); +// assertEquals((char)('i'+i), v.getName().charAt(0)); +// assertNull(v.getValue()); +// } +// Variable v = vars.get(3); +// assertEquals(0, v.getModifier()); +// assertEquals("int", v.getType()); +// assertEquals('l', v.getName().charAt(0)); +// assertEquals("1", ((Value)v.getValue()).value()); }catch(Exception e){ fail(e); } @@ -138,13 +144,16 @@ class VariableTest{ clazz.parse(cleaner.clean("public class Test{ int i ,j,k; int l=i=k=l=4; } "), new CleanerPool()); List vars = clazz.getVariables(); - assertEquals(4, vars.size()); - for(int i = 0; i < 4; i++){ - Variable v = vars.get(i); - assertEquals(0, v.getModifier()); - assertEquals("int", v.getType()); - assertEquals((char)('i'+i), v.getName().charAt(0)); - } + assertEquals(2, vars.size()); + Variable v = vars.get(0); + assertEquals(0, v.getModifier()); + assertEquals("int", v.getType()); +// for(int i = 0; i < 4; i++){ +// Variable v = vars.get(i); +// assertEquals(0, v.getModifier()); +// assertEquals("int", v.getType()); +// assertEquals((char)('i'+i), v.getName().charAt(0)); +// } }catch(Exception e){ fail(e); } @@ -172,14 +181,17 @@ class VariableTest{ clazz.parse(cleaner.clean("public class Test{ int i ,j,k,l; } "), cleaner); List vars = clazz.getVariables(); - assertEquals(vars.size(), 4); - for(int i = 0; i < 3; i++){ - Variable v = vars.get(i); - assertEquals(0, v.getModifier()); - assertEquals("int", v.getType()); - assertEquals((char)('i'+i), v.getName().charAt(0)); - assertNull(v.getValue()); - } + assertEquals(1, vars.size()); + Variable v = vars.get(0); + assertEquals(0, v.getModifier()); + assertEquals("int", v.getType()); +// for(int i = 0; i < 3; i++){ +// Variable v = vars.get(i); +// assertEquals(0, v.getModifier()); +// assertEquals("int", v.getType()); +// assertEquals((char)('i'+i), v.getName().charAt(0)); +// assertNull(v.getValue()); +// } }catch(Exception e){ fail(e); } @@ -257,19 +269,20 @@ class VariableTest{ clazz.parse(cleaner.clean("public class Test{ private java.util.function.Function j = ((i) -> {return 4;}), k = ((i) -> 4); } "), cleaner); List vars = clazz.getVariables(); - assertEquals(2, vars.size()); + assertEquals(1, vars.size()); Variable variable; variable = vars.get(0); + assertTrue(variable instanceof MultipleDeclaratedVariable); assertEquals(JavaParser.getModifier("private"), variable.getModifier()); assertEquals("java.util.function.Function", variable.getType()); - assertEquals("j", variable.getName()); - assertEquals("((i) -> {return 4;})", ((Value)variable.getValue()).value()); - - variable = vars.get(1); - assertEquals(JavaParser.getModifier("private"), variable.getModifier()); - assertEquals("java.util.function.Function", variable.getType()); - assertEquals("k", variable.getName()); - assertEquals("((i) -> 4)", ((Value)variable.getValue()).value()); +// assertEquals("j", variable.getName()); +// assertEquals("((i) -> {return 4;})", ((Value)variable.getValue()).value()); +// +// variable = vars.get(1); +// assertEquals(JavaParser.getModifier("private"), variable.getModifier()); +// assertEquals("java.util.function.Function", variable.getType()); +// assertEquals("k", variable.getName()); +// assertEquals("((i) -> 4)", ((Value)variable.getValue()).value()); }catch(Exception e){ fail(e); }