Multiple Variable Definition
This commit is contained in:
parent
4b1b83930e
commit
784a51e75c
3 changed files with 104 additions and 44 deletions
|
@ -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());
|
||||
Variable variable = new Variable();
|
||||
int index = variable.parse(content, cleaner);
|
||||
this.vars.add(variable);
|
||||
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);
|
||||
}while(quote);
|
||||
|
||||
multiple.addVariable(variable.getName(), variable.getValue());
|
||||
}
|
||||
|
||||
this.vars.add(multiple);
|
||||
}else{
|
||||
this.vars.add(variable);
|
||||
}
|
||||
|
||||
content = content.substring(1);
|
||||
}else{
|
||||
// System.out.println("Function "+content);
|
||||
|
|
|
@ -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<String> names;
|
||||
private List<Variable> 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+";");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<Variable> vars = clazz.getVariables();
|
||||
assertEquals(4, vars.size());
|
||||
for(int i = 0; i < 3; i++){
|
||||
Variable v = vars.get(i);
|
||||
assertEquals(1, vars.size());
|
||||
|
||||
Variable v = vars.get(0);
|
||||
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());
|
||||
// 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<Variable> vars = clazz.getVariables();
|
||||
assertEquals(4, vars.size());
|
||||
for(int i = 0; i < 4; i++){
|
||||
Variable v = vars.get(i);
|
||||
assertEquals(2, vars.size());
|
||||
Variable v = vars.get(0);
|
||||
assertEquals(0, v.getModifier());
|
||||
assertEquals("int", v.getType());
|
||||
assertEquals((char)('i'+i), v.getName().charAt(0));
|
||||
}
|
||||
// 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<Variable> vars = clazz.getVariables();
|
||||
assertEquals(vars.size(), 4);
|
||||
for(int i = 0; i < 3; i++){
|
||||
Variable v = vars.get(i);
|
||||
assertEquals(1, vars.size());
|
||||
Variable v = vars.get(0);
|
||||
assertEquals(0, v.getModifier());
|
||||
assertEquals("int", v.getType());
|
||||
assertEquals((char)('i'+i), v.getName().charAt(0));
|
||||
assertNull(v.getValue());
|
||||
}
|
||||
// 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<Integer, Integer> j = ((i) -> {return 4;}), k = ((i) -> 4); } "), cleaner);
|
||||
|
||||
List<Variable> 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<Integer,Integer>", 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<Integer,Integer>", 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<Integer,Integer>", variable.getType());
|
||||
// assertEquals("k", variable.getName());
|
||||
// assertEquals("((i) -> 4)", ((Value)variable.getValue()).value());
|
||||
}catch(Exception e){
|
||||
fail(e);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue