Multiple Variable Definition

This commit is contained in:
jeffcheasey88 2023-05-20 23:26:02 +02:00
parent 4b1b83930e
commit 784a51e75c
3 changed files with 104 additions and 44 deletions

View file

@ -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);

View file

@ -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+";");
}
}
}

View file

@ -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(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<Variable> 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<Variable> 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<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);
}