Test update

This commit is contained in:
KingJulian 2024-06-28 11:13:22 +02:00
parent d4f98693d6
commit a3000d0ba1
31 changed files with 348 additions and 79 deletions

BIN
classWithMain.class Normal file

Binary file not shown.

BIN
emptyClass.class Normal file

Binary file not shown.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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() {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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;
}
}
*/

View File

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

View File

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

Binary file not shown.

View 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){
}
}

View File

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

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,6 @@
class classWithMain {
public static void main(String[] args){
}
}

Binary file not shown.