Test update
This commit is contained in:
parent
d4f98693d6
commit
a3000d0ba1
BIN
classWithMain.class
Normal file
BIN
classWithMain.class
Normal file
Binary file not shown.
BIN
emptyClass.class
Normal file
BIN
emptyClass.class
Normal file
Binary file not shown.
@ -8,5 +8,17 @@
|
|||||||
</content>
|
</content>
|
||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="inheritedJdk" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="library" scope="TEST" name="Maven: org.antlr:antlr4-runtime:4.13.1" level="project" />
|
||||||
|
<orderEntry type="module" module-name="NichtHaskell" scope="TEST" />
|
||||||
|
<orderEntry type="module-library" scope="TEST">
|
||||||
|
<library name="JUnit4">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.13.1/junit-4.13.1.jar!/" />
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</orderEntry>
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
@ -18,7 +18,7 @@ public class Compiler {
|
|||||||
|
|
||||||
public static void main(String[] args) throws Exception{
|
public static void main(String[] args) throws Exception{
|
||||||
|
|
||||||
Path filePath = Paths.get("src/main/java/Input.java");
|
Path filePath = Paths.get("src/main/java/TestClass.java");
|
||||||
|
|
||||||
|
|
||||||
// todo remove this debug info
|
// todo remove this debug info
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
public class TestClass {
|
public class TestClass {
|
||||||
public static void main(String[] args){
|
public static void main(String[] args){
|
||||||
// new Example();
|
|
||||||
// new Example2();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,10 @@ public class FieldDecl extends AbstractType implements Node {
|
|||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
FieldDecl fieldDecl = (FieldDecl) o;
|
FieldDecl fieldDecl = (FieldDecl) o;
|
||||||
return ( Objects.equals(type, fieldDecl.type)
|
boolean result = Objects.equals(type, fieldDecl.type)
|
||||||
&& Objects.equals(identifier, fieldDecl.identifier));
|
&& Objects.equals(identifier, fieldDecl.identifier);
|
||||||
|
|
||||||
|
System.out.println("In FieldDecl: " + result);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -173,10 +173,12 @@ public class MethodDecl implements Node {
|
|||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
MethodDecl methodDecl = (MethodDecl) o;
|
MethodDecl methodDecl = (MethodDecl) o;
|
||||||
return (Objects.equals(name, methodDecl.name)
|
boolean result = (Objects.equals(name, methodDecl.name)
|
||||||
&& Objects.equals(parameters, methodDecl.parameters)
|
&& Objects.equals(parameters, methodDecl.parameters)
|
||||||
&& Objects.equals(returnType, methodDecl.returnType)
|
&& Objects.equals(returnType, methodDecl.returnType)
|
||||||
&& Objects.equals(codeBlock, methodDecl.codeBlock));
|
&& Objects.equals(codeBlock, methodDecl.codeBlock));
|
||||||
|
System.out.println("In MethodDecl: " + result);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -96,14 +96,16 @@ public class RefType extends AbstractType implements Node {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
System.out.println("Dont forget me ;)");
|
|
||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
RefType refType = (RefType) o;
|
RefType refType = (RefType) o;
|
||||||
return ( Objects.equals(name, refType.name)
|
boolean result = ( Objects.equals(name, refType.name)
|
||||||
&& Objects.equals(fieldDecls, refType.fieldDecls)
|
&& Objects.equals(fieldDecls, refType.fieldDecls)
|
||||||
&& Objects.equals(methodDecls, refType.methodDecls)
|
&& Objects.equals(methodDecls, refType.methodDecls)
|
||||||
&& Objects.equals(hasMain, refType.hasMain));
|
&& Objects.equals(hasMain, refType.hasMain));
|
||||||
|
System.out.println("In RefType: " + result);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,10 @@ public class BoolDatatype extends AbstractType implements IDatatype{
|
|||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
BoolDatatype boolDatatype = (BoolDatatype) o;
|
BoolDatatype boolDatatype = (BoolDatatype) o;
|
||||||
return (Objects.equals(value, boolDatatype.value));
|
boolean result = Objects.equals(value, boolDatatype.value);
|
||||||
|
System.out.println("In BoolDataType: " + result);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public TypeCheckResult typeCheck() {
|
public TypeCheckResult typeCheck() {
|
||||||
@ -39,4 +42,6 @@ public class BoolDatatype extends AbstractType implements IDatatype{
|
|||||||
public TypeCheckResult getTypeCheckResult() {
|
public TypeCheckResult getTypeCheckResult() {
|
||||||
return super.getTypeCheckResult();
|
return super.getTypeCheckResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,10 @@ public class CharDatatype extends AbstractType implements IDatatype{
|
|||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
CharDatatype charDatatype = (CharDatatype) o;
|
CharDatatype charDatatype = (CharDatatype) o;
|
||||||
return (Objects.equals(value, charDatatype.value));
|
boolean result = Objects.equals(value, charDatatype.value);
|
||||||
|
System.out.println("In CharDataType: " + result);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -36,7 +36,10 @@ public class IntDatatype extends AbstractType implements IDatatype{
|
|||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
IntDatatype intDatatype = (IntDatatype) o;
|
IntDatatype intDatatype = (IntDatatype) o;
|
||||||
return (Objects.equals(value, intDatatype.value));
|
boolean result = (Objects.equals(value, intDatatype.value));
|
||||||
|
System.out.println("In IntDataType: " + result);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -181,10 +181,13 @@ public class BinaryExpression extends AbstractType implements IExpression{
|
|||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
BinaryExpression binaryExpression = (BinaryExpression) o;
|
BinaryExpression binaryExpression = (BinaryExpression) o;
|
||||||
return (Objects.equals(operator, binaryExpression.operator)
|
boolean result = (Objects.equals(operator, binaryExpression.operator)
|
||||||
&& Objects.equals(left, binaryExpression.left)
|
&& Objects.equals(left, binaryExpression.left)
|
||||||
&& Objects.equals(right, binaryExpression.right)
|
&& Objects.equals(right, binaryExpression.right)
|
||||||
);
|
);
|
||||||
|
System.out.println("In BinaryExpression: " + result);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public TypeCheckResult getTypeCheckResult() {
|
public TypeCheckResult getTypeCheckResult() {
|
||||||
|
@ -3,12 +3,14 @@ package abstractSyntaxTree.Expression;
|
|||||||
import TypeCheck.AbstractType;
|
import TypeCheck.AbstractType;
|
||||||
import TypeCheck.TypeCheckException;
|
import TypeCheck.TypeCheckException;
|
||||||
import TypeCheck.TypeCheckResult;
|
import TypeCheck.TypeCheckResult;
|
||||||
|
import abstractSyntaxTree.Datatype.BoolDatatype;
|
||||||
import abstractSyntaxTree.Parameter.ParameterList;
|
import abstractSyntaxTree.Parameter.ParameterList;
|
||||||
import org.objectweb.asm.MethodVisitor;
|
import org.objectweb.asm.MethodVisitor;
|
||||||
import org.objectweb.asm.Opcodes;
|
import org.objectweb.asm.Opcodes;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
public class BooleanConstantExpression extends AbstractType implements IExpression{
|
public class BooleanConstantExpression extends AbstractType implements IExpression{
|
||||||
public boolean value;
|
public boolean value;
|
||||||
@ -37,4 +39,15 @@ public class BooleanConstantExpression extends AbstractType implements IExpressi
|
|||||||
public TypeCheckResult getTypeCheckResult() {
|
public TypeCheckResult getTypeCheckResult() {
|
||||||
return super.getTypeCheckResult();
|
return super.getTypeCheckResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
BooleanConstantExpression boolDatatype = (BooleanConstantExpression) o;
|
||||||
|
boolean result = Objects.equals(value, boolDatatype.value);
|
||||||
|
System.out.println("In BooleanConstantExpression: " + result);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import org.objectweb.asm.Opcodes;
|
|||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
public class CharConstantExpression extends AbstractType implements IExpression{
|
public class CharConstantExpression extends AbstractType implements IExpression{
|
||||||
public char value;
|
public char value;
|
||||||
@ -33,4 +34,15 @@ public class CharConstantExpression extends AbstractType implements IExpression{
|
|||||||
public TypeCheckResult getTypeCheckResult() {
|
public TypeCheckResult getTypeCheckResult() {
|
||||||
return super.getTypeCheckResult();
|
return super.getTypeCheckResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
CharConstantExpression boolDatatype = (CharConstantExpression) o;
|
||||||
|
boolean result = Objects.equals(value, boolDatatype.value);
|
||||||
|
System.out.println("In CharConstantExpression: " + result);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,9 +80,12 @@ public class InstVarExpression extends AbstractType implements IExpression{
|
|||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
InstVarExpression instVarExpression = (InstVarExpression) o;
|
InstVarExpression instVarExpression = (InstVarExpression) o;
|
||||||
return (Objects.equals(thisClass, instVarExpression.thisClass)
|
boolean result = (Objects.equals(thisClass, instVarExpression.thisClass)
|
||||||
&& Objects.equals(fieldName, instVarExpression.fieldName)
|
&& Objects.equals(fieldName, instVarExpression.fieldName)
|
||||||
);
|
);
|
||||||
|
System.out.println("In InstVarExpression: " + result);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -37,8 +37,11 @@ public class IntConstantExpression extends AbstractType implements IExpression{
|
|||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
IntConstantExpression intConstantExpression = (IntConstantExpression) o;
|
IntConstantExpression intConstantExpression = (IntConstantExpression) o;
|
||||||
return (Objects.equals(value, intConstantExpression.value)
|
boolean result = (Objects.equals(value, intConstantExpression.value)
|
||||||
);
|
);
|
||||||
|
System.out.println("In intConstantExpression: " + result);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -93,7 +93,10 @@ public class LocalVarIdentifier extends AbstractType implements IExpression{
|
|||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
LocalVarIdentifier localVarIdentifier = (LocalVarIdentifier) o;
|
LocalVarIdentifier localVarIdentifier = (LocalVarIdentifier) o;
|
||||||
return (Objects.equals(identifier, localVarIdentifier.identifier)
|
boolean result = (Objects.equals(identifier, localVarIdentifier.identifier)
|
||||||
);
|
);
|
||||||
|
System.out.println("In localVarIdentifier: " + result);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -120,8 +120,7 @@ public class Program implements Node {
|
|||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
Program program = (Program) o;
|
Program program = (Program) o;
|
||||||
System.out.println(classes);
|
System.out.println("In program: " + Objects.equals(classes, program.classes));
|
||||||
System.out.println(program.classes);
|
|
||||||
return (Objects.equals(classes, program.classes));
|
return (Objects.equals(classes, program.classes));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -8,15 +8,22 @@ public class testAll {
|
|||||||
AstComparer astComparer;
|
AstComparer astComparer;
|
||||||
public testAll()
|
public testAll()
|
||||||
{
|
{
|
||||||
this.astComparer = new AstComparer("test/resources");
|
this.astComparer = new AstComparer("src/test/resources");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void TestEmptyClass(){
|
public void testEmptyClass(){
|
||||||
Program ast = emptyClassAST.getEmptyProgramm();
|
Program ast = emptyClassAST.getEmptyProgramm();
|
||||||
String pathToCode = "basicClasses/emptyClass.java";
|
String pathToCode = "basicClasses/emptyClass.java";
|
||||||
testAst(ast, pathToCode);
|
testAst(ast, pathToCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEmptyClassWithConstructor(){
|
||||||
|
Program ast = emptyClassAST.getEmptyProgramm();
|
||||||
|
String pathToCode = "basicClasses/emptyClassWithConstructor.java";
|
||||||
|
testAst(ast, pathToCode);
|
||||||
|
}
|
||||||
public void testAst(Program ast, String pathToCode)
|
public void testAst(Program ast, String pathToCode)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -3,21 +3,24 @@ package ASTs;
|
|||||||
import abstractSyntaxTree.Class.FieldDecl;
|
import abstractSyntaxTree.Class.FieldDecl;
|
||||||
import abstractSyntaxTree.Class.MethodDecl;
|
import abstractSyntaxTree.Class.MethodDecl;
|
||||||
import abstractSyntaxTree.Class.RefType;
|
import abstractSyntaxTree.Class.RefType;
|
||||||
import abstractSyntaxTree.Expression.IExpression;
|
import abstractSyntaxTree.Expression.*;
|
||||||
import abstractSyntaxTree.Expression.InstVarExpression;
|
|
||||||
import abstractSyntaxTree.Parameter.Parameter;
|
import abstractSyntaxTree.Parameter.Parameter;
|
||||||
import abstractSyntaxTree.Parameter.ParameterList;
|
import abstractSyntaxTree.Parameter.ParameterList;
|
||||||
import abstractSyntaxTree.Program;
|
import abstractSyntaxTree.Program;
|
||||||
import abstractSyntaxTree.Statement.BlockStatement;
|
import abstractSyntaxTree.Statement.BlockStatement;
|
||||||
import abstractSyntaxTree.Statement.IStatement;
|
import abstractSyntaxTree.Statement.IStatement;
|
||||||
|
import abstractSyntaxTree.Statement.LocalVarDecl;
|
||||||
import abstractSyntaxTree.Statement.ReturnStatement;
|
import abstractSyntaxTree.Statement.ReturnStatement;
|
||||||
import abstractSyntaxTree.StatementExpression.AssignStatementExpression;
|
import abstractSyntaxTree.StatementExpression.AssignStatementExpression;
|
||||||
import abstractSyntaxTree.StatementExpression.NewStatementExpression;
|
import abstractSyntaxTree.StatementExpression.NewStatementExpression;
|
||||||
|
import abstractSyntaxTree.StatementExpression.ReceivingMethod;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
public class fourClassesAST extends Program {
|
public class fourClassesAST extends Program {
|
||||||
|
|
||||||
public fourClassesAST()
|
public fourClassesAST()
|
||||||
@ -26,55 +29,174 @@ public class fourClassesAST extends Program {
|
|||||||
}
|
}
|
||||||
private static List<RefType> staticClasses() {
|
private static List<RefType> staticClasses() {
|
||||||
|
|
||||||
/////////// Classes ///////////
|
return program;
|
||||||
|
|
||||||
///////// Class: FourClasses /////////
|
|
||||||
|
|
||||||
/////// Fields ///////
|
|
||||||
List<FieldDecl> fieldDeclList = new ArrayList<>();
|
|
||||||
|
|
||||||
ParameterList emptyParameterList = new ParameterList(new ArrayList<>());
|
|
||||||
|
|
||||||
/////// Methods ///////
|
|
||||||
|
|
||||||
// Main //
|
|
||||||
|
|
||||||
List<IStatement> emptyIStatementList = new ArrayList<>();
|
|
||||||
BlockStatement emptyBlockStatement = new BlockStatement(emptyIStatementList, "void");
|
|
||||||
MethodDecl constructor = new MethodDecl("emptyClassWithConstructor", "null", "emptyClassWithConstructor", emptyParameterList, emptyBlockStatement);
|
|
||||||
|
|
||||||
//IStatement
|
|
||||||
List<IStatement> fourClassesMainBlockIstatements = new ArrayList<>();
|
|
||||||
|
|
||||||
IExpression atntiLeft = new InstVarExpression("Test", "t");
|
|
||||||
IExpression atntiRight = new NewStatementExpression();
|
|
||||||
AssignStatementExpression atnti = new AssignStatementExpression(atntiLeft, "=", );
|
|
||||||
|
|
||||||
|
|
||||||
ReturnStatement fcmbiReturn = new ReturnStatement();
|
|
||||||
|
|
||||||
fourClassesMainBlockIstatements.add(atnti);
|
|
||||||
//BlockStatement
|
|
||||||
BlockStatement fourClassesMainBlock = new BlockStatement(fourClassesMainBlockIstatements, "int");
|
|
||||||
|
|
||||||
//Parameter
|
|
||||||
Parameter intI = new Parameter("int", "i");
|
|
||||||
List<Parameter> fourClassesMainParameterList = new ArrayList<>();
|
|
||||||
|
|
||||||
ParameterList fourClassesMainParameters = new ParameterList(fourClassesMainParameterList);
|
|
||||||
|
|
||||||
MethodDecl fourClassesMain = new MethodDecl("fourClasses", "int", "main", fourClassesMainParameters, fourClassesMainBlock);
|
|
||||||
List<MethodDecl> MethodDeclList = new ArrayList<>();
|
|
||||||
|
|
||||||
RefType emptyClass = new RefType("emptyClass", fieldDeclList, MethodDeclList, false);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
List<RefType> classes = new ArrayList<>();
|
|
||||||
classes.add(emptyClass);
|
|
||||||
return classes;
|
|
||||||
}
|
}
|
||||||
}*/
|
|
||||||
|
public RefType Test() {
|
||||||
|
|
||||||
|
|
||||||
|
// Class Test
|
||||||
|
|
||||||
|
//public int x
|
||||||
|
FieldDecl publicIntX = new FieldDecl("int","x");
|
||||||
|
|
||||||
|
//public int y
|
||||||
|
FieldDecl publicIntY = new FieldDecl("int", "y");
|
||||||
|
|
||||||
|
//public Test3 test3
|
||||||
|
FieldDecl Test3test3 = new FieldDecl("Test3", "test3");
|
||||||
|
|
||||||
|
// FieldDeclList
|
||||||
|
List<FieldDecl> fieldDeclList = new ArrayList<>();
|
||||||
|
fieldDeclList.add(publicIntX);
|
||||||
|
fieldDeclList.add(publicIntY);
|
||||||
|
fieldDeclList.add(Test3test3);
|
||||||
|
|
||||||
|
// (int i)
|
||||||
|
List<Parameter> par11 = new ArrayList<>();
|
||||||
|
Parameter inti = new Parameter("int", "i");
|
||||||
|
par11.add(inti);
|
||||||
|
ParameterList par1 = new ParameterList(par11);
|
||||||
|
|
||||||
|
//this.x
|
||||||
|
InstVarExpression thisX = new InstVarExpression("X");
|
||||||
|
|
||||||
|
// i
|
||||||
|
LocalVarIdentifier i = new LocalVarIdentifier("i");
|
||||||
|
|
||||||
|
//this.x = i
|
||||||
|
AssignStatementExpression thisXeqI = new AssignStatementExpression("=", thisX, i);
|
||||||
|
|
||||||
|
//this.test3
|
||||||
|
LocalVarIdentifier thisTest3 = new LocalVarIdentifier("test3");
|
||||||
|
|
||||||
|
// 2
|
||||||
|
IntConstantExpression two = new IntConstantExpression(2);
|
||||||
|
//(i * 2)
|
||||||
|
BinaryExpression iTimes2 = new BinaryExpression("*", i, two);
|
||||||
|
|
||||||
|
//new Test3(i*2)
|
||||||
|
List<IExpression> exprNewTest3 = new ArrayList<>();
|
||||||
|
exprNewTest3.add(iTimes2);
|
||||||
|
NewStatementExpression newTest3 = new NewStatementExpression("Test3",exprNewTest3 );
|
||||||
|
|
||||||
|
//this.test3 = new Test3(i * 2);
|
||||||
|
AssignStatementExpression thisTesteqNewTest3 = new AssignStatementExpression("=", thisTest3, newTest3);
|
||||||
|
|
||||||
|
// {}
|
||||||
|
List<IStatement> ilistTest = new ArrayList<>();
|
||||||
|
ilistTest.add(thisTesteqNewTest3);
|
||||||
|
BlockStatement blockTest = new BlockStatement(ilistTest,"void");
|
||||||
|
|
||||||
|
//public Test (int i)
|
||||||
|
MethodDecl Test = new MethodDecl("Test", "void",
|
||||||
|
"Test", par1, blockTest);
|
||||||
|
|
||||||
|
|
||||||
|
// public Test3 getTest3() {return this.test3;}
|
||||||
|
|
||||||
|
//this.test3
|
||||||
|
//LocalVarIdentifier thisTest3 = new LocalVarIdentifier("test3")
|
||||||
|
|
||||||
|
// return this.test3
|
||||||
|
ReturnStatement returnThisTest3 = new ReturnStatement(thisTest3);
|
||||||
|
|
||||||
|
// {return this.test3}
|
||||||
|
List<IStatement> getTest3Stmts = new ArrayList<>();
|
||||||
|
getTest3Stmts.add(returnThisTest3);
|
||||||
|
BlockStatement blockReturnThisTest3 = new BlockStatement(getTest3Stmts, "Test3");
|
||||||
|
|
||||||
|
ParameterList emptyParamList = new ParameterList(null);
|
||||||
|
MethodDecl getTest3 = new MethodDecl("Test", "Test3",
|
||||||
|
"gettest3", emptyParamList, blockReturnThisTest3);
|
||||||
|
|
||||||
|
|
||||||
|
//this.x
|
||||||
|
//LocalVarIdentifier thisX = new LocalVarIdentifier("x");
|
||||||
|
|
||||||
|
//return this.x
|
||||||
|
ReturnStatement returnThisX = new ReturnStatement(thisX);
|
||||||
|
|
||||||
|
// {return this.x}
|
||||||
|
List<IStatement> stmtsBlockReturnX = new ArrayList<>();
|
||||||
|
stmtsBlockReturnX.add(returnThisX);
|
||||||
|
BlockStatement blockReturnX = new BlockStatement(stmtsBlockReturnX,"int");
|
||||||
|
|
||||||
|
//public int getX() {
|
||||||
|
// return this.x;
|
||||||
|
// }
|
||||||
|
MethodDecl getX = new MethodDecl("Test", "int",
|
||||||
|
"getX", emptyParamList, blockReturnX);
|
||||||
|
|
||||||
|
//MethodDeclList
|
||||||
|
List<MethodDecl> methodDeclList = new ArrayList<>();
|
||||||
|
methodDeclList.add(Test);
|
||||||
|
methodDeclList.add(getTest3);
|
||||||
|
methodDeclList.add(getX);
|
||||||
|
|
||||||
|
// Class Test
|
||||||
|
RefType ClassTest = new RefType("Test", fieldDeclList,
|
||||||
|
methodDeclList, false);
|
||||||
|
|
||||||
|
return ClassTest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RefType FourClasses() {
|
||||||
|
|
||||||
|
LocalVarDecl localVarDecl1 = () -> {
|
||||||
|
String type = Test2;
|
||||||
|
String identifier = "t2";
|
||||||
|
NewStatementExpression expression = () -> {
|
||||||
|
String className = "Test2";
|
||||||
|
List<IExpression> arguments = () -> {
|
||||||
|
InstVarExpression arg0 = () -> {
|
||||||
|
List<SubReceiver> receivers = () -> {
|
||||||
|
ArrayList subReceiverList = new ArrayList<>();
|
||||||
|
SubReceiver subreceiver1 = new SubReceiver();
|
||||||
|
|
||||||
|
subReceiverList.add(subreceiver1);
|
||||||
|
|
||||||
|
return subReceiverList;
|
||||||
|
};
|
||||||
|
List<ReceivingMethod> = () -> {
|
||||||
|
ArrayList receivingMethodList = new ArrayList<>();
|
||||||
|
ReceivingMethod receivingMethod01 = () -> {
|
||||||
|
new ReceivingMethod();
|
||||||
|
}
|
||||||
|
return receivingMethodList
|
||||||
|
};
|
||||||
|
|
||||||
|
return new InstVarExpression();
|
||||||
|
};
|
||||||
|
};
|
||||||
|
return new NewStatementExpression();
|
||||||
|
};
|
||||||
|
|
||||||
|
return new LocalVarDecl();
|
||||||
|
};
|
||||||
|
|
||||||
|
LocalVarIdentifier localVarIdentifier01 = new LocalVarIdentifier("i");
|
||||||
|
List<IExpression> localargumentList01 = new ArrayList<>();
|
||||||
|
localargumentList01.add(localVarIdentifier01);
|
||||||
|
NewStatementExpression newstmtexpr01 = new NewStatementExpression("Test", localargumentList01);
|
||||||
|
LocalVarDecl statement01 = new LocalVarDecl("Test", "t", newstmtexpr01);
|
||||||
|
List<IStatement> statements01 = new ArrayList<>();
|
||||||
|
statements01.add(statement01);
|
||||||
|
BlockStatement blockStatement0 = new BlockStatement(statements01, "int");
|
||||||
|
|
||||||
|
Parameter parameter01 = new Parameter("int", "i");
|
||||||
|
List<Parameter> parameterList0x = new ArrayList<>();
|
||||||
|
parameterList0x.add(parameter01);
|
||||||
|
ParameterList parameterList0 = new ParameterList(parameterList0x);
|
||||||
|
MethodDecl methodDecl0 = new MethodDecl("FourClasses", "int", "main", parameterList0, blockStatement0);
|
||||||
|
|
||||||
|
List<FieldDecl> fieldDeclsList = new ArrayList<>();
|
||||||
|
List<MethodDecl> methodDeclList = new ArrayList<>();
|
||||||
|
methodDeclList.add(methodDecl0);
|
||||||
|
RefType FourClassesClass = new RefType("FourClasses", fieldDeclsList, methodDeclList, true);
|
||||||
|
|
||||||
|
return FourClassesClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
@ -4,18 +4,23 @@ import java.lang.annotation.Annotation;
|
|||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class CompareByteCodeSyntax {
|
public class CompareByteCodeSyntax {
|
||||||
|
|
||||||
public static boolean haveSameBehavior(Class<?> class1, Class<?> class2) {
|
public static boolean haveSameBehavior(Class<?> class1, Class<?> class2) {
|
||||||
|
System.out.println("Comparing class signatures of " + class1.getName() + " and " + class2.getName());
|
||||||
if (!compareClassSignatures(class1, class2)) {
|
if (!compareClassSignatures(class1, class2)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
System.out.println("Comparing methods of " + class1.getName() + " and " + class2.getName());
|
||||||
if (!compareMethods(class1, class2)) {
|
if (!compareMethods(class1, class2)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
System.out.println("Comparing fields of " + class1.getName() + " and " + class2.getName());
|
||||||
if (!compareFields(class1, class2)) {
|
if (!compareFields(class1, class2)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
System.out.println("Comparing annotations of " + class1.getName() + " and " + class2.getName());
|
||||||
if (!compareAnnotations(class1.getAnnotations(), class2.getAnnotations())) {
|
if (!compareAnnotations(class1.getAnnotations(), class2.getAnnotations())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -24,9 +29,11 @@ public class CompareByteCodeSyntax {
|
|||||||
|
|
||||||
public static boolean compareClassSignatures(Class<?> class1, Class<?> class2) {
|
public static boolean compareClassSignatures(Class<?> class1, Class<?> class2) {
|
||||||
if (!Arrays.equals(class1.getInterfaces(), class2.getInterfaces())) {
|
if (!Arrays.equals(class1.getInterfaces(), class2.getInterfaces())) {
|
||||||
|
System.out.println("Interfaces do not match");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (class1.getSuperclass() != class2.getSuperclass()) {
|
if (class1.getSuperclass() != class2.getSuperclass()) {
|
||||||
|
System.out.println("Superclasses do not match");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -36,6 +43,7 @@ public class CompareByteCodeSyntax {
|
|||||||
Method[] methods1 = class1.getDeclaredMethods();
|
Method[] methods1 = class1.getDeclaredMethods();
|
||||||
Method[] methods2 = class2.getDeclaredMethods();
|
Method[] methods2 = class2.getDeclaredMethods();
|
||||||
if (methods1.length != methods2.length) {
|
if (methods1.length != methods2.length) {
|
||||||
|
System.out.println("Method counts do not match");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for (Method method1 : methods1) {
|
for (Method method1 : methods1) {
|
||||||
@ -49,6 +57,7 @@ public class CompareByteCodeSyntax {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!found) {
|
if (!found) {
|
||||||
|
System.out.println("No matching method found for: " + method1.getName());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -57,15 +66,19 @@ public class CompareByteCodeSyntax {
|
|||||||
|
|
||||||
public static boolean compareMethod(Method method1, Method method2) {
|
public static boolean compareMethod(Method method1, Method method2) {
|
||||||
if (!method1.getReturnType().equals(method2.getReturnType())) {
|
if (!method1.getReturnType().equals(method2.getReturnType())) {
|
||||||
|
System.out.println("Return types do not match for methods " + method1.getName() + " and " + method2.getName());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!Arrays.equals(method1.getParameterTypes(), method2.getParameterTypes())) {
|
if (!Arrays.equals(method1.getParameterTypes(), method2.getParameterTypes())) {
|
||||||
|
System.out.println("Parameter types do not match for methods " + method1.getName() + " and " + method2.getName());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!Arrays.equals(method1.getExceptionTypes(), method2.getExceptionTypes())) {
|
if (!Arrays.equals(method1.getExceptionTypes(), method2.getExceptionTypes())) {
|
||||||
|
System.out.println("Exception types do not match for methods " + method1.getName() + " and " + method2.getName());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!compareAnnotations(method1.getAnnotations(), method2.getAnnotations())) {
|
if (!compareAnnotations(method1.getAnnotations(), method2.getAnnotations())) {
|
||||||
|
System.out.println("Annotations do not match for methods " + method1.getName() + " and " + method2.getName());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -75,6 +88,7 @@ public class CompareByteCodeSyntax {
|
|||||||
Field[] fields1 = class1.getDeclaredFields();
|
Field[] fields1 = class1.getDeclaredFields();
|
||||||
Field[] fields2 = class2.getDeclaredFields();
|
Field[] fields2 = class2.getDeclaredFields();
|
||||||
if (fields1.length != fields2.length) {
|
if (fields1.length != fields2.length) {
|
||||||
|
System.out.println("Field counts do not match");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for (Field field1 : fields1) {
|
for (Field field1 : fields1) {
|
||||||
@ -88,6 +102,7 @@ public class CompareByteCodeSyntax {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!found) {
|
if (!found) {
|
||||||
|
System.out.println("No matching field found for: " + field1.getName());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -96,9 +111,11 @@ public class CompareByteCodeSyntax {
|
|||||||
|
|
||||||
public static boolean compareField(Field field1, Field field2) {
|
public static boolean compareField(Field field1, Field field2) {
|
||||||
if (!field1.getType().equals(field2.getType())) {
|
if (!field1.getType().equals(field2.getType())) {
|
||||||
|
System.out.println("Field types do not match for fields " + field1.getName() + " and " + field2.getName());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!compareAnnotations(field1.getAnnotations(), field2.getAnnotations())) {
|
if (!compareAnnotations(field1.getAnnotations(), field2.getAnnotations())) {
|
||||||
|
System.out.println("Annotations do not match for fields " + field1.getName() + " and " + field2.getName());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -106,6 +123,7 @@ public class CompareByteCodeSyntax {
|
|||||||
|
|
||||||
public static boolean compareAnnotations(Annotation[] annotations1, Annotation[] annotations2) {
|
public static boolean compareAnnotations(Annotation[] annotations1, Annotation[] annotations2) {
|
||||||
if (annotations1.length != annotations2.length) {
|
if (annotations1.length != annotations2.length) {
|
||||||
|
System.out.println("Annotation counts do not match");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for (Annotation annotation1 : annotations1) {
|
for (Annotation annotation1 : annotations1) {
|
||||||
@ -117,10 +135,10 @@ public class CompareByteCodeSyntax {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!found) {
|
if (!found) {
|
||||||
|
System.out.println("No matching annotation found for: " + annotation1.annotationType().getName());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,17 +79,19 @@ public class TestAll {
|
|||||||
abstractSyntaxTree.typeCheck();
|
abstractSyntaxTree.typeCheck();
|
||||||
} catch (Exception e){
|
} catch (Exception e){
|
||||||
System.out.println("Le Exception in le type-check");
|
System.out.println("Le Exception in le type-check");
|
||||||
|
//fail();
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
abstractSyntaxTree.codeGen();
|
abstractSyntaxTree.codeGen();
|
||||||
} catch (Exception e){
|
} catch (Exception e){
|
||||||
System.out.println("Le Exception in le codegen");
|
System.out.println("Le Exception in le codegen");
|
||||||
|
fail();
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ClassFileLoader classLoader1 = new ClassFileLoader(correctClassFilePath);
|
ClassFileLoader classLoader1 = new ClassFileLoader(correctClassFilePath);
|
||||||
ClassFileLoader classLoader2 = new ClassFileLoader(className + ".class");
|
ClassFileLoader classLoader2 = new ClassFileLoader(className+ ".class");
|
||||||
|
|
||||||
Class<?> class1 = classLoader1.findClass(className);
|
Class<?> class1 = classLoader1.findClass(className);
|
||||||
Class<?> class2 = classLoader2.findClass(className);
|
Class<?> class2 = classLoader2.findClass(className);
|
||||||
@ -112,5 +114,35 @@ public class TestAll {
|
|||||||
//testByteCodeFromScratch(classPath, javacode, className);
|
//testByteCodeFromScratch(classPath, javacode, className);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFourClasses() {
|
||||||
|
String classPath = "src/test/resources/basicClasses/FourClasses.class";
|
||||||
|
Program ast = emptyClassAST.getEmptyProgramm();
|
||||||
|
String className = "emptyClass";
|
||||||
|
String javacode = "src/test/resources/basicClasses/FourClasses.java";
|
||||||
|
//testByteCodeFromAst(classPath, ast ,className);
|
||||||
|
testByteCodeFromScratch(classPath, javacode, className);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFakultaet() {
|
||||||
|
String classPath = "src/test/resources/basicClasses/Fakultaet.class";
|
||||||
|
Program ast = emptyClassAST.getEmptyProgramm();
|
||||||
|
String className = "Fakultät";
|
||||||
|
String javacode = "src/test/resources/basicClasses/Fakultaet.java";
|
||||||
|
//testByteCodeFromAst(classPath, ast ,className);
|
||||||
|
testByteCodeFromScratch(classPath, javacode, className);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testClassWithMain() {
|
||||||
|
String classPath = "src/test/resources/basicClasses/classWithMain.class";
|
||||||
|
Program ast = emptyClassAST.getEmptyProgramm();
|
||||||
|
String className = "classWithMain";
|
||||||
|
String javacode = "src/test/resources/basicClasses/classWithMain.java";
|
||||||
|
//testByteCodeFromAst(classPath, ast ,className);
|
||||||
|
testByteCodeFromScratch(classPath, javacode, className);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
BIN
src/test/resources/basicClasses/Fakultaet.class
Normal file
BIN
src/test/resources/basicClasses/Fakultaet.class
Normal file
Binary file not shown.
19
src/test/resources/basicClasses/Fakultaet.java
Normal file
19
src/test/resources/basicClasses/Fakultaet.java
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
class Fakultaet {
|
||||||
|
public int fak(int number) {
|
||||||
|
if (number < 0) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
int factorial = 1;
|
||||||
|
int i = 0;
|
||||||
|
while(i < number){
|
||||||
|
factorial = factorial * i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return factorial;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -19,11 +19,11 @@ class Test {
|
|||||||
this.test3 = new Test3(i * 2);
|
this.test3 = new Test3(i * 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Test3 getTest3() {
|
public Test3 getTest3(int not) {
|
||||||
return this.test3;
|
return this.test3;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getX() {
|
public int getX(int not) {
|
||||||
return this.x;
|
return this.x;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -46,11 +46,11 @@ class Test3 {
|
|||||||
this.x = i;
|
this.x = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getX() {
|
public int getX(int not) {
|
||||||
return this.x;
|
return this.x;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getY() {
|
public int getY(int not) {
|
||||||
return this.y;
|
return this.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BIN
src/test/resources/basicClasses/Test.class
Normal file
BIN
src/test/resources/basicClasses/Test.class
Normal file
Binary file not shown.
BIN
src/test/resources/basicClasses/Test2.class
Normal file
BIN
src/test/resources/basicClasses/Test2.class
Normal file
Binary file not shown.
BIN
src/test/resources/basicClasses/Test3.class
Normal file
BIN
src/test/resources/basicClasses/Test3.class
Normal file
Binary file not shown.
BIN
src/test/resources/basicClasses/classWithMain.class
Normal file
BIN
src/test/resources/basicClasses/classWithMain.class
Normal file
Binary file not shown.
6
src/test/resources/basicClasses/classWithMain.java
Normal file
6
src/test/resources/basicClasses/classWithMain.java
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
class classWithMain {
|
||||||
|
public static void main(String[] args){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
BIN
src/test/resources/basicClasses/emptyClass.class
Normal file
BIN
src/test/resources/basicClasses/emptyClass.class
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user