22 Commits

Author SHA1 Message Date
julian
9e323759d6 sort resultsets before printing them to the console to enhance comparability between results 2025-07-16 11:17:53 +02:00
558083166d Fix subtyping of function types 2025-07-15 15:02:15 +02:00
julian
aec2f9a399 adjust FiniteClosure to only use imported types + some necessary ones 2025-07-15 14:06:51 +02:00
pl@gohorb.ba-horb.de
31df7a65f0 deleted: ../resources/bytecode/javFiles/Bug365a.jav
modified:   ../src/main/java/de/dhbwstuttgart/core/JavaTXCompiler.java
	modified:   ../src/test/java/TestComplete.java
2025-07-08 17:44:55 +02:00
pl@gohorb.ba-horb.de
185989ba62 --- a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java
+++ b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java
@@ -73,7 +73,7 @@ public class TYPEStmt implements StatementVisitor {

     @Override
     public void visit(LambdaExpression lambdaExpression) {
-        TypePlaceholder tphRetType = TypePlaceholder.fresh(new NullToken());
+        TypePlaceholder tphRetType = TypePlaceholder.fresh(new NullToken(), -1, false);
         List<RefTypeOrTPHOrWildcardOrGeneric> lambdaParams = lambdaExpression.params.getFormalparalist().stream().map((formalParameter -> formalParameter.getType())).collect(Collectors.toList());
         lambdaParams.add(tphRetType);
         // lambdaParams.add(0,tphRetType);
@@ -635,6 +635,7 @@ public class TYPEStmt implements StatementVisitor {
             params.add(resolver.resolve(new GenericRefType(gtv.getName(), new NullToken())));
         }
         RefTypeOrTPHOrWildcardOrGeneric receiverType;

	modified:   ../src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java
2025-07-08 14:32:05 +02:00
pl@gohorb.ba-horb.de
0eb48ba425 new file: resources/bytecode/javFiles/Bug365a.jav
modified:   src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java
	modified:   src/test/java/TestComplete.java
2025-07-07 13:11:27 +02:00
ceee9a49c4 Merge branch 'issue363' of ssh://gitea.hb.dhbw-stuttgart.de:2222/JavaTX/JavaCompilerCore into issue363 2025-07-02 11:09:44 +02:00
ee64218a5f Fix class files not generating FunN types when using jar file 2025-07-02 11:09:38 +02:00
c50f14a4a3 .gitea/workflows/build_and_test.yml aktualisiert 2025-07-01 14:35:08 +00:00
1f4250ff84 Update project to java 24, update dependencies and change api to Junit 5 2025-07-01 15:55:58 +02:00
ae41c7f19d Fix #366 2025-07-01 15:54:08 +02:00
2416c80c20 Merge branch 'issue363' of ssh://gitea.hb.dhbw-stuttgart.de:2222/JavaTX/JavaCompilerCore into issue363 2025-07-01 13:46:19 +02:00
4cc55c0059 Add test for #366 2025-07-01 13:45:56 +02:00
9434facfa0 Purge generics from lambdas 2025-06-20 15:43:15 +02:00
09a6b9a788 Fix lambda expression captures 2025-06-18 18:31:22 +02:00
8b342c5604 the last commit message was a lie, nothing was fixed. The lambdas does not even respect the arguments it is given? 2025-06-18 16:46:27 +02:00
cdb93b5155 Remove ByteArrayClassLoader and fix #363 2025-06-18 15:26:14 +02:00
b07e848fa2 Remove print statement 2025-06-18 13:24:59 +02:00
313cd20f36 Fix #364 2025-06-18 13:24:06 +02:00
567fcc3b9a rename issues to bug 2025-06-18 12:59:00 +02:00
d9936e7197 add issue 364 2025-06-18 12:55:50 +02:00
8f194b3102 add issue 363 2025-06-18 12:48:55 +02:00
46 changed files with 1237 additions and 1000 deletions

View File

@@ -15,7 +15,7 @@ jobs:
uses: actions/setup-java@v4 uses: actions/setup-java@v4
with: with:
distribution: 'temurin' distribution: 'temurin'
java-version: '23' java-version: '24'
cache: 'maven' cache: 'maven'
- name: Compile project - name: Compile project
run: | run: |

28
pom.xml
View File

@@ -12,37 +12,37 @@ http://maven.apache.org/maven-v4_0_0.xsd">
<url>http://maven.apache.org</url> <url>http://maven.apache.org</url>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>junit</groupId> <groupId>org.junit.jupiter</groupId>
<artifactId>junit</artifactId> <artifactId>junit-jupiter-api</artifactId>
<version>4.13.2</version> <version>5.13.2</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.antlr/antlr4 --> <!-- https://mvnrepository.com/artifact/org.antlr/antlr4 -->
<dependency> <dependency>
<groupId>org.antlr</groupId> <groupId>org.antlr</groupId>
<artifactId>antlr4</artifactId> <artifactId>antlr4</artifactId>
<version>4.11.1</version> <version>4.13.2</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>commons-io</groupId> <groupId>commons-io</groupId>
<artifactId>commons-io</artifactId> <artifactId>commons-io</artifactId>
<version>2.16.1</version> <version>2.19.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.github.classgraph</groupId> <groupId>io.github.classgraph</groupId>
<artifactId>classgraph</artifactId> <artifactId>classgraph</artifactId>
<version>4.8.172</version> <version>4.8.180</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.google.guava</groupId> <groupId>com.google.guava</groupId>
<artifactId>guava</artifactId> <artifactId>guava</artifactId>
<version>33.2.0-jre</version> <version>33.4.8-jre</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.ow2.asm/asm --> <!-- https://mvnrepository.com/artifact/org.ow2.asm/asm -->
<dependency> <dependency>
<groupId>org.ow2.asm</groupId> <groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId> <artifactId>asm</artifactId>
<version>9.5</version> <version>9.8</version>
</dependency> </dependency>
</dependencies> </dependencies>
@@ -51,17 +51,17 @@ http://maven.apache.org/maven-v4_0_0.xsd">
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version> <version>3.14.0</version>
<configuration> <configuration>
<compilerArgs>--enable-preview</compilerArgs> <compilerArgs>--enable-preview</compilerArgs>
<source>23</source> <source>24</source>
<target>23</target> <target>24</target>
</configuration> </configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
<version>3.1.0</version> <version>3.5.3</version>
<configuration> <configuration>
<redirectTestOutputToFile>true</redirectTestOutputToFile> <redirectTestOutputToFile>true</redirectTestOutputToFile>
<reportsDirectory>${project.build.directory}/test-reports</reportsDirectory> <reportsDirectory>${project.build.directory}/test-reports</reportsDirectory>
@@ -77,7 +77,7 @@ http://maven.apache.org/maven-v4_0_0.xsd">
<plugin> <plugin>
<groupId>org.antlr</groupId> <groupId>org.antlr</groupId>
<artifactId>antlr4-maven-plugin</artifactId> <artifactId>antlr4-maven-plugin</artifactId>
<version>4.11.1</version> <version>4.13.2</version>
<executions> <executions>
<execution> <execution>
<id>antlr</id> <id>antlr</id>
@@ -90,7 +90,7 @@ http://maven.apache.org/maven-v4_0_0.xsd">
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId> <artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version> <version>3.4.2</version>
<configuration> <configuration>
<archive> <archive>
<manifest> <manifest>

View File

@@ -0,0 +1,22 @@
import java.lang.String;
public class Bug363 {
uncurry (f){
return x -> f.apply(x);
}
uncurry (f){
return (x, y) -> f.apply(x).apply(y);
}
uncurry (f){
return (x, y, z) -> f.apply(x).apply(y).apply(z);
}
public test(){
var f = x -> y -> z -> x + y + z;
var g = uncurry(f);
return g.apply("A", "B", "C"); // Outputs: 6
}
}

View File

@@ -0,0 +1,8 @@
import java.lang.String;
public class Bug364{
public main(){
var f = x -> y -> z -> x + y + z;
return f.apply("A").apply("B").apply("C");
}
}

View File

@@ -0,0 +1,20 @@
import java.lang.String;
public class Bug365{
swap(f){
return x -> y -> f.apply(y).apply(x);
}
swap(f){
return x -> y -> z -> f.apply(z).apply(y).apply(x);
}
public ex1() {
var func = x -> y -> z -> x + y + z;
return func.apply("A").apply("B").apply("C");
}
public ex2() {
var func = x -> y -> z -> x + y + z;
return swap(func).apply("A").apply("B").apply("C");
}
}

View File

@@ -0,0 +1,12 @@
import java.lang.Integer;
public class Bug366 {
public static lambda() {
return (a, b) -> a + b;
}
public static test() {
var l = lambda();
return l.apply(10, 20);
}
}

View File

@@ -13,6 +13,7 @@ import org.objectweb.asm.*;
import java.lang.invoke.*; import java.lang.invoke.*;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
import static org.objectweb.asm.Opcodes.*; import static org.objectweb.asm.Opcodes.*;
import static de.dhbwstuttgart.target.tree.expression.TargetBinaryOp.*; import static de.dhbwstuttgart.target.tree.expression.TargetBinaryOp.*;
@@ -84,14 +85,16 @@ public class Codegen {
int localCounter; int localCounter;
MethodVisitor mv; MethodVisitor mv;
TargetType returnType; TargetType returnType;
boolean isStatic = false;
Stack<BreakEnv> breakStack = new Stack<>(); Stack<BreakEnv> breakStack = new Stack<>();
Stack<Integer> switchResultValue = new Stack<>(); Stack<Integer> switchResultValue = new Stack<>();
State(TargetType returnType, MethodVisitor mv, int localCounter) { State(TargetType returnType, MethodVisitor mv, int localCounter, boolean isStatic) {
this.returnType = returnType; this.returnType = returnType;
this.mv = mv; this.mv = mv;
this.localCounter = localCounter; this.localCounter = localCounter;
this.isStatic = isStatic;
} }
void enterScope() { void enterScope() {
@@ -757,6 +760,16 @@ public class Codegen {
} }
} }
private static TargetType removeGenerics(TargetType param) {
return switch (param) {
case null -> null;
case TargetFunNType funNType -> new TargetFunNType(funNType.name(), funNType.funNParams(), List.of(), funNType.returnArguments());
case TargetRefType refType -> new TargetRefType(refType.name());
case TargetGenericType targetGenericType -> TargetType.Object;
default -> param;
};
}
private void generateLambdaExpression(State state, TargetLambdaExpression lambda) { private void generateLambdaExpression(State state, TargetLambdaExpression lambda) {
var mv = state.mv; var mv = state.mv;
@@ -768,7 +781,8 @@ public class Codegen {
var parameters = new ArrayList<>(lambda.captures()); var parameters = new ArrayList<>(lambda.captures());
parameters.addAll(signature.parameters()); parameters.addAll(signature.parameters());
var implSignature = new TargetMethod.Signature(Set.of(), parameters, lambda.signature().returnType()); parameters = parameters.stream().map(param -> param.withType(removeGenerics(param.pattern().type()))).collect(Collectors.toCollection(ArrayList::new));
var implSignature = new TargetMethod.Signature(Set.of(), parameters, removeGenerics(lambda.signature().returnType()));
TargetMethod impl; TargetMethod impl;
if (lambdas.containsKey(lambda)) { if (lambdas.containsKey(lambda)) {
@@ -776,21 +790,22 @@ public class Codegen {
} else { } else {
var name = "lambda$" + lambdaCounter++; var name = "lambda$" + lambdaCounter++;
impl = new TargetMethod(0, name, lambda.block(), implSignature, null); impl = new TargetMethod(state.isStatic ? ACC_STATIC : 0, name, lambda.block(), implSignature, null);
generateMethod(impl); generateMethod(impl, state);
lambdas.put(lambda, impl); lambdas.put(lambda, impl);
} }
var mt = MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class, MethodType.class, MethodHandle.class, MethodType.class); var mt = MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class, MethodType.class, MethodHandle.class, MethodType.class);
var bootstrap = new Handle(H_INVOKESTATIC, "java/lang/invoke/LambdaMetafactory", "metafactory", mt.toMethodDescriptorString(), false); var bootstrap = new Handle(H_INVOKESTATIC, "java/lang/invoke/LambdaMetafactory", "metafactory", mt.toMethodDescriptorString(), false);
var handle = new Handle(H_INVOKEVIRTUAL, clazz.getName(), impl.name(), implSignature.getDescriptor(), false); var handle = new Handle(state.isStatic ? H_INVOKESTATIC : H_INVOKEVIRTUAL, clazz.getName(), impl.name(), implSignature.getDescriptor(), false);
var params = new ArrayList<TargetType>(); var params = new ArrayList<TargetType>();
params.add(new TargetRefType(clazz.qualifiedName().getClassName())); if(!state.isStatic) params.add(new TargetRefType(clazz.qualifiedName().getClassName()));
params.addAll(lambda.captures().stream().map(mp -> mp.pattern().type()).toList()); params.addAll(lambda.captures().stream().map(mp -> mp.pattern().type()).toList());
mv.visitVarInsn(ALOAD, 0); if (!state.isStatic)
mv.visitVarInsn(ALOAD, 0);
for (var index = 0; index < lambda.captures().size(); index++) { for (var index = 0; index < lambda.captures().size(); index++) {
var capture = lambda.captures().get(index); var capture = lambda.captures().get(index);
var pattern = (TargetTypePattern) capture.pattern(); var pattern = (TargetTypePattern) capture.pattern();
@@ -1518,7 +1533,7 @@ public class Codegen {
MethodVisitor mv = cw.visitMethod(ACC_PUBLIC | ACC_STATIC, "<clinit>", "()V", null, null); MethodVisitor mv = cw.visitMethod(ACC_PUBLIC | ACC_STATIC, "<clinit>", "()V", null, null);
mv.visitCode(); mv.visitCode();
var state = new State(null, mv, 0); var state = new State(null, mv, 0, true);
generate(state, constructor.block()); generate(state, constructor.block());
mv.visitInsn(RETURN); mv.visitInsn(RETURN);
@@ -1532,7 +1547,7 @@ public class Codegen {
mv.visitAttribute(new JavaTXSignatureAttribute(constructor.getTXSignature())); mv.visitAttribute(new JavaTXSignatureAttribute(constructor.getTXSignature()));
mv.visitCode(); mv.visitCode();
var state = new State(null, mv, 1); var state = new State(null, mv, 1, false);
for (var param : constructor.parameters()) { for (var param : constructor.parameters()) {
var pattern = param.pattern(); var pattern = param.pattern();
if (pattern instanceof TargetTypePattern tp) if (pattern instanceof TargetTypePattern tp)
@@ -1578,8 +1593,11 @@ public class Codegen {
} }
} }
} }
private void generateMethod(TargetMethod method) { private void generateMethod(TargetMethod method) {
generateMethod(method, null);
}
private void generateMethod(TargetMethod method, State parent) {
var access = method.access(); var access = method.access();
if (method.block() == null) if (method.block() == null)
access |= ACC_ABSTRACT; access |= ACC_ABSTRACT;
@@ -1594,7 +1612,10 @@ public class Codegen {
if (method.block() != null) { if (method.block() != null) {
mv.visitCode(); mv.visitCode();
var state = new State(method.signature().returnType(), mv, method.isStatic() ? 0 : 1); var state = new State(method.signature().returnType(), mv, method.isStatic() ? 0 : 1, method.isStatic());
if (parent != null) {
state.scope.parent = parent.scope;
}
var offset = 1; var offset = 1;
for (var param : method.signature().parameters()) { for (var param : method.signature().parameters()) {
state.createVariable(param.pattern().name(), param.pattern().type()); state.createVariable(param.pattern().name(), param.pattern().type());
@@ -1604,6 +1625,8 @@ public class Codegen {
bindLocalVariables(state, cp, offset); bindLocalVariables(state, cp, offset);
offset++; offset++;
} }
//if (parent != null) System.out.println("parent: " + parent.scope.locals.keySet());
//System.out.println(state.scope.locals.keySet());
generate(state, method.block()); generate(state, method.block());
if (method.signature().returnType() == null) if (method.signature().returnType() == null)
mv.visitInsn(RETURN); mv.visitInsn(RETURN);
@@ -1710,7 +1733,7 @@ public class Codegen {
// Generate wrapper method // Generate wrapper method
var mv = cw2.visitMethod(ACC_PUBLIC, toMethod.name, toDescriptor, null, null); var mv = cw2.visitMethod(ACC_PUBLIC, toMethod.name, toDescriptor, null, null);
var state = new State(null, mv, 0); var state = new State(null, mv, 0, false);
mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(GETFIELD, className, "wrapped", pair.from.toDescriptor()); mv.visitFieldInsn(GETFIELD, className, "wrapped", pair.from.toDescriptor());
@@ -1742,7 +1765,7 @@ public class Codegen {
converter.classLoader.findClass(className); converter.classLoader.findClass(className);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
try { try {
converter.classLoader.loadClass(bytes); converter.classLoader.loadClass(className, bytes);
} catch (LinkageError ignored) {} } catch (LinkageError ignored) {}
} }
} }

View File

@@ -39,6 +39,10 @@ public class FunNGenerator {
public final List<TargetType> inParams; public final List<TargetType> inParams;
public final List<TargetType> realParams; public final List<TargetType> realParams;
public GenericParameters(TargetFunNType funNType) {
this(funNType.funNParams(), funNType.returnArguments());
}
public GenericParameters(List<TargetType> params, int numReturns) { public GenericParameters(List<TargetType> params, int numReturns) {
this.realParams = params; this.realParams = params;
this.inParams = flattenTypeParams(params); this.inParams = flattenTypeParams(params);

View File

@@ -393,7 +393,12 @@ public class JavaTXCompiler {
logFile.write(ASTTypePrinter.print(sf)); logFile.write(ASTTypePrinter.print(sf));
System.out.println(ASTTypePrinter.print(sf)); System.out.println(ASTTypePrinter.print(sf));
logFile.flush(); logFile.flush();
System.out.println("Unify nach Oder-Constraints-Anpassung:" + unifyCons.toString()); List<UnifyPair> andConstraintsSorted = unifyCons.getUndConstraints().stream()
.sorted(Comparator.comparing(UnifyPair::getPairOp).thenComparing(UnifyPair::getLhsType, Comparator.comparing(UnifyType::getName)))
.collect(Collectors.toList());
System.out.println(andConstraintsSorted);
Set<PlaceholderType> varianceTPHold; Set<PlaceholderType> varianceTPHold;
Set<PlaceholderType> varianceTPH = new HashSet<>(); Set<PlaceholderType> varianceTPH = new HashSet<>();
varianceTPH = varianceInheritanceConstraintSet(unifyCons); varianceTPH = varianceInheritanceConstraintSet(unifyCons);
@@ -416,7 +421,14 @@ public class JavaTXCompiler {
UnifyResultListenerImpl li = new UnifyResultListenerImpl(); UnifyResultListenerImpl li = new UnifyResultListenerImpl();
urm.addUnifyResultListener(li); urm.addUnifyResultListener(li);
unify.unifyParallel(unifyCons.getUndConstraints(), oderConstraints, finiteClosure, logFile, log, urm, usedTasks); unify.unifyParallel(unifyCons.getUndConstraints(), oderConstraints, finiteClosure, logFile, log, urm, usedTasks);
System.out.println("RESULT Final: " + li.getResults()); //System.out.println("RESULT Final: " + li.getResults());
var finalResults = li.getResults().stream().sorted().toList();
int i = 0;
System.out.println("RESULT Final: ");
for (var result : finalResults){
System.out.println("Result: " + i++);
System.out.println(result.getSortedResults());
}
System.out.println("Constraints for Generated Generics: " + " ???"); System.out.println("Constraints for Generated Generics: " + " ???");
logFile.write("RES_FINAL: " + li.getResults().toString() + "\n"); logFile.write("RES_FINAL: " + li.getResults().toString() + "\n");
logFile.flush(); logFile.flush();
@@ -631,12 +643,12 @@ public class JavaTXCompiler {
var codegen = new Codegen(converter.convert(clazz), this, converter); var codegen = new Codegen(converter.convert(clazz), this, converter);
var code = codegen.generate(); var code = codegen.generate();
generatedClasses.put(clazz.getClassName(), code); generatedClasses.put(clazz.getClassName(), code);
converter.auxiliaries.forEach((name, source) -> {
generatedClasses.put(new JavaClassName(name), source);
});
} }
generatedGenerics.put(sf, converter.javaGenerics()); generatedGenerics.put(sf, converter.javaGenerics());
converter.generateFunNTypes(); converter.generateFunNTypes();
converter.auxiliaries.forEach((name, source) -> {
generatedClasses.put(new JavaClassName(name), source);
});
return generatedClasses; return generatedClasses;
} }

View File

@@ -1,13 +0,0 @@
package de.dhbwstuttgart.environment;
public class ByteArrayClassLoader extends ClassLoader implements IByteArrayClassLoader {
@Override
public Class _defineClass(String name, byte[] code, int i, int length) throws ClassFormatError {
return defineClass(name, code, i, length);
}
@Override
public Class<?> findClass(String name) throws ClassNotFoundException {
return super.findClass(name);
}
}

View File

@@ -6,18 +6,22 @@ import java.nio.file.Path;
public interface IByteArrayClassLoader { public interface IByteArrayClassLoader {
Class loadClass(String path) throws ClassNotFoundException; Class<?> loadClass(String path) throws ClassNotFoundException;
default Class loadClass(byte[] code) { default Class<?> loadClass(byte[] code) {
return this._defineClass(null, code, 0, code.length); return this.loadClass(null, code);
} }
default Class loadClass(Path path) throws IOException { default Class<?> loadClass(String name, byte[] code) {
return this._defineClass(name, code, 0, code.length);
}
default Class<?> loadClass(Path path) throws IOException {
var code = Files.readAllBytes(path); var code = Files.readAllBytes(path);
return this._defineClass(null, code, 0, code.length); return this._defineClass(null, code, 0, code.length);
} }
public Class<?> findClass(String name) throws ClassNotFoundException; public Class<?> findClass(String name) throws ClassNotFoundException;
Class _defineClass(String name, byte[] code, int i, int length) throws ClassFormatError; Class<?> _defineClass(String name, byte[] code, int i, int length) throws ClassFormatError;
} }

View File

@@ -1099,9 +1099,9 @@ public class StatementGenerator {
block = lambdaGenerator.convert(expression.lambdaBody().block(), true); block = lambdaGenerator.convert(expression.lambdaBody().block(), true);
} }
List<RefTypeOrTPHOrWildcardOrGeneric> funNParams = new ArrayList<>(); List<RefTypeOrTPHOrWildcardOrGeneric> funNParams = new ArrayList<>();
funNParams.add(TypePlaceholder.fresh(expression.getStart()));// ret-Type funNParams.add(TypePlaceholder.fresh(expression.getStart(), -1, false));// ret-Type
params.getFormalparalist().forEach(formalParameter -> // Für jeden Parameter einen TPH anfügen: params.getFormalparalist().forEach(formalParameter -> // Für jeden Parameter einen TPH anfügen:
funNParams.add(TypePlaceholder.fresh(expression.getStart()))); funNParams.add(TypePlaceholder.fresh(expression.getStart(), 1, false)));
RefTypeOrTPHOrWildcardOrGeneric lambdaType = TypePlaceholder.fresh(expression.getStart()); RefTypeOrTPHOrWildcardOrGeneric lambdaType = TypePlaceholder.fresh(expression.getStart());
// RefType lambdaType = new // RefType lambdaType = new
// RefType(reg.getName("Fun"+params.getFormalparalist().size()), // RefType(reg.getName("Fun"+params.getFormalparalist().size()),

View File

@@ -7,7 +7,7 @@ import java.util.*;
/** /**
* Speichert die Klassen f<>r einen bestimmten Projektscope * Speichert die Klassen f<>r einen bestimmten Projektscope
*/ */
public class JavaClassRegistry { public class JavaClassRegistry{
final Map<JavaClassName, Integer> existingClasses = new HashMap<>(); final Map<JavaClassName, Integer> existingClasses = new HashMap<>();
public JavaClassRegistry(Map<String, Integer> initialNames) { public JavaClassRegistry(Map<String, Integer> initialNames) {
@@ -22,6 +22,10 @@ public class JavaClassRegistry {
} }
} }
public Set<JavaClassName> getAllClassNames(){
return existingClasses.keySet();
}
public void addName(String className, int numberOfGenerics) { public void addName(String className, int numberOfGenerics) {
existingClasses.put(new JavaClassName(className), numberOfGenerics); existingClasses.put(new JavaClassName(className), numberOfGenerics);
} }

View File

@@ -2,7 +2,6 @@ package de.dhbwstuttgart.target.generate;
import de.dhbwstuttgart.bytecode.FunNGenerator; import de.dhbwstuttgart.bytecode.FunNGenerator;
import de.dhbwstuttgart.core.JavaTXCompiler; import de.dhbwstuttgart.core.JavaTXCompiler;
import de.dhbwstuttgart.environment.ByteArrayClassLoader;
import de.dhbwstuttgart.environment.IByteArrayClassLoader; import de.dhbwstuttgart.environment.IByteArrayClassLoader;
import de.dhbwstuttgart.exceptions.DebugException; import de.dhbwstuttgart.exceptions.DebugException;
import de.dhbwstuttgart.parser.NullToken; import de.dhbwstuttgart.parser.NullToken;
@@ -66,11 +65,11 @@ public class ASTToTargetAST {
public IByteArrayClassLoader classLoader; public IByteArrayClassLoader classLoader;
protected SourceFile sourceFile; protected SourceFile sourceFile;
public ASTToTargetAST(List<ResultSet> resultSets) { public ASTToTargetAST(List<ResultSet> resultSets, IByteArrayClassLoader classLoader) {
this(null, resultSets); this(null, resultSets, classLoader);
} }
public ASTToTargetAST(JavaTXCompiler compiler, List<ResultSet> resultSets) { public ASTToTargetAST(JavaTXCompiler compiler, List<ResultSet> resultSets, IByteArrayClassLoader classLoader) {
this(compiler, resultSets, null, new ByteArrayClassLoader()); this(compiler, resultSets, null, classLoader);
} }
public ASTToTargetAST(JavaTXCompiler compiler, List<ResultSet> resultSets, SourceFile sourceFile, IByteArrayClassLoader classLoader) { public ASTToTargetAST(JavaTXCompiler compiler, List<ResultSet> resultSets, SourceFile sourceFile, IByteArrayClassLoader classLoader) {
@@ -781,7 +780,15 @@ public class ASTToTargetAST {
return TargetFunNType.fromParams(params, filteredParams, gep.getReturnType() != null ? 1 : 0); return TargetFunNType.fromParams(params, filteredParams, gep.getReturnType() != null ? 1 : 0);
} }
private FunNGenerator.GenericParameters convertToParameters(TargetFunNType input) {
return null;
}
private boolean isSubtype(TargetType test, TargetType other) { private boolean isSubtype(TargetType test, TargetType other) {
if (other.equals(TargetType.Object)) return true;
if (test instanceof TargetFunNType tfun && other instanceof TargetFunNType ofun)
return isSubtype(new FunNGenerator.GenericParameters(tfun), new FunNGenerator.GenericParameters(ofun));
var testClass = compiler.getClass(new JavaClassName(test.name())); var testClass = compiler.getClass(new JavaClassName(test.name()));
var otherClass = compiler.getClass(new JavaClassName(other.name())); var otherClass = compiler.getClass(new JavaClassName(other.name()));
if (testClass == null) return false; if (testClass == null) return false;
@@ -818,14 +825,6 @@ public class ASTToTargetAST {
.toList(); .toList();
var code = FunNGenerator.generateSpecializedBytecode(gep, superInterfaces); var code = FunNGenerator.generateSpecializedBytecode(gep, superInterfaces);
try {
classLoader.findClass(entry.getKey());
} catch (ClassNotFoundException e) {
try {
classLoader.loadClass(code);
} catch (LinkageError ignored) {}
}
auxiliaries.put(entry.getKey(), code); auxiliaries.put(entry.getKey(), code);
} }
} }
@@ -856,7 +855,7 @@ public class ASTToTargetAST {
classLoader.findClass(superClassName); classLoader.findClass(superClassName);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
try { try {
classLoader.loadClass(code); classLoader.loadClass(superClassName, code);
} catch (LinkageError ignored) {} } catch (LinkageError ignored) {}
} }
auxiliaries.put(superClassName, code); auxiliaries.put(superClassName, code);

View File

@@ -14,6 +14,7 @@ import de.dhbwstuttgart.target.tree.expression.*;
import de.dhbwstuttgart.target.tree.type.*; import de.dhbwstuttgart.target.tree.type.*;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.sql.Array;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.StreamSupport; import java.util.stream.StreamSupport;
@@ -32,54 +33,71 @@ public class StatementToTargetExpression implements ASTVisitor {
throw new NotImplementedException(); throw new NotImplementedException();
} }
private class LambdaCaptureFinder extends TracingStatementVisitor {
// TODO The same mechanism is implemented in Codegen, maybe use it from there?
final Stack<Set<String>> localVariables = new Stack<>();
private final List<MethodParameter> parameters;
private final List<MethodParameter> captures;
LambdaCaptureFinder(List<MethodParameter> parameters, List<MethodParameter> captures) {
localVariables.push(new HashSet<>());
this.parameters = parameters;
this.captures = captures;
}
boolean hasLocalVar(String name) {
for (var localVariables : this.localVariables) {
if (localVariables.contains(name))
return true;
}
return false;
}
@Override
public void visit(Block block) {
localVariables.push(new HashSet<>());
super.visit(block);
localVariables.pop();
}
@Override
public void visit(LocalVar localVar) {
super.visit(localVar);
var capture = new MethodParameter(new TargetTypePattern(converter.convert(localVar.getType()), localVar.name));
if (!hasLocalVar(localVar.name) && !parameters.contains(capture) && !captures.contains(capture))
captures.add(capture);
}
@Override
public void visit(LocalVarDecl varDecl) {
var localVariables = this.localVariables.peek();
localVariables.add(varDecl.getName());
}
@Override
public void visit(LambdaExpression lambda) {
var newCaptures = new ArrayList<MethodParameter>();
var captureFinder = new LambdaCaptureFinder(createParameters(lambda), newCaptures);
lambda.methodBody.accept(captureFinder);
newCaptures.removeAll(parameters);
captures.addAll(newCaptures);
}
}
private List<MethodParameter> createParameters(LambdaExpression lambda) {
return StreamSupport.stream(lambda.params.spliterator(), false)
.map(p -> (FormalParameter) p)
.map(p -> new MethodParameter(new TargetTypePattern(converter.convert(p.getType()), p.getName())))
.toList();
}
@Override @Override
public void visit(LambdaExpression lambdaExpression) { public void visit(LambdaExpression lambdaExpression) {
var parameters = StreamSupport.stream(lambdaExpression.params.spliterator(), false) var parameters = createParameters(lambdaExpression);
.map(p -> (FormalParameter) p)
.map(p -> new MethodParameter(new TargetTypePattern(converter.convert(p.getType()), p.getName())))
.toList();
List<MethodParameter> captures = new ArrayList<>(); List<MethodParameter> captures = new ArrayList<>();
lambdaExpression.methodBody.accept(new TracingStatementVisitor() { var visitor = new LambdaCaptureFinder(parameters, captures);
// TODO The same mechanism is implemented in Codegen, maybe use it from there? lambdaExpression.methodBody.accept(visitor);
final Stack<Set<String>> localVariables = new Stack<>();
{
localVariables.push(new HashSet<>());
}
boolean hasLocalVar(String name) {
for (var localVariables : this.localVariables) {
if (localVariables.contains(name))
return true;
}
return false;
}
@Override
public void visit(Block block) {
localVariables.push(new HashSet<>());
super.visit(block);
localVariables.pop();
}
@Override
public void visit(LocalVar localVar) {
super.visit(localVar);
var capture = new MethodParameter(new TargetTypePattern(converter.convert(localVar.getType()), localVar.name));
if (!hasLocalVar(localVar.name) && !parameters.contains(capture) && !captures.contains(capture))
captures.add(capture);
}
@Override
public void visit(LocalVarDecl varDecl) {
var localVariables = this.localVariables.peek();
localVariables.add(varDecl.getName());
}
@Override
public void visit(LambdaExpression lambda) {
} // Don't look at lambda expressions
});
TargetMethod.Signature signature = new TargetMethod.Signature(Set.of(), parameters, converter.convert(lambdaExpression.getReturnType()));; TargetMethod.Signature signature = new TargetMethod.Signature(Set.of(), parameters, converter.convert(lambdaExpression.getReturnType()));;
var tpe = converter.convert(lambdaExpression.getType()); var tpe = converter.convert(lambdaExpression.getType());

View File

@@ -6,7 +6,7 @@ import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
public class Constraint<A> extends HashSet<A> { public class Constraint<A> extends HashSet<A> implements Comparable<Constraint<A>> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private Boolean isInherited = false;//wird beides nur für die Method-Constraints benoetigt private Boolean isInherited = false;//wird beides nur für die Method-Constraints benoetigt
private Boolean isImplemented = false; private Boolean isImplemented = false;
@@ -73,5 +73,9 @@ public class Constraint<A> extends HashSet<A> {
public String toStringBase() { public String toStringBase() {
return super.toString(); return super.toString();
} }
@Override
public int compareTo(Constraint<A> o) {
return this.toString().compareTo(o.toString());
}
} }

View File

@@ -5,7 +5,7 @@ import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPHOrWildcardOrGeneric;
/** /**
* Paare, welche das Unifikationsergebnis darstellen * Paare, welche das Unifikationsergebnis darstellen
*/ */
public abstract class ResultPair<A extends RefTypeOrTPHOrWildcardOrGeneric,B extends RefTypeOrTPHOrWildcardOrGeneric> { public abstract class ResultPair<A extends RefTypeOrTPHOrWildcardOrGeneric, B extends RefTypeOrTPHOrWildcardOrGeneric> implements Comparable<ResultPair<A,B>> {
private final A left; private final A left;
private final B right; private final B right;
@@ -58,5 +58,14 @@ public abstract class ResultPair<A extends RefTypeOrTPHOrWildcardOrGeneric,B ext
return false; return false;
return true; return true;
} }
@Override
public int compareTo(ResultPair<A, B> o) {
if (o == null) {
return 1; // this is greater than null
}
return o.left.toString().compareTo(this.left.toString());
}
} }

View File

@@ -1,6 +1,8 @@
package de.dhbwstuttgart.typeinference.result; package de.dhbwstuttgart.typeinference.result;
import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Set; import java.util.Set;
import de.dhbwstuttgart.exceptions.NotImplementedException; import de.dhbwstuttgart.exceptions.NotImplementedException;
@@ -12,7 +14,7 @@ import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType;
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
public class ResultSet { public class ResultSet implements Comparable<ResultSet>{
public final Set<ResultPair> results; public final Set<ResultPair> results;
public Set<ResultPair<TypePlaceholder, TypePlaceholder>> genIns; public Set<ResultPair<TypePlaceholder, TypePlaceholder>> genIns;
@@ -22,6 +24,10 @@ public class ResultSet {
this.genIns = new HashSet<>(); this.genIns = new HashSet<>();
results.forEach(x -> { if (x instanceof PairTPHsmallerTPH) { this.genIns.add(x);}} ); results.forEach(x -> { if (x instanceof PairTPHsmallerTPH) { this.genIns.add(x);}} );
} }
public List<ResultPair> getSortedResults() {
return results.stream().sorted().toList();
}
public boolean contains(ResultPair toCheck) { public boolean contains(ResultPair toCheck) {
return this.results.contains(toCheck); return this.results.contains(toCheck);
@@ -63,6 +69,21 @@ public class ResultSet {
public int hashCode() { public int hashCode() {
return results.hashCode(); return results.hashCode();
} }
@Override
public int compareTo(ResultSet o) {
List<ResultPair> thisSorted = this.getSortedResults();
List<ResultPair> otherSorted = o.getSortedResults();
int sizeCompare = Integer.compare(thisSorted.size(), otherSorted.size());
if (sizeCompare != 0) return sizeCompare;
for (int i = 0; i < thisSorted.size(); i++) {
int cmp = thisSorted.get(i).compareTo(otherSorted.get(i));
if (cmp != 0) return cmp;
}
return 0;
}
} }
class Resolver implements ResultSetVisitor { class Resolver implements ResultSetVisitor {

View File

@@ -73,7 +73,7 @@ public class TYPEStmt implements StatementVisitor {
@Override @Override
public void visit(LambdaExpression lambdaExpression) { public void visit(LambdaExpression lambdaExpression) {
TypePlaceholder tphRetType = TypePlaceholder.fresh(new NullToken()); TypePlaceholder tphRetType = TypePlaceholder.fresh(new NullToken(), -1, false);
List<RefTypeOrTPHOrWildcardOrGeneric> lambdaParams = lambdaExpression.params.getFormalparalist().stream().map((formalParameter -> formalParameter.getType())).collect(Collectors.toList()); List<RefTypeOrTPHOrWildcardOrGeneric> lambdaParams = lambdaExpression.params.getFormalparalist().stream().map((formalParameter -> formalParameter.getType())).collect(Collectors.toList());
lambdaParams.add(tphRetType); lambdaParams.add(tphRetType);
// lambdaParams.add(0,tphRetType); // lambdaParams.add(0,tphRetType);
@@ -635,6 +635,7 @@ public class TYPEStmt implements StatementVisitor {
params.add(resolver.resolve(new GenericRefType(gtv.getName(), new NullToken()))); params.add(resolver.resolve(new GenericRefType(gtv.getName(), new NullToken())));
} }
RefTypeOrTPHOrWildcardOrGeneric receiverType; RefTypeOrTPHOrWildcardOrGeneric receiverType;
if (receiver instanceof FunNClass) { if (receiver instanceof FunNClass) {
receiverType = new RefType(new JavaClassName(receiver.getClassName().toString() + "$$"), params, new NullToken()); // new FunN(params); receiverType = new RefType(new JavaClassName(receiver.getClassName().toString() + "$$"), params, new NullToken()); // new FunN(params);
} else { } else {

View File

@@ -53,7 +53,7 @@ class Node<T> {
addDescendant(descendant); addDescendant(descendant);
} }
} }
/** /**
* Adds a directed edge from the predecessor to this node (predecessor -> this) * Adds a directed edge from the predecessor to this node (predecessor -> this)
*/ */
@@ -73,7 +73,7 @@ class Node<T> {
addPredecessor(predecessor); addPredecessor(predecessor);
} }
} }
/** /**
* The content of this node. * The content of this node.
*/ */

View File

@@ -1,6 +1,6 @@
import static org.junit.Assert.*; import static org.junit.jupiter.api.Assertions.*;
import static targetast.TestCodegen.generateClassFiles; import static targetast.TestCodegen.generateClassFiles;
import java.io.File; import java.io.File;
@@ -9,13 +9,12 @@ import java.net.URL;
import java.net.URLClassLoader; import java.net.URLClassLoader;
import java.util.Arrays; import java.util.Arrays;
import org.junit.BeforeClass; import org.junit.jupiter.api.BeforeAll;
import org.junit.Test; import org.junit.jupiter.api.Test;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import de.dhbwstuttgart.core.JavaTXCompiler; import de.dhbwstuttgart.core.JavaTXCompiler;
import de.dhbwstuttgart.environment.ByteArrayClassLoader;
public class AllgemeinTest { public class AllgemeinTest {

View File

@@ -6,12 +6,12 @@ import de.dhbwstuttgart.syntaxtree.GenericTypeVar;
import de.dhbwstuttgart.syntaxtree.factory.ASTFactory; import de.dhbwstuttgart.syntaxtree.factory.ASTFactory;
import de.dhbwstuttgart.syntaxtree.type.*; import de.dhbwstuttgart.syntaxtree.type.*;
import de.dhbwstuttgart.target.generate.ASTToTargetAST; import de.dhbwstuttgart.target.generate.ASTToTargetAST;
import org.junit.Test; import org.junit.jupiter.api.Test;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import static org.junit.Assert.*; import static org.junit.jupiter.api.Assertions.*;
public class GenericsParserTest { public class GenericsParserTest {

View File

@@ -1,22 +1,25 @@
import de.dhbwstuttgart.environment.ByteArrayClassLoader; import org.junit.jupiter.api.Disabled;
import org.junit.Ignore; import org.junit.jupiter.api.Test;
import org.junit.Test;
import java.lang.reflect.*; import java.lang.reflect.*;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Vector; import java.util.Vector;
import org.junit.jupiter.api.parallel.Execution;
import org.junit.jupiter.api.parallel.ExecutionMode;
import targetast.TestCodegen; import targetast.TestCodegen;
import static org.junit.Assert.*; import static org.junit.jupiter.api.Assertions.*;
import static targetast.TestCodegen.createClassLoader;
import static targetast.TestCodegen.generateClassFiles; import static targetast.TestCodegen.generateClassFiles;
@Execution(ExecutionMode.CONCURRENT)
public class TestComplete { public class TestComplete {
@Test @Test
public void applyLambdaTest() throws Exception { public void applyLambdaTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "applyLambda.jav"); var classFiles = generateClassFiles(createClassLoader(), "applyLambda.jav");
var applyLambda = classFiles.get("applyLambda"); var applyLambda = classFiles.get("applyLambda");
var instance = applyLambda.getDeclaredConstructor().newInstance(); var instance = applyLambda.getDeclaredConstructor().newInstance();
var m = applyLambda.getDeclaredMethod("m"); var m = applyLambda.getDeclaredMethod("m");
@@ -27,7 +30,7 @@ public class TestComplete {
@Test @Test
public void binaryTest() throws Exception { public void binaryTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "BinaryInMeth.jav"); var classFiles = generateClassFiles(createClassLoader(), "BinaryInMeth.jav");
var binaryInMeth = classFiles.get("BinaryInMeth"); var binaryInMeth = classFiles.get("BinaryInMeth");
var instance = binaryInMeth.getDeclaredConstructor().newInstance(); var instance = binaryInMeth.getDeclaredConstructor().newInstance();
@@ -40,13 +43,13 @@ public class TestComplete {
@Test @Test
public void classGenLamTest() throws Exception { public void classGenLamTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "ClassGenLam.jav"); var classFiles = generateClassFiles(createClassLoader(), "ClassGenLam.jav");
classFiles.get("ClassGenLam").getDeclaredConstructor().newInstance(); classFiles.get("ClassGenLam").getDeclaredConstructor().newInstance();
} }
@Test @Test
public void facTest() throws Exception { public void facTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Fac.jav"); var classFiles = generateClassFiles(createClassLoader(), "Fac.jav");
var fac = classFiles.get("Fac"); var fac = classFiles.get("Fac");
var instance = fac.getDeclaredConstructor().newInstance(); var instance = fac.getDeclaredConstructor().newInstance();
@@ -56,7 +59,7 @@ public class TestComplete {
@Test @Test
public void facultyTest() throws Exception { public void facultyTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Faculty.jav"); var classFiles = generateClassFiles(createClassLoader(), "Faculty.jav");
var fac = classFiles.get("Faculty"); var fac = classFiles.get("Faculty");
var constructor = fac.getDeclaredConstructor(); var constructor = fac.getDeclaredConstructor();
@@ -69,7 +72,7 @@ public class TestComplete {
@Test @Test
public void fieldTest() throws Exception { public void fieldTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Field.jav"); var classFiles = generateClassFiles(createClassLoader(), "Field.jav");
var field = classFiles.get("Field"); var field = classFiles.get("Field");
var instance = field.getDeclaredConstructor().newInstance(); var instance = field.getDeclaredConstructor().newInstance();
assertEquals(1, field.getFields().length); assertEquals(1, field.getFields().length);
@@ -77,7 +80,7 @@ public class TestComplete {
@Test @Test
public void fieldTph2Test() throws Exception { public void fieldTph2Test() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "FieldTph2.jav"); var classFiles = generateClassFiles(createClassLoader(), "FieldTph2.jav");
var fieldtph2 = classFiles.get("FieldTph2"); var fieldtph2 = classFiles.get("FieldTph2");
var instance = fieldtph2.getDeclaredConstructor().newInstance(); var instance = fieldtph2.getDeclaredConstructor().newInstance();
@@ -91,7 +94,7 @@ public class TestComplete {
@Test @Test
public void fieldTphConsMethTest() throws Exception { public void fieldTphConsMethTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "FieldTphConsMeth.jav"); var classFiles = generateClassFiles(createClassLoader(), "FieldTphConsMeth.jav");
var fieldTphConsMeth = classFiles.get("FieldTphConsMeth"); var fieldTphConsMeth = classFiles.get("FieldTphConsMeth");
var ctor = fieldTphConsMeth.getDeclaredConstructor(Object.class); var ctor = fieldTphConsMeth.getDeclaredConstructor(Object.class);
@@ -105,7 +108,7 @@ public class TestComplete {
@Test @Test
public void fieldTphMMethTest() throws Exception { public void fieldTphMMethTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "FieldTphMMeth.jav"); var classFiles = generateClassFiles(createClassLoader(), "FieldTphMMeth.jav");
var fieldTphMMeth = classFiles.get("FieldTphMMeth"); var fieldTphMMeth = classFiles.get("FieldTphMMeth");
var ctor = fieldTphMMeth.getDeclaredConstructor(Object.class, Object.class, Boolean.class); var ctor = fieldTphMMeth.getDeclaredConstructor(Object.class, Object.class, Boolean.class);
@@ -122,37 +125,37 @@ public class TestComplete {
@Test @Test
public void genTest() throws Exception { public void genTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Gen.jav"); var classFiles = generateClassFiles(createClassLoader(), "Gen.jav");
} }
@Test @Test
public void idTest() throws Exception { public void idTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Id.jav"); var classFiles = generateClassFiles(createClassLoader(), "Id.jav");
var instance = classFiles.get("Id").getDeclaredConstructor().newInstance(); var instance = classFiles.get("Id").getDeclaredConstructor().newInstance();
} }
@Test @Test
public void infTest() throws Exception { public void infTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Inf.jav"); var classFiles = generateClassFiles(createClassLoader(), "Inf.jav");
var instance = classFiles.get("Inf").getDeclaredConstructor().newInstance(); var instance = classFiles.get("Inf").getDeclaredConstructor().newInstance();
// TODO check generics // TODO check generics
} }
@Test @Test
public void kompTphTest() throws Exception { public void kompTphTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "KompTph.jav"); var classFiles = generateClassFiles(createClassLoader(), "KompTph.jav");
var instance = classFiles.get("KompTph").getDeclaredConstructor().newInstance(); var instance = classFiles.get("KompTph").getDeclaredConstructor().newInstance();
} }
@Test @Test
public void lambdaCaptureTest() throws Exception { public void lambdaCaptureTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "LambdaCapture.jav"); var classFiles = generateClassFiles(createClassLoader(), "LambdaCapture.jav");
var instance = classFiles.get("LambdaCapture").getDeclaredConstructor().newInstance(); var instance = classFiles.get("LambdaCapture").getDeclaredConstructor().newInstance();
} }
@Test @Test
public void lambdaTest() throws Exception { public void lambdaTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Lambda.jav"); var classFiles = generateClassFiles(createClassLoader(), "Lambda.jav");
var classToTest = classFiles.get("Lambda"); var classToTest = classFiles.get("Lambda");
var instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); var instanceOfClass = classToTest.getDeclaredConstructor().newInstance();
@@ -167,22 +170,22 @@ public class TestComplete {
@Test @Test
public void mathStrucInteger() throws Exception { public void mathStrucInteger() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "mathStrucInteger.jav"); var classFiles = generateClassFiles(createClassLoader(), "mathStrucInteger.jav");
var mathStrucInteger = classFiles.get("mathStrucInteger"); var mathStrucInteger = classFiles.get("mathStrucInteger");
mathStrucInteger.getDeclaredConstructor(Integer.class).newInstance(10); mathStrucInteger.getDeclaredConstructor(Integer.class).newInstance(10);
} }
@Test @Test
public void mathStruc() throws Exception { public void mathStruc() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "mathStruc.jav"); var classFiles = generateClassFiles(createClassLoader(), "mathStruc.jav");
var mathStruc = classFiles.get("mathStruc"); var mathStruc = classFiles.get("mathStruc");
mathStruc.getDeclaredConstructor(Object.class).newInstance("A"); mathStruc.getDeclaredConstructor(Object.class).newInstance("A");
} }
@Test @Test
//@Ignore() //@Disabled()
public void matrixOpTest() throws Exception { public void matrixOpTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "MatrixOP.jav"); var classFiles = generateClassFiles(createClassLoader(), "MatrixOP.jav");
var matrixOP = classFiles.get("MatrixOP"); var matrixOP = classFiles.get("MatrixOP");
Vector<Vector<Integer>> vv = new Vector<>(); Vector<Vector<Integer>> vv = new Vector<>();
@@ -234,9 +237,9 @@ public class TestComplete {
} }
@Test @Test
//@Ignore("This is too complex") //@Disabled("This is too complex")
public void matrixTest() throws Exception { public void matrixTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Matrix.jav"); var classFiles = generateClassFiles(createClassLoader(), "Matrix.jav");
var matrix = classFiles.get("Matrix"); var matrix = classFiles.get("Matrix");
Vector<Vector<Integer>> vv = new Vector<>(); Vector<Vector<Integer>> vv = new Vector<>();
@@ -283,7 +286,7 @@ public class TestComplete {
@Test @Test
public void scalarTest() throws Exception { public void scalarTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Scalar.jav"); var classFiles = generateClassFiles(createClassLoader(), "Scalar.jav");
var scalar = classFiles.get("Scalar"); var scalar = classFiles.get("Scalar");
Vector<Vector<Integer>> vv = new Vector<>(); Vector<Vector<Integer>> vv = new Vector<>();
@@ -308,19 +311,19 @@ public class TestComplete {
@Test @Test
public void mergeTest() throws Exception { public void mergeTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Merge.jav"); var classFiles = generateClassFiles(createClassLoader(), "Merge.jav");
var instance = classFiles.get("Merge").getDeclaredConstructor().newInstance(); var instance = classFiles.get("Merge").getDeclaredConstructor().newInstance();
} }
@Test @Test
public void overloadingSortingTest() throws Exception { public void overloadingSortingTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Sorting.jav"); var classFiles = generateClassFiles(createClassLoader(), "Sorting.jav");
var instance = classFiles.get("Sorting").getDeclaredConstructor().newInstance(); var instance = classFiles.get("Sorting").getDeclaredConstructor().newInstance();
} }
@Test @Test
public void overloadingTest() throws Exception { public void overloadingTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Overloading.jav"); var classFiles = generateClassFiles(createClassLoader(), "Overloading.jav");
var overloading = classFiles.get("Overloading"); var overloading = classFiles.get("Overloading");
var overloading2 = classFiles.get("Overloading2"); var overloading2 = classFiles.get("Overloading2");
var instance1 = overloading.getDeclaredConstructor().newInstance(); var instance1 = overloading.getDeclaredConstructor().newInstance();
@@ -334,7 +337,7 @@ public class TestComplete {
@Test @Test
public void plusTest() throws Exception { public void plusTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Plus.jav"); var classFiles = generateClassFiles(createClassLoader(), "Plus.jav");
var plus = classFiles.get("Plus"); var plus = classFiles.get("Plus");
var instance = plus.getDeclaredConstructor().newInstance(); var instance = plus.getDeclaredConstructor().newInstance();
@@ -347,7 +350,7 @@ public class TestComplete {
@Test @Test
public void relOpsTest() throws Exception { public void relOpsTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "RelOps.jav"); var classFiles = generateClassFiles(createClassLoader(), "RelOps.jav");
var relOps = classFiles.get("RelOps"); var relOps = classFiles.get("RelOps");
var instance = relOps.getDeclaredConstructor().newInstance(); var instance = relOps.getDeclaredConstructor().newInstance();
@@ -357,26 +360,26 @@ public class TestComplete {
@Test @Test
public void simpleCyclesTest() throws Exception { public void simpleCyclesTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "SimpleCycle.jav"); var classFiles = generateClassFiles(createClassLoader(), "SimpleCycle.jav");
var instance = classFiles.get("SimpleCycle").getDeclaredConstructor().newInstance(); var instance = classFiles.get("SimpleCycle").getDeclaredConstructor().newInstance();
} }
@Test @Test
public void subMatTest() throws Exception { public void subMatTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "SubMatrix.jav"); var classFiles = generateClassFiles(createClassLoader(), "SubMatrix.jav");
var instance = classFiles.get("SubMatrix").getDeclaredConstructor().newInstance(); var instance = classFiles.get("SubMatrix").getDeclaredConstructor().newInstance();
} }
@Test @Test
public void tphTest() throws Exception { public void tphTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Tph.jav"); var classFiles = generateClassFiles(createClassLoader(), "Tph.jav");
var tph = classFiles.get("Tph"); var tph = classFiles.get("Tph");
var instance = tph.getDeclaredConstructor().newInstance(); var instance = tph.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void tph2Test() throws Exception { public void tph2Test() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Tph2.jav"); var classFiles = generateClassFiles(createClassLoader(), "Tph2.jav");
var tph2 = classFiles.get("Tph2"); var tph2 = classFiles.get("Tph2");
var instance = tph2.getDeclaredConstructor().newInstance(); var instance = tph2.getDeclaredConstructor().newInstance();
@@ -403,7 +406,7 @@ public class TestComplete {
@Test @Test
public void tph3Test() throws Exception { public void tph3Test() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Tph3.jav"); var classFiles = generateClassFiles(createClassLoader(), "Tph3.jav");
var tph3 = classFiles.get("Tph3"); var tph3 = classFiles.get("Tph3");
var instance = tph3.getDeclaredConstructor().newInstance(); var instance = tph3.getDeclaredConstructor().newInstance();
var m1 = tph3.getDeclaredMethod("m1", Object.class, Object.class); var m1 = tph3.getDeclaredMethod("m1", Object.class, Object.class);
@@ -429,7 +432,7 @@ public class TestComplete {
@Test @Test
public void tph4Test() throws Exception { public void tph4Test() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Tph4.jav"); var classFiles = generateClassFiles(createClassLoader(), "Tph4.jav");
var tph4 = classFiles.get("Tph4"); var tph4 = classFiles.get("Tph4");
var instance = tph4.getDeclaredConstructor().newInstance(); var instance = tph4.getDeclaredConstructor().newInstance();
var m = tph4.getDeclaredMethod("m", Object.class, Object.class); var m = tph4.getDeclaredMethod("m", Object.class, Object.class);
@@ -460,7 +463,7 @@ public class TestComplete {
@Test @Test
public void tph5Test() throws Exception { public void tph5Test() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Tph5.jav"); var classFiles = generateClassFiles(createClassLoader(), "Tph5.jav");
var tph5 = classFiles.get("Tph5"); var tph5 = classFiles.get("Tph5");
var instance = tph5.getDeclaredConstructor().newInstance(); var instance = tph5.getDeclaredConstructor().newInstance();
var m = tph5.getDeclaredMethod("m", Object.class, Object.class); var m = tph5.getDeclaredMethod("m", Object.class, Object.class);
@@ -488,7 +491,7 @@ public class TestComplete {
@Test @Test
public void tph6Test() throws Exception { public void tph6Test() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Tph6.jav"); var classFiles = generateClassFiles(createClassLoader(), "Tph6.jav");
var tph5 = classFiles.get("Tph6"); var tph5 = classFiles.get("Tph6");
var instance = tph5.getDeclaredConstructor().newInstance(); var instance = tph5.getDeclaredConstructor().newInstance();
var m = tph5.getDeclaredMethod("m", Object.class, Object.class); var m = tph5.getDeclaredMethod("m", Object.class, Object.class);
@@ -516,7 +519,7 @@ public class TestComplete {
@Test @Test
public void Tph7Test() throws Exception { public void Tph7Test() throws Exception {
var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "Tph7.jav"); var classFiles = TestCodegen.generateClassFiles(createClassLoader(), "Tph7.jav");
var classToTest = classFiles.get("Tph7"); var classToTest = classFiles.get("Tph7");
var instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); var instanceOfClass = classToTest.getDeclaredConstructor().newInstance();
@@ -574,7 +577,7 @@ public class TestComplete {
@Test @Test
public void testTXGenerics() throws Exception { public void testTXGenerics() throws Exception {
var classLoader = new ByteArrayClassLoader(); var classLoader = createClassLoader();
generateClassFiles(classLoader, "Cycle.jav"); generateClassFiles(classLoader, "Cycle.jav");
var classFiles = generateClassFiles(classLoader, "TXGenerics.jav"); var classFiles = generateClassFiles(classLoader, "TXGenerics.jav");
var instance = classFiles.get("TXGenerics").getDeclaredConstructor().newInstance(); var instance = classFiles.get("TXGenerics").getDeclaredConstructor().newInstance();
@@ -582,25 +585,25 @@ public class TestComplete {
@Test @Test
public void typedIdTest() throws Exception { public void typedIdTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "TypedID.jav"); var classFiles = generateClassFiles(createClassLoader(), "TypedID.jav");
var instance = classFiles.get("TypedID").getDeclaredConstructor().newInstance(); var instance = classFiles.get("TypedID").getDeclaredConstructor().newInstance();
} }
@Test @Test
public void vectorAddTest() throws Exception { public void vectorAddTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "VectorAdd.jav"); var classFiles = generateClassFiles(createClassLoader(), "VectorAdd.jav");
var instance = classFiles.get("VectorAdd").getDeclaredConstructor().newInstance(); var instance = classFiles.get("VectorAdd").getDeclaredConstructor().newInstance();
} }
@Test @Test
public void vectorSuperTest() throws Exception { public void vectorSuperTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "VectorSuper.jav"); var classFiles = generateClassFiles(createClassLoader(), "VectorSuper.jav");
var instance = classFiles.get("VectorSuper").getDeclaredConstructor().newInstance(); var instance = classFiles.get("VectorSuper").getDeclaredConstructor().newInstance();
} }
@Test @Test
public void yTest() throws Exception { public void yTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Y.jav"); var classFiles = generateClassFiles(createClassLoader(), "Y.jav");
var fac1 = classFiles.get("Fac1"); var fac1 = classFiles.get("Fac1");
var instance = fac1.getDeclaredConstructor().newInstance(); var instance = fac1.getDeclaredConstructor().newInstance();
@@ -609,45 +612,45 @@ public class TestComplete {
} }
@Test @Test
//@Ignore("This one isn't working") //@Disabled("This one isn't working")
public void boxTest() throws Exception { public void boxTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Box.jav"); var classFiles = generateClassFiles(createClassLoader(), "Box.jav");
var instance = classFiles.get("Box").getDeclaredConstructor().newInstance(); var instance = classFiles.get("Box").getDeclaredConstructor().newInstance();
} }
@Test @Test
public void cycleTest() throws Exception { public void cycleTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Cycle.jav"); var classFiles = generateClassFiles(createClassLoader(), "Cycle.jav");
var instance = classFiles.get("Cycle").getDeclaredConstructor().newInstance(); var instance = classFiles.get("Cycle").getDeclaredConstructor().newInstance();
} }
@Test @Test
public void olFunTest() throws Exception { public void olFunTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "OLFun.jav"); var classFiles = generateClassFiles(createClassLoader(), "OLFun.jav");
var instance = classFiles.get("OLFun").getDeclaredConstructor().newInstance(); var instance = classFiles.get("OLFun").getDeclaredConstructor().newInstance();
} }
@Test @Test
public void olFun2Test() throws Exception { public void olFun2Test() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "OLFun2.jav"); var classFiles = generateClassFiles(createClassLoader(), "OLFun2.jav");
var instance = classFiles.get("OLFun2").getDeclaredConstructor().newInstance(); var instance = classFiles.get("OLFun2").getDeclaredConstructor().newInstance();
} }
@Test @Test
public void pairTest() throws Exception { public void pairTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Pair.jav"); var classFiles = generateClassFiles(createClassLoader(), "Pair.jav");
var instance = classFiles.get("Pair").getDeclaredConstructor().newInstance(); var instance = classFiles.get("Pair").getDeclaredConstructor().newInstance();
} }
@Test @Test
public void olTest() throws Exception { public void olTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "OL.jav"); var classFiles = generateClassFiles(createClassLoader(), "OL.jav");
var instance = classFiles.get("OL").getDeclaredConstructor().newInstance(); var instance = classFiles.get("OL").getDeclaredConstructor().newInstance();
} }
@Test @Test
public void recordTest() throws Exception { public void recordTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "RecordTest.jav"); var classFiles = generateClassFiles(createClassLoader(), "RecordTest.jav");
var clazz = classFiles.get("RecordTest"); var clazz = classFiles.get("RecordTest");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
assertTrue((Boolean) clazz.getDeclaredMethod("doesEqual").invoke(instance)); assertTrue((Boolean) clazz.getDeclaredMethod("doesEqual").invoke(instance));
@@ -658,14 +661,14 @@ public class TestComplete {
@Test @Test
public void genericRecordTest() throws Exception { public void genericRecordTest() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "GenericRecord.jav"); var classFiles = generateClassFiles(createClassLoader(), "GenericRecord.jav");
var clazz = classFiles.get("GenericRecord"); var clazz = classFiles.get("GenericRecord");
var instance = clazz.getDeclaredConstructor(Object.class).newInstance((Object) null); var instance = clazz.getDeclaredConstructor(Object.class).newInstance((Object) null);
} }
@Test @Test
public void testSwitch() throws Exception { public void testSwitch() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Switch.jav"); var classFiles = generateClassFiles(createClassLoader(), "Switch.jav");
var clazz = classFiles.get("Switch"); var clazz = classFiles.get("Switch");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
var swtch = clazz.getDeclaredMethod("main", Object.class); var swtch = clazz.getDeclaredMethod("main", Object.class);
@@ -691,7 +694,7 @@ public class TestComplete {
@Test @Test
public void testSwitchInfered() throws Exception { public void testSwitchInfered() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "SwitchInfered.jav"); var classFiles = generateClassFiles(createClassLoader(), "SwitchInfered.jav");
var clazz = classFiles.get("SwitchInfered"); var clazz = classFiles.get("SwitchInfered");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
@@ -707,7 +710,7 @@ public class TestComplete {
@Test @Test
public void testSwitchAppend() throws Exception { public void testSwitchAppend() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "SwitchAppend.jav"); var classFiles = generateClassFiles(createClassLoader(), "SwitchAppend.jav");
var clazz = classFiles.get("SwitchAppend"); var clazz = classFiles.get("SwitchAppend");
var listClass = classFiles.get("List"); var listClass = classFiles.get("List");
@@ -730,13 +733,13 @@ public class TestComplete {
} }
@Test @Test
public void testSwitchRecordLiteral() throws Exception { public void testSwitchRecordLiteral() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "PatternMatchingLiteralStyle.jav"); var classFiles = generateClassFiles(createClassLoader(), "PatternMatchingLiteralStyle.jav");
var clazz = classFiles.get("SwitchOverload"); var clazz = classFiles.get("SwitchOverload");
} }
@Test @Test
public void testSwitchCaseHeritageDetection() throws Exception { public void testSwitchCaseHeritageDetection() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "SwitchCaseHeritageDetection.jav"); var classFiles = generateClassFiles(createClassLoader(), "SwitchCaseHeritageDetection.jav");
var clazz = classFiles.get("SwitchCaseHeritageDetection"); var clazz = classFiles.get("SwitchCaseHeritageDetection");
var clazzAbst = classFiles.get("NumberOrText"); var clazzAbst = classFiles.get("NumberOrText");
var clazzStringer = classFiles.get("Text"); var clazzStringer = classFiles.get("Text");
@@ -758,7 +761,7 @@ public class TestComplete {
} }
@Test @Test
public void testSwitchListRecord() throws Exception { public void testSwitchListRecord() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "SwitchRecordList.jav"); var classFiles = generateClassFiles(createClassLoader(), "SwitchRecordList.jav");
var clazz = classFiles.get("SwitchCaseHeritageDetection"); var clazz = classFiles.get("SwitchCaseHeritageDetection");
@@ -784,7 +787,7 @@ public class TestComplete {
@Test @Test
public void testSwitchNestedValue() throws Exception { public void testSwitchNestedValue() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "SwitchNestedValue.jav"); var classFiles = generateClassFiles(createClassLoader(), "SwitchNestedValue.jav");
var clazz = classFiles.get("SwitchNestedValue"); var clazz = classFiles.get("SwitchNestedValue");
var rec = classFiles.get("R"); var rec = classFiles.get("R");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
@@ -802,7 +805,7 @@ public class TestComplete {
@Test @Test
public void testGenericRecordSwitchCase() throws Exception { public void testGenericRecordSwitchCase() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "GenericRecordSwitchCase.jav"); var classFiles = generateClassFiles(createClassLoader(), "GenericRecordSwitchCase.jav");
var clazz = classFiles.get("GenericRecordSwitchCase"); var clazz = classFiles.get("GenericRecordSwitchCase");
@@ -827,18 +830,18 @@ public class TestComplete {
} }
@Ignore("Not implemented") @Disabled("Not implemented")
@Test @Test
public void testSwitch2() throws Exception { public void testSwitch2() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Switch2.jav"); var classFiles = generateClassFiles(createClassLoader(), "Switch2.jav");
var clazz = classFiles.get("Switch2"); var clazz = classFiles.get("Switch2");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Ignore("Not implemented") @Disabled("Not implemented")
@Test @Test
public void testStringSwitch() throws Exception { public void testStringSwitch() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "SwitchString.jav"); var classFiles = generateClassFiles(createClassLoader(), "SwitchString.jav");
var clazz = classFiles.get("SwitchString"); var clazz = classFiles.get("SwitchString");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
var main = clazz.getDeclaredMethod("main", String.class); var main = clazz.getDeclaredMethod("main", String.class);
@@ -852,15 +855,15 @@ public class TestComplete {
@Test @Test
public void testInstanceOfPattern() throws Exception { public void testInstanceOfPattern() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "InstanceOf.jav"); var classFiles = generateClassFiles(createClassLoader(), "InstanceOf.jav");
var clazz = classFiles.get("InstanceOf"); var clazz = classFiles.get("InstanceOf");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Ignore("Not implemented") @Disabled("Not implemented")
@Test @Test
public void testOverloadPattern() throws Exception { public void testOverloadPattern() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "OverloadPattern.jav"); var classFiles = generateClassFiles(createClassLoader(), "OverloadPattern.jav");
var clazz = classFiles.get("OverloadPattern"); var clazz = classFiles.get("OverloadPattern");
var rec = classFiles.get("Point"); var rec = classFiles.get("Point");
@@ -883,10 +886,10 @@ public class TestComplete {
assertEquals(10, m3.invoke(instance, 10)); assertEquals(10, m3.invoke(instance, 10));
} }
@Ignore("Not implemented") @Disabled("Not implemented")
@Test @Test
public void testOverloadNestedPattern() throws Exception { public void testOverloadNestedPattern() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "OverloadNestedPattern.jav"); var classFiles = generateClassFiles(createClassLoader(), "OverloadNestedPattern.jav");
var clazz = classFiles.get("OverloadNestedPattern"); var clazz = classFiles.get("OverloadNestedPattern");
var rec = classFiles.get("R"); var rec = classFiles.get("R");
@@ -905,10 +908,10 @@ public class TestComplete {
assertEquals(3, m.invoke(instance, r1, r1)); assertEquals(3, m.invoke(instance, r1, r1));
} }
@Ignore("Not implemented") @Disabled("Not implemented")
@Test @Test
public void testPatternMatchingHaskellStyle() throws Exception { public void testPatternMatchingHaskellStyle() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "PatternMatchingHaskellStyle.jav"); var classFiles = generateClassFiles(createClassLoader(), "PatternMatchingHaskellStyle.jav");
var clazz = classFiles.get("PatternMatchingHaskellStyle"); var clazz = classFiles.get("PatternMatchingHaskellStyle");
var R2 = classFiles.get("Elem"); var R2 = classFiles.get("Elem");
var R = classFiles.get("LinkedElem"); var R = classFiles.get("LinkedElem");
@@ -928,10 +931,10 @@ public class TestComplete {
} }
@Ignore("Not implemented") @Disabled("Not implemented")
@Test @Test
public void testPatternMatchingListAppend() throws Exception { public void testPatternMatchingListAppend() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "PatternMatchingListAppend.jav"); var classFiles = generateClassFiles(createClassLoader(), "PatternMatchingListAppend.jav");
var clazz = classFiles.get("PatternMatchingListAppend"); var clazz = classFiles.get("PatternMatchingListAppend");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
@@ -951,7 +954,7 @@ public class TestComplete {
@Test @Test
public void testOverloadSwitch() throws Exception { public void testOverloadSwitch() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "SwitchOverload.jav"); var classFiles = generateClassFiles(createClassLoader(), "SwitchOverload.jav");
var clazz = classFiles.get("SwitchOverload"); var clazz = classFiles.get("SwitchOverload");
var R = classFiles.get("R"); var R = classFiles.get("R");
@@ -969,14 +972,14 @@ public class TestComplete {
@Test @Test
public void testInterfaces() throws Exception { public void testInterfaces() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Interfaces.jav"); var classFiles = generateClassFiles(createClassLoader(), "Interfaces.jav");
var clazz = classFiles.get("Interfaces"); var clazz = classFiles.get("Interfaces");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testStatic() throws Exception { public void testStatic() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Static.jav"); var classFiles = generateClassFiles(createClassLoader(), "Static.jav");
var clazz = classFiles.get("Static"); var clazz = classFiles.get("Static");
var m = clazz.getDeclaredMethod("m"); var m = clazz.getDeclaredMethod("m");
assertEquals(50, m.invoke(null)); assertEquals(50, m.invoke(null));
@@ -984,7 +987,7 @@ public class TestComplete {
@Test @Test
public void testFor() throws Exception { public void testFor() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "For.jav"); var classFiles = generateClassFiles(createClassLoader(), "For.jav");
var clazz = classFiles.get("For"); var clazz = classFiles.get("For");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
var m = clazz.getDeclaredMethod("m", Integer.class); var m = clazz.getDeclaredMethod("m", Integer.class);
@@ -993,7 +996,7 @@ public class TestComplete {
@Test @Test
public void testForEach() throws Exception { public void testForEach() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "ForEach.jav"); var classFiles = generateClassFiles(createClassLoader(), "ForEach.jav");
var clazz = classFiles.get("ForEach"); var clazz = classFiles.get("ForEach");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
var m = clazz.getDeclaredMethod("m"); var m = clazz.getDeclaredMethod("m");
@@ -1002,7 +1005,7 @@ public class TestComplete {
@Test @Test
public void testLambdaRunnable() throws Exception { public void testLambdaRunnable() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "LambdaRunnable.jav"); var classFiles = generateClassFiles(createClassLoader(), "LambdaRunnable.jav");
var clazz = classFiles.get("LambdaRunnable"); var clazz = classFiles.get("LambdaRunnable");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
//var m = clazz.getDeclaredMethod("m", Integer.class); //var m = clazz.getDeclaredMethod("m", Integer.class);
@@ -1011,7 +1014,7 @@ public class TestComplete {
@Test @Test
public void testFunctionalInterface() throws Exception { public void testFunctionalInterface() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "FunctionalInterface.jav"); var classFiles = generateClassFiles(createClassLoader(), "FunctionalInterface.jav");
var clazz = classFiles.get("FunctionalInterface"); var clazz = classFiles.get("FunctionalInterface");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
var m = clazz.getDeclaredMethod("m"); var m = clazz.getDeclaredMethod("m");
@@ -1020,7 +1023,7 @@ public class TestComplete {
@Test @Test
public void testChain() throws Exception { public void testChain() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Chain.jav"); var classFiles = generateClassFiles(createClassLoader(), "Chain.jav");
var clazz = classFiles.get("Chain"); var clazz = classFiles.get("Chain");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
var m = clazz.getDeclaredMethod("m"); var m = clazz.getDeclaredMethod("m");
@@ -1029,7 +1032,7 @@ public class TestComplete {
@Test @Test
public void testHelloWorld() throws Exception { public void testHelloWorld() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "HelloWorld.jav"); var classFiles = generateClassFiles(createClassLoader(), "HelloWorld.jav");
var clazz = classFiles.get("HelloWorld"); var clazz = classFiles.get("HelloWorld");
var hello = clazz.getDeclaredMethod("hello"); var hello = clazz.getDeclaredMethod("hello");
hello.invoke(null); hello.invoke(null);
@@ -1037,14 +1040,14 @@ public class TestComplete {
@Test @Test
public void testSuperCall() throws Exception { public void testSuperCall() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "SuperCall.jav"); var classFiles = generateClassFiles(createClassLoader(), "SuperCall.jav");
var clazz = classFiles.get("SuperCall"); var clazz = classFiles.get("SuperCall");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testInstanceOf() throws Exception { public void testInstanceOf() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "InstanceOf.jav"); var classFiles = generateClassFiles(createClassLoader(), "InstanceOf.jav");
var clazz = classFiles.get("InstanceOf"); var clazz = classFiles.get("InstanceOf");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
@@ -1055,7 +1058,7 @@ public class TestComplete {
@Test @Test
public void testExceptions() throws Exception { public void testExceptions() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Exceptions.jav"); var classFiles = generateClassFiles(createClassLoader(), "Exceptions.jav");
var clazz = classFiles.get("Exceptions"); var clazz = classFiles.get("Exceptions");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
@@ -1072,7 +1075,7 @@ public class TestComplete {
@Test @Test
public void testLiteral() throws Exception { public void testLiteral() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Literal.jav"); var classFiles = generateClassFiles(createClassLoader(), "Literal.jav");
var clazz = classFiles.get("Literal"); var clazz = classFiles.get("Literal");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
@@ -1084,7 +1087,7 @@ public class TestComplete {
@Test @Test
public void testOLConstructor() throws Exception { public void testOLConstructor() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "OLConstructor.jav"); var classFiles = generateClassFiles(createClassLoader(), "OLConstructor.jav");
var clazz = classFiles.get("Child"); var clazz = classFiles.get("Child");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
assertEquals(3, clazz.getSuperclass().getDeclaredField("x").get(instance)); assertEquals(3, clazz.getSuperclass().getDeclaredField("x").get(instance));
@@ -1092,7 +1095,7 @@ public class TestComplete {
@Test @Test
public void testOperators() throws Exception { public void testOperators() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Op1.jav"); var classFiles = generateClassFiles(createClassLoader(), "Op1.jav");
var clazz = classFiles.get("Op1"); var clazz = classFiles.get("Op1");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
assertEquals(true, clazz.getDeclaredMethod("not").invoke(instance)); assertEquals(true, clazz.getDeclaredMethod("not").invoke(instance));
@@ -1102,17 +1105,17 @@ public class TestComplete {
assertEquals(10 % 2, clazz.getDeclaredMethod("mod").invoke(instance)); assertEquals(10 % 2, clazz.getDeclaredMethod("mod").invoke(instance));
} }
@Ignore("Not implemented") @Disabled("Not implemented")
@Test @Test
public void testStringConcat() throws Exception { public void testStringConcat() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Op2.jav"); var classFiles = generateClassFiles(createClassLoader(), "Op2.jav");
var clazz = classFiles.get("Op2"); var clazz = classFiles.get("Op2");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testAccess() throws Exception { public void testAccess() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Access.jav"); var classFiles = generateClassFiles(createClassLoader(), "Access.jav");
var clazzPublic = classFiles.get("Access"); var clazzPublic = classFiles.get("Access");
var clazzDefault = classFiles.get("AccessDefault"); var clazzDefault = classFiles.get("AccessDefault");
@@ -1132,28 +1135,28 @@ public class TestComplete {
@Test @Test
public void testTypeCast() throws Exception { public void testTypeCast() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "TypeCast.jav"); var classFiles = generateClassFiles(createClassLoader(), "TypeCast.jav");
var clazz = classFiles.get("TypeCast"); var clazz = classFiles.get("TypeCast");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testAnnotation() throws Exception { public void testAnnotation() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Annotation.jav"); var classFiles = generateClassFiles(createClassLoader(), "Annotation.jav");
var clazz = classFiles.get("Annotation"); var clazz = classFiles.get("Annotation");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testWilcards() throws Exception { public void testWilcards() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Wildcards.jav"); var classFiles = generateClassFiles(createClassLoader(), "Wildcards.jav");
var clazz = classFiles.get("Wildcards"); var clazz = classFiles.get("Wildcards");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testOverrideEquals() throws Exception { public void testOverrideEquals() throws Exception {
var loader = new ByteArrayClassLoader(); var loader = createClassLoader();
loader.loadClass(TestCodegen.path.resolve("OverrideRoot.class")); loader.loadClass(TestCodegen.path.resolve("OverrideRoot.class"));
var classFiles = generateClassFiles(loader, "OverrideEquals.jav"); var classFiles = generateClassFiles(loader, "OverrideEquals.jav");
var clazz = classFiles.get("OverrideEquals"); var clazz = classFiles.get("OverrideEquals");
@@ -1162,7 +1165,7 @@ public class TestComplete {
@Test @Test
public void testTernary() throws Exception { public void testTernary() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Ternary.jav"); var classFiles = generateClassFiles(createClassLoader(), "Ternary.jav");
var clazz = classFiles.get("Ternary"); var clazz = classFiles.get("Ternary");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
assertEquals("small", clazz.getDeclaredMethod("main", Integer.class).invoke(instance, 5)); assertEquals("small", clazz.getDeclaredMethod("main", Integer.class).invoke(instance, 5));
@@ -1170,7 +1173,7 @@ public class TestComplete {
@Test @Test
public void testWhile() throws Exception { public void testWhile() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "While.jav"); var classFiles = generateClassFiles(createClassLoader(), "While.jav");
var clazz = classFiles.get("While"); var clazz = classFiles.get("While");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
assertEquals(5, clazz.getDeclaredMethod("m", Integer.class).invoke(instance, 5)); assertEquals(5, clazz.getDeclaredMethod("m", Integer.class).invoke(instance, 5));
@@ -1179,14 +1182,14 @@ public class TestComplete {
@Test @Test
public void testImportWildcard() throws Exception { public void testImportWildcard() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "ImportWildcard.jav"); var classFiles = generateClassFiles(createClassLoader(), "ImportWildcard.jav");
var clazz = classFiles.get("ImportWildcard"); var clazz = classFiles.get("ImportWildcard");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testAssign() throws Exception { public void testAssign() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Assign.jav"); var classFiles = generateClassFiles(createClassLoader(), "Assign.jav");
var clazz = classFiles.get("Assign"); var clazz = classFiles.get("Assign");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
var m = clazz.getDeclaredMethod("m"); var m = clazz.getDeclaredMethod("m");
@@ -1195,56 +1198,56 @@ public class TestComplete {
@Test @Test
public void testBug122() throws Exception { public void testBug122() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug122.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug122.jav");
var clazz = classFiles.get("Bug122"); var clazz = classFiles.get("Bug122");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testBug123() throws Exception { public void testBug123() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug123.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug123.jav");
var clazz = classFiles.get("Bug123"); var clazz = classFiles.get("Bug123");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testBug125() throws Exception { public void testBug125() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug125.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug125.jav");
var clazz = classFiles.get("Bug125"); var clazz = classFiles.get("Bug125");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testBug112() throws Exception { public void testBug112() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug112.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug112.jav");
var clazz = classFiles.get("Bug112"); var clazz = classFiles.get("Bug112");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testBug285() throws Exception { public void testBug285() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug285.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug285.jav");
var clazz = classFiles.get("Bug285"); var clazz = classFiles.get("Bug285");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testBug290() throws Exception { public void testBug290() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug290A.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug290A.jav");
var clazz = classFiles.get("Bug290A"); var clazz = classFiles.get("Bug290A");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testBug293() throws Exception { public void testBug293() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug293.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug293.jav");
var clazz = classFiles.get("Bug293"); var clazz = classFiles.get("Bug293");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testBug295() throws Exception { public void testBug295() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug295.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug295.jav");
var clazz = classFiles.get("Bug295"); var clazz = classFiles.get("Bug295");
var instance = clazz.getDeclaredConstructor(Integer.class, Integer.class, Integer.class).newInstance(1, 2, 3); var instance = clazz.getDeclaredConstructor(Integer.class, Integer.class, Integer.class).newInstance(1, 2, 3);
assertEquals(1, clazz.getDeclaredField("a").get(instance)); assertEquals(1, clazz.getDeclaredField("a").get(instance));
@@ -1254,14 +1257,14 @@ public class TestComplete {
@Test @Test
public void testBug296() throws Exception { public void testBug296() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug296.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug296.jav");
var clazz = classFiles.get("Bug296"); var clazz = classFiles.get("Bug296");
clazz.getDeclaredMethod("m1").invoke(null); clazz.getDeclaredMethod("m1").invoke(null);
} }
@Test @Test
public void testBug297() throws Exception { public void testBug297() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug297.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug297.jav");
var clazz = classFiles.get("Bug297"); var clazz = classFiles.get("Bug297");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
clazz.getDeclaredMethod("exec").invoke(instance); clazz.getDeclaredMethod("exec").invoke(instance);
@@ -1269,14 +1272,14 @@ public class TestComplete {
@Test @Test
public void testBug298() throws Exception { public void testBug298() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug298.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug298.jav");
var clazz = classFiles.get("Bug298"); var clazz = classFiles.get("Bug298");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testBug300() throws Exception { public void testBug300() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug300.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug300.jav");
var clazz = classFiles.get("Bug300"); var clazz = classFiles.get("Bug300");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
assertEquals("Base", clazz.getDeclaredMethod("m").invoke(instance)); assertEquals("Base", clazz.getDeclaredMethod("m").invoke(instance));
@@ -1284,28 +1287,28 @@ public class TestComplete {
@Test @Test
public void testBug301() throws Exception { public void testBug301() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug301.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug301.jav");
var clazz = classFiles.get("Bug301"); var clazz = classFiles.get("Bug301");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testBug302() throws Exception { public void testBug302() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug302.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug302.jav");
var clazz = classFiles.get("Bug302"); var clazz = classFiles.get("Bug302");
clazz.getDeclaredMethod("m").invoke(null); clazz.getDeclaredMethod("m").invoke(null);
} }
@Test @Test
public void testBug306() throws Exception { public void testBug306() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug306.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug306.jav");
var clazz = classFiles.get("Bug306"); var clazz = classFiles.get("Bug306");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testBug307() throws Exception { public void testBug307() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug307.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug307.jav");
var clazz = classFiles.get("Bug307"); var clazz = classFiles.get("Bug307");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
clazz.getDeclaredMethod("main").invoke(instance); clazz.getDeclaredMethod("main").invoke(instance);
@@ -1313,7 +1316,7 @@ public class TestComplete {
@Test @Test
public void testBug309() throws Exception { public void testBug309() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug309.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug309.jav");
var clazz = classFiles.get("Bug309"); var clazz = classFiles.get("Bug309");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
clazz.getDeclaredMethod("main").invoke(instance); clazz.getDeclaredMethod("main").invoke(instance);
@@ -1321,7 +1324,7 @@ public class TestComplete {
@Test @Test
public void testBug310() throws Exception { public void testBug310() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug310.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug310.jav");
var clazz = classFiles.get("Bug310"); var clazz = classFiles.get("Bug310");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
assertEquals("3", clazz.getDeclaredMethod("toString").invoke(instance)); assertEquals("3", clazz.getDeclaredMethod("toString").invoke(instance));
@@ -1329,7 +1332,7 @@ public class TestComplete {
@Test @Test
public void testBug311() throws Exception { public void testBug311() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug311.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug311.jav");
var clazz = classFiles.get("Bug311"); var clazz = classFiles.get("Bug311");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
clazz.getDeclaredMethod("toString").invoke(instance); clazz.getDeclaredMethod("toString").invoke(instance);
@@ -1337,7 +1340,7 @@ public class TestComplete {
@Test @Test
public void testBug312() throws Exception { public void testBug312() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug312.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug312.jav");
var clazz = classFiles.get("Bug312"); var clazz = classFiles.get("Bug312");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
clazz.getDeclaredMethod("main").invoke(instance); clazz.getDeclaredMethod("main").invoke(instance);
@@ -1345,7 +1348,7 @@ public class TestComplete {
@Test @Test
public void testBug314() throws Exception { public void testBug314() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug314.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug314.jav");
var clazz = classFiles.get("Bug314"); var clazz = classFiles.get("Bug314");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
@@ -1356,7 +1359,7 @@ public class TestComplete {
@Test @Test
public void testBug325() throws Exception { public void testBug325() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug325.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug325.jav");
var clazz = classFiles.get("Bug325"); var clazz = classFiles.get("Bug325");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
clazz.getDeclaredMethod("main").invoke(instance); clazz.getDeclaredMethod("main").invoke(instance);
@@ -1364,14 +1367,14 @@ public class TestComplete {
@Test @Test
public void testBug326() throws Exception { public void testBug326() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug326.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug326.jav");
var clazz = classFiles.get("Bug326"); var clazz = classFiles.get("Bug326");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testBug328() throws Exception { public void testBug328() throws Exception {
var loader = new ByteArrayClassLoader(); var loader = createClassLoader();
loader.loadClass(TestCodegen.path.resolve("Bug328B.class")); loader.loadClass(TestCodegen.path.resolve("Bug328B.class"));
var classFiles = generateClassFiles(loader, "Bug328.jav"); var classFiles = generateClassFiles(loader, "Bug328.jav");
var clazz = classFiles.get("Bug328"); var clazz = classFiles.get("Bug328");
@@ -1380,21 +1383,21 @@ public class TestComplete {
@Test @Test
public void testBug332() throws Exception { public void testBug332() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug332.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug332.jav");
var clazz = classFiles.get("Bug332"); var clazz = classFiles.get("Bug332");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testBug333() throws Exception { public void testBug333() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug333.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug333.jav");
var clazz = classFiles.get("Bug333"); var clazz = classFiles.get("Bug333");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testBug337() throws Exception { public void testBug337() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug337.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug337.jav");
var clazz = classFiles.get("Bug337"); var clazz = classFiles.get("Bug337");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
clazz.getDeclaredMethod("main").invoke(instance); clazz.getDeclaredMethod("main").invoke(instance);
@@ -1402,15 +1405,50 @@ public class TestComplete {
@Test @Test
public void testBug338() throws Exception { public void testBug338() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug338.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug338.jav");
var clazz = classFiles.get("Bug338"); var clazz = classFiles.get("Bug338");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test @Test
public void testBug343() throws Exception { public void testBug343() throws Exception {
var classFiles = generateClassFiles(new ByteArrayClassLoader(), "Bug343.jav"); var classFiles = generateClassFiles(createClassLoader(), "Bug343.jav");
var clazz = classFiles.get("Bug343"); var clazz = classFiles.get("Bug343");
var instance = clazz.getDeclaredConstructor().newInstance(); var instance = clazz.getDeclaredConstructor().newInstance();
} }
@Test
public void testBug363() throws Exception{
var classFiles = generateClassFiles(createClassLoader(), "Bug363.jav");
var clazz = classFiles.get("Bug363");
var instance = clazz.getDeclaredConstructor().newInstance();
var test = clazz.getDeclaredMethod("test");
assertEquals("ABC", test.invoke(instance));
}
@Test
public void testBug364() throws Exception {
var classFiles = generateClassFiles(createClassLoader(), "Bug364.jav");
var clazz = classFiles.get("Bug364");
var instance = clazz.getDeclaredConstructor().newInstance();
assertEquals("ABC", clazz.getDeclaredMethod("main").invoke(instance));
}
@Test
public void testBug365() throws Exception {
var classFiles = generateClassFiles(createClassLoader(), "Bug365.jav");
var clazz = classFiles.get("Bug365");
var instance = clazz.getDeclaredConstructor().newInstance();
var m = clazz.getDeclaredMethod("ex1");
assertEquals("ABC", m.invoke(instance));
var ex2 = clazz.getDeclaredMethod("ex2");
assertEquals("CBA", ex2.invoke(instance));
}
@Test
public void testBug366() throws Exception {
var classFiles = generateClassFiles(createClassLoader(), "Bug366.jav");
var clazz = classFiles.get("Bug366");
var m = clazz.getDeclaredMethod("test");
assertEquals(30, m.invoke(null));
}
} }

View File

@@ -1,6 +1,6 @@
import de.dhbwstuttgart.core.JavaTXCompiler; import de.dhbwstuttgart.core.JavaTXCompiler;
import org.junit.Ignore; import org.junit.jupiter.api.Disabled;
import org.junit.Test; import org.junit.jupiter.api.Test;
import java.io.File; import java.io.File;
import java.util.List; import java.util.List;
@@ -24,7 +24,7 @@ public class TestPackages {
} }
@Test @Test
@Ignore("This doesn't work") @Disabled("This doesn't work")
public void testPackagesCircular() throws Exception { public void testPackagesCircular() throws Exception {
var cmp = new JavaTXCompiler( var cmp = new JavaTXCompiler(
List.of( List.of(

View File

@@ -4,7 +4,7 @@ import de.dhbwstuttgart.syntaxtree.SourceFile;
import de.dhbwstuttgart.typedeployment.TypeInsert; import de.dhbwstuttgart.typedeployment.TypeInsert;
import de.dhbwstuttgart.typedeployment.TypeInsertFactory; import de.dhbwstuttgart.typedeployment.TypeInsertFactory;
import de.dhbwstuttgart.typeinference.result.ResultSet; import de.dhbwstuttgart.typeinference.result.ResultSet;
import org.junit.Test; import org.junit.jupiter.api.Test;
import java.io.File; import java.io.File;
import java.nio.file.Path; import java.nio.file.Path;

View File

@@ -4,7 +4,7 @@ package astfactory;
import de.dhbwstuttgart.syntaxtree.ClassOrInterface; import de.dhbwstuttgart.syntaxtree.ClassOrInterface;
import de.dhbwstuttgart.syntaxtree.factory.ASTFactory; import de.dhbwstuttgart.syntaxtree.factory.ASTFactory;
import de.dhbwstuttgart.syntaxtree.type.GenericRefType; import de.dhbwstuttgart.syntaxtree.type.GenericRefType;
import org.junit.Test; import org.junit.jupiter.api.Test;
import java.lang.reflect.ParameterizedType; import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type; import java.lang.reflect.Type;
@@ -12,7 +12,8 @@ import java.lang.reflect.TypeVariable;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import static org.junit.Assert.*; import static org.junit.jupiter.api.Assertions.assertTrue;
public class ASTFactoryTest<A> extends HashMap<String, A>{ public class ASTFactoryTest<A> extends HashMap<String, A>{
@Test @Test

View File

@@ -3,7 +3,7 @@ package finiteClosure;
import de.dhbwstuttgart.parser.SyntaxTreeGenerator.FCGenerator; import de.dhbwstuttgart.parser.SyntaxTreeGenerator.FCGenerator;
import de.dhbwstuttgart.syntaxtree.ClassOrInterface; import de.dhbwstuttgart.syntaxtree.ClassOrInterface;
import de.dhbwstuttgart.syntaxtree.factory.ASTFactory; import de.dhbwstuttgart.syntaxtree.factory.ASTFactory;
import org.junit.Test; import org.junit.jupiter.api.Test;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;

View File

@@ -1,9 +1,5 @@
package syntaxtreegenerator; package syntaxtreegenerator;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.File; import java.io.File;
import java.io.FileFilter; import java.io.FileFilter;
import java.io.FileInputStream; import java.io.FileInputStream;
@@ -12,21 +8,23 @@ import java.io.ObjectOutputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import org.junit.BeforeClass; import org.junit.jupiter.api.BeforeAll;
import org.junit.Test; import org.junit.jupiter.api.Test;
import de.dhbwstuttgart.core.JavaTXCompiler; import de.dhbwstuttgart.core.JavaTXCompiler;
import de.dhbwstuttgart.exceptions.NotImplementedException; import de.dhbwstuttgart.exceptions.NotImplementedException;
import de.dhbwstuttgart.syntaxtree.SourceFile; import de.dhbwstuttgart.syntaxtree.SourceFile;
import de.dhbwstuttgart.syntaxtree.visual.ASTPrinter; import de.dhbwstuttgart.syntaxtree.visual.ASTPrinter;
import static org.junit.jupiter.api.Assertions.*;
/** /**
* Unit-Tests für den 'SyntaxTreeGenerator' aus dem Package 'parser' nach Vorbild der Klasse 'TestComplete' aus dem Test-Package 'targetast' * Unit-Tests für den 'SyntaxTreeGenerator' aus dem Package 'parser' nach Vorbild der Klasse 'TestComplete' aus dem Test-Package 'targetast'
*/ */
public class TestComplete { public class TestComplete {
private static HashMap<String, File[]> javFiles = new HashMap<>(); private static HashMap<String, File[]> javFiles = new HashMap<>();
@BeforeClass @BeforeAll
public static void setUp() { public static void setUp() {
final String testFileDirectory = "resources/bytecode/javFiles/"; final String testFileDirectory = "resources/bytecode/javFiles/";
final String expectedASTDirectory = "resources/syntaxtreegenerator/"; final String expectedASTDirectory = "resources/syntaxtreegenerator/";
@@ -353,7 +351,7 @@ public class TestComplete {
assertEquals("Comparing expected and resulting AST for mathStrucInteger.jav", expectedAST, resultingAST); assertEquals("Comparing expected and resulting AST for mathStrucInteger.jav", expectedAST, resultingAST);
} catch (Exception exc) { } catch (Exception exc) {
exc.printStackTrace(); exc.printStackTrace();
assertTrue("An error occured while generating the AST for mathStrucInteger.jav", exc instanceof NotImplementedException); assertInstanceOf(NotImplementedException.class, exc);
} }
} }

View File

@@ -1,15 +1,15 @@
package syntaxtreegenerator; package syntaxtreegenerator;
import static org.junit.Assert.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.Assert.fail; import static org.junit.jupiter.api.Assertions.fail;
import java.io.File; import java.io.File;
import java.io.FileFilter; import java.io.FileFilter;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.util.HashMap; import java.util.HashMap;
import org.junit.BeforeClass; import org.junit.jupiter.api.BeforeAll;
import org.junit.Test; import org.junit.jupiter.api.Test;
import de.dhbwstuttgart.core.JavaTXCompiler; import de.dhbwstuttgart.core.JavaTXCompiler;
import de.dhbwstuttgart.syntaxtree.visual.ASTPrinter; import de.dhbwstuttgart.syntaxtree.visual.ASTPrinter;
@@ -17,7 +17,7 @@ import de.dhbwstuttgart.syntaxtree.visual.ASTPrinter;
public class TestNewFeatures { public class TestNewFeatures {
private static HashMap<String, File[]> javFiles = new HashMap<>(); private static HashMap<String, File[]> javFiles = new HashMap<>();
@BeforeClass @BeforeAll
public static void setUp() { public static void setUp() {
final String testFileDirectory = "resources/syntaxtreegenerator/javFiles/"; final String testFileDirectory = "resources/syntaxtreegenerator/javFiles/";
final String expectedASTDirectory = "resources/syntaxtreegenerator/"; final String expectedASTDirectory = "resources/syntaxtreegenerator/";

View File

@@ -2,7 +2,6 @@ package targetast;
import com.google.common.reflect.TypeToken; import com.google.common.reflect.TypeToken;
import de.dhbwstuttgart.core.JavaTXCompiler; import de.dhbwstuttgart.core.JavaTXCompiler;
import de.dhbwstuttgart.environment.ByteArrayClassLoader;
import de.dhbwstuttgart.parser.NullToken; import de.dhbwstuttgart.parser.NullToken;
import de.dhbwstuttgart.parser.scope.JavaClassName; import de.dhbwstuttgart.parser.scope.JavaClassName;
import de.dhbwstuttgart.syntaxtree.*; import de.dhbwstuttgart.syntaxtree.*;
@@ -10,13 +9,13 @@ import de.dhbwstuttgart.syntaxtree.type.RefType;
import de.dhbwstuttgart.target.generate.ASTToTargetAST; import de.dhbwstuttgart.target.generate.ASTToTargetAST;
import de.dhbwstuttgart.target.tree.TargetStructure; import de.dhbwstuttgart.target.tree.TargetStructure;
import de.dhbwstuttgart.typeinference.result.ResultSet; import de.dhbwstuttgart.typeinference.result.ResultSet;
import org.junit.Ignore; import org.junit.jupiter.api.Disabled;
import org.junit.Test; import org.junit.jupiter.api.Test;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.*; import java.util.*;
import static org.junit.Assert.*; import static org.junit.jupiter.api.Assertions.*;
public class ASTToTypedTargetAST { public class ASTToTypedTargetAST {
@@ -24,7 +23,7 @@ public class ASTToTypedTargetAST {
public void emptyClass() { public void emptyClass() {
ClassOrInterface emptyClass = new ClassOrInterface(0, new JavaClassName("EmptyClass"), new ArrayList<>(), Optional.empty(), Optional.empty(), new ArrayList<>(), new ArrayList<>(), new GenericDeclarationList(new ArrayList<>(), new NullToken()), new RefType(new JavaClassName("Object"), new NullToken()), false, false, new ArrayList<>(), new ArrayList<>(), new NullToken(), null); ClassOrInterface emptyClass = new ClassOrInterface(0, new JavaClassName("EmptyClass"), new ArrayList<>(), Optional.empty(), Optional.empty(), new ArrayList<>(), new ArrayList<>(), new GenericDeclarationList(new ArrayList<>(), new NullToken()), new RefType(new JavaClassName("Object"), new NullToken()), false, false, new ArrayList<>(), new ArrayList<>(), new NullToken(), null);
ResultSet emptyResultSet = new ResultSet(new HashSet<>()); ResultSet emptyResultSet = new ResultSet(new HashSet<>());
TargetStructure emptyTargetClass = new ASTToTargetAST(List.of(emptyResultSet)).convert(emptyClass); TargetStructure emptyTargetClass = new ASTToTargetAST(List.of(emptyResultSet), TestCodegen.createClassLoader()).convert(emptyClass);
assert emptyTargetClass.getName().equals("EmptyClass"); assert emptyTargetClass.getName().equals("EmptyClass");
assert emptyTargetClass.methods().size() == 0; assert emptyTargetClass.methods().size() == 0;
assert emptyTargetClass.fields().size() == 0; assert emptyTargetClass.fields().size() == 0;
@@ -32,13 +31,14 @@ public class ASTToTypedTargetAST {
@Test @Test
public void overloading() throws Exception { public void overloading() throws Exception {
var classLoader = TestCodegen.createClassLoader();
var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Overloading.jav").toFile(); var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Overloading.jav").toFile();
var compiler = new JavaTXCompiler(file); var compiler = new JavaTXCompiler(file);
var resultSet = compiler.typeInference(file); var resultSet = compiler.typeInference(file);
var converter = new ASTToTargetAST(compiler, resultSet); var converter = new ASTToTargetAST(compiler, resultSet, classLoader);
var classes = compiler.sourceFiles.get(file).getClasses(); var classes = compiler.sourceFiles.get(file).getClasses();
var classLoader = new ByteArrayClassLoader();
var overloading = TestCodegen.generateClass(converter.convert(classes.get(0)), classLoader); var overloading = TestCodegen.generateClass(converter.convert(classes.get(0)), classLoader);
var overloading2 = TestCodegen.generateClass(converter.convert(classes.get(1)), classLoader); var overloading2 = TestCodegen.generateClass(converter.convert(classes.get(1)), classLoader);
@@ -54,46 +54,54 @@ public class ASTToTypedTargetAST {
@Test @Test
public void tphsAndGenerics() throws Exception { public void tphsAndGenerics() throws Exception {
var classLoader = TestCodegen.createClassLoader();
var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Tph2.jav").toFile(); var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Tph2.jav").toFile();
var compiler = new JavaTXCompiler(file); var compiler = new JavaTXCompiler(file);
var resultSet = compiler.typeInference(file); var resultSet = compiler.typeInference(file);
var converter = new ASTToTargetAST(compiler, resultSet); var converter = new ASTToTargetAST(compiler, resultSet, classLoader);
var classes = compiler.sourceFiles.get(file).getClasses(); var classes = compiler.sourceFiles.get(file).getClasses();
var tphAndGenerics = TestCodegen.generateClass(converter.convert(classes.get(0)), new ByteArrayClassLoader()); var tphAndGenerics = TestCodegen.generateClass(converter.convert(classes.get(0)), classLoader);
} }
@Test @Test
public void cycles() throws Exception { public void cycles() throws Exception {
var classLoader = TestCodegen.createClassLoader();
var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Cycle.jav").toFile(); var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Cycle.jav").toFile();
var compiler = new JavaTXCompiler(file); var compiler = new JavaTXCompiler(file);
var resultSet = compiler.typeInference(file); var resultSet = compiler.typeInference(file);
var converter = new ASTToTargetAST(compiler, resultSet); var converter = new ASTToTargetAST(compiler, resultSet, classLoader);
var classes = compiler.sourceFiles.get(file).getClasses(); var classes = compiler.sourceFiles.get(file).getClasses();
var cycle = TestCodegen.generateClass(converter.convert(classes.get(0)), new ByteArrayClassLoader()); var cycle = TestCodegen.generateClass(converter.convert(classes.get(0)), classLoader);
} }
@Test @Test
public void infimum() throws Exception { public void infimum() throws Exception {
var classLoader = TestCodegen.createClassLoader();
var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Infimum.jav").toFile(); var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Infimum.jav").toFile();
var compiler = new JavaTXCompiler(file); var compiler = new JavaTXCompiler(file);
var resultSet = compiler.typeInference(file); var resultSet = compiler.typeInference(file);
var converter = new ASTToTargetAST(compiler, resultSet); var converter = new ASTToTargetAST(compiler, resultSet, classLoader);
var classes = compiler.sourceFiles.get(file).getClasses(); var classes = compiler.sourceFiles.get(file).getClasses();
var infimum = TestCodegen.generateClass(converter.convert(classes.get(0)), new ByteArrayClassLoader()); var infimum = TestCodegen.generateClass(converter.convert(classes.get(0)), classLoader);
} }
@Test @Test
public void gen() throws Exception { public void gen() throws Exception {
var classLoader = TestCodegen.createClassLoader();
var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Gen.jav").toFile(); var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Gen.jav").toFile();
var compiler = new JavaTXCompiler(file); var compiler = new JavaTXCompiler(file);
var resultSet = compiler.typeInference(file); var resultSet = compiler.typeInference(file);
var converter = new ASTToTargetAST(compiler, resultSet); var converter = new ASTToTargetAST(compiler, resultSet, classLoader);
var classes = compiler.sourceFiles.get(file).getClasses(); var classes = compiler.sourceFiles.get(file).getClasses();
var generics = TestCodegen.generateClass(converter.convert(classes.get(0)), new ByteArrayClassLoader()); var generics = TestCodegen.generateClass(converter.convert(classes.get(0)), TestCodegen.createClassLoader());
var m = generics.getDeclaredMethod("m", Vector.class); var m = generics.getDeclaredMethod("m", Vector.class);
var mReturnType = m.getGenericReturnType(); var mReturnType = m.getGenericReturnType();
assertEquals(mReturnType, m.getParameters()[0].getParameterizedType()); assertEquals(mReturnType, m.getParameters()[0].getParameterizedType());
@@ -103,13 +111,15 @@ public class ASTToTypedTargetAST {
@Test @Test
public void definedGenerics() throws Exception { public void definedGenerics() throws Exception {
var classLoader = TestCodegen.createClassLoader();
var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Generics.jav").toFile(); var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Generics.jav").toFile();
var compiler = new JavaTXCompiler(file); var compiler = new JavaTXCompiler(file);
var resultSet = compiler.typeInference(file); var resultSet = compiler.typeInference(file);
var converter = new ASTToTargetAST(compiler, resultSet); var converter = new ASTToTargetAST(compiler, resultSet, classLoader);
var classes = compiler.sourceFiles.get(file).getClasses(); var classes = compiler.sourceFiles.get(file).getClasses();
var generics = TestCodegen.generateClass(converter.convert(classes.get(0)), new ByteArrayClassLoader()); var generics = TestCodegen.generateClass(converter.convert(classes.get(0)), classLoader);
var B = generics.getTypeParameters()[0]; var B = generics.getTypeParameters()[0];
var mt1 = generics.getDeclaredMethod("mt1", Object.class); var mt1 = generics.getDeclaredMethod("mt1", Object.class);
var constructor = generics.getDeclaredConstructor(Object.class); var constructor = generics.getDeclaredConstructor(Object.class);
@@ -121,13 +131,15 @@ public class ASTToTypedTargetAST {
@Test @Test
public void definedGenerics2() throws Exception { public void definedGenerics2() throws Exception {
var classLoader = TestCodegen.createClassLoader();
var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Generics2.jav").toFile(); var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Generics2.jav").toFile();
var compiler = new JavaTXCompiler(file); var compiler = new JavaTXCompiler(file);
var resultSet = compiler.typeInference(file); var resultSet = compiler.typeInference(file);
var converter = new ASTToTargetAST(compiler, resultSet); var converter = new ASTToTargetAST(compiler, resultSet, classLoader);
var classes = compiler.sourceFiles.get(file).getClasses(); var classes = compiler.sourceFiles.get(file).getClasses();
var generics2 = TestCodegen.generateClass(converter.convert(classes.get(0)), new ByteArrayClassLoader()); var generics2 = TestCodegen.generateClass(converter.convert(classes.get(0)), classLoader);
assertEquals(generics2.getTypeParameters()[0].getBounds()[0], String.class); assertEquals(generics2.getTypeParameters()[0].getBounds()[0], String.class);
var m = generics2.getDeclaredMethod("m1", Object.class); var m = generics2.getDeclaredMethod("m1", Object.class);
assertEquals(m.getTypeParameters()[0].getBounds()[0], Integer.class); assertEquals(m.getTypeParameters()[0].getBounds()[0], Integer.class);
@@ -135,26 +147,30 @@ public class ASTToTypedTargetAST {
} }
@Test @Test
@Ignore("Not implemented") @Disabled("Not implemented")
public void definedGenerics3() throws Exception { public void definedGenerics3() throws Exception {
var classLoader = TestCodegen.createClassLoader();
var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Generics3.jav").toFile(); var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Generics3.jav").toFile();
var compiler = new JavaTXCompiler(file); var compiler = new JavaTXCompiler(file);
var resultSet = compiler.typeInference(file); var resultSet = compiler.typeInference(file);
var converter = new ASTToTargetAST(compiler, resultSet); var converter = new ASTToTargetAST(compiler, resultSet, classLoader);
var classes = compiler.sourceFiles.get(file).getClasses(); var classes = compiler.sourceFiles.get(file).getClasses();
var generics3 = TestCodegen.generateClass(converter.convert(classes.get(0)), new ByteArrayClassLoader()); var generics3 = TestCodegen.generateClass(converter.convert(classes.get(0)), classLoader);
} }
@Test @Test
public void definedGenerics4() throws Exception { public void definedGenerics4() throws Exception {
var classLoader = TestCodegen.createClassLoader();
var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Generics4.jav").toFile(); var file = Path.of(System.getProperty("user.dir"), "/resources/bytecode/javFiles/Generics4.jav").toFile();
var compiler = new JavaTXCompiler(file); var compiler = new JavaTXCompiler(file);
var resultSet = compiler.typeInference(file); var resultSet = compiler.typeInference(file);
var converter = new ASTToTargetAST(compiler, resultSet); var converter = new ASTToTargetAST(compiler, resultSet, classLoader);
var classes = compiler.sourceFiles.get(file).getClasses(); var classes = compiler.sourceFiles.get(file).getClasses();
var generics4 = TestCodegen.generateClass(converter.convert(classes.get(0)), new ByteArrayClassLoader()); var generics4 = TestCodegen.generateClass(converter.convert(classes.get(0)), classLoader);
// var instance = generics4.getDeclaredConstructor().newInstance(); // var instance = generics4.getDeclaredConstructor().newInstance();
// var method = generics4.getDeclaredMethod("m2", Object.class); // var method = generics4.getDeclaredMethod("m2", Object.class);

View File

@@ -1,22 +1,21 @@
package targetast; package targetast;
import de.dhbwstuttgart.environment.ByteArrayClassLoader; import org.junit.jupiter.api.BeforeAll;
import org.junit.BeforeClass; import org.junit.jupiter.api.Test;
import org.junit.Test;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import static org.junit.Assert.assertFalse; import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.Assert.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
public class GreaterEqualTest { public class GreaterEqualTest {
static Class<?> classToTest; static Class<?> classToTest;
static Object instance; static Object instance;
@BeforeClass @BeforeAll
public static void beforeClass() throws Exception { public static void beforeClass() throws Exception {
var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "GreaterEqual.jav"); var classFiles = TestCodegen.generateClassFiles(TestCodegen.createClassLoader(), "GreaterEqual.jav");
classToTest = classFiles.get("GreaterEqual"); classToTest = classFiles.get("GreaterEqual");
instance = classToTest.getDeclaredConstructor().newInstance(); instance = classToTest.getDeclaredConstructor().newInstance();
} }

View File

@@ -1,21 +1,20 @@
package targetast; package targetast;
import de.dhbwstuttgart.environment.ByteArrayClassLoader; import org.junit.jupiter.api.BeforeAll;
import org.junit.BeforeClass; import org.junit.jupiter.api.Test;
import org.junit.Test;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import static org.junit.Assert.assertFalse; import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.Assert.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
public class GreaterThanTest { public class GreaterThanTest {
static Class<?> classToTest; static Class<?> classToTest;
static Object instance; static Object instance;
@BeforeClass @BeforeAll
public static void beforeClass() throws Exception { public static void beforeClass() throws Exception {
var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "GreaterThan.jav"); var classFiles = TestCodegen.generateClassFiles(TestCodegen.createClassLoader(), "GreaterThan.jav");
classToTest = classFiles.get("GreaterThan"); classToTest = classFiles.get("GreaterThan");
instance = classToTest.getDeclaredConstructor().newInstance(); instance = classToTest.getDeclaredConstructor().newInstance();
} }

View File

@@ -1,22 +1,20 @@
package targetast; package targetast;
import de.dhbwstuttgart.environment.ByteArrayClassLoader; import org.junit.jupiter.api.BeforeAll;
import org.junit.BeforeClass; import org.junit.jupiter.api.Test;
import org.junit.Test;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.nio.file.Path;
import java.util.Vector; import java.util.Vector;
import static org.junit.Assert.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
public class InheritTest { public class InheritTest {
private static Class<?> classToTest, classToTestAA, classToTestBB, classToTestCC, classToTestDD; private static Class<?> classToTest, classToTestAA, classToTestBB, classToTestCC, classToTestDD;
private static Object instanceOfClass, instanceOfClassAA, instanceOfClassBB, instanceOfClassCC, instanceOfClassDD; private static Object instanceOfClass, instanceOfClassAA, instanceOfClassBB, instanceOfClassCC, instanceOfClassDD;
@BeforeClass @BeforeAll
public static void setUpBeforeClass() throws Exception { public static void setUpBeforeClass() throws Exception {
var classLoader = new ByteArrayClassLoader(); var classLoader = TestCodegen.createClassLoader();
var classes = TestCodegen.generateClassFiles(classLoader, "Inherit.jav"); var classes = TestCodegen.generateClassFiles(classLoader, "Inherit.jav");
classToTest = classes.get("Inherit"); classToTest = classes.get("Inherit");
@@ -35,72 +33,72 @@ public class InheritTest {
@Test @Test
public void testmainAA() throws Exception { public void testmainAA() throws Exception {
Method m = classToTestAA.getDeclaredMethod("m", Integer.class); Method m = classToTestAA.getDeclaredMethod("m", Integer.class);
assertEquals(m.invoke(instanceOfClassAA, 5), "AA"); assertEquals("AA", m.invoke(instanceOfClassAA, 5));
Method main = classToTest.getDeclaredMethod("main", classToTestAA, Integer.class); Method main = classToTest.getDeclaredMethod("main", classToTestAA, Integer.class);
assertEquals(main.invoke(instanceOfClass, instanceOfClassAA, 5), "AA"); assertEquals("AA", main.invoke(instanceOfClass, instanceOfClassAA, 5));
} }
@Test @Test
public void testmainBB() throws Exception { public void testmainBB() throws Exception {
Method m = classToTestAA.getDeclaredMethod("m", Integer.class); Method m = classToTestAA.getDeclaredMethod("m", Integer.class);
assertEquals(m.invoke(instanceOfClassBB, 5), "AA"); assertEquals("AA", m.invoke(instanceOfClassBB, 5));
Method main = classToTest.getDeclaredMethod("main", classToTestAA, Integer.class); Method main = classToTest.getDeclaredMethod("main", classToTestAA, Integer.class);
assertEquals(main.invoke(instanceOfClass, instanceOfClassBB, 5), "AA"); assertEquals("AA", main.invoke(instanceOfClass, instanceOfClassBB, 5));
} }
@Test @Test
public void testmainCC() throws Exception { public void testmainCC() throws Exception {
Method m = classToTestCC.getDeclaredMethod("m", Integer.class); Method m = classToTestCC.getDeclaredMethod("m", Integer.class);
assertEquals(m.invoke(instanceOfClassCC, 5), "CC"); assertEquals("CC", m.invoke(instanceOfClassCC, 5));
Method main = classToTest.getDeclaredMethod("main", classToTestCC, Integer.class); Method main = classToTest.getDeclaredMethod("main", classToTestCC, Integer.class);
assertEquals(main.invoke(instanceOfClass, instanceOfClassCC, 5), "CC"); assertEquals("CC", main.invoke(instanceOfClass, instanceOfClassCC, 5));
} }
@Test @Test
public void testmainDD() throws Exception { public void testmainDD() throws Exception {
Method m = classToTestCC.getDeclaredMethod("m", Integer.class); Method m = classToTestCC.getDeclaredMethod("m", Integer.class);
assertEquals(m.invoke(instanceOfClassDD, 5), "CC"); assertEquals("CC", m.invoke(instanceOfClassDD, 5));
Method main = classToTest.getDeclaredMethod("main", classToTestCC, Integer.class); Method main = classToTest.getDeclaredMethod("main", classToTestCC, Integer.class);
assertEquals(main.invoke(instanceOfClass, instanceOfClassDD, 5), "CC"); assertEquals("CC", main.invoke(instanceOfClass, instanceOfClassDD, 5));
} }
@Test @Test
public void testmainVectorAA() throws Exception { public void testmainVectorAA() throws Exception {
Method m = classToTestAA.getDeclaredMethod("m", Integer.class); Method m = classToTestAA.getDeclaredMethod("m", Integer.class);
assertEquals(m.invoke(instanceOfClassAA, 5), "AA"); assertEquals("AA", m.invoke(instanceOfClassAA, 5));
Vector v = new Vector<>(); Vector v = new Vector<>();
v.add(instanceOfClassAA); v.add(instanceOfClassAA);
Method main = classToTest.getDeclaredMethod("main", Vector.class, Integer.class); Method main = classToTest.getDeclaredMethod("main", Vector.class, Integer.class);
assertEquals(main.invoke(instanceOfClass, v, 5), "AA"); assertEquals("AA", main.invoke(instanceOfClass, v, 5));
} }
@Test @Test
public void testmainVectorBB() throws Exception { public void testmainVectorBB() throws Exception {
Method m = classToTestAA.getDeclaredMethod("m", Integer.class); Method m = classToTestAA.getDeclaredMethod("m", Integer.class);
assertEquals(m.invoke(instanceOfClassBB, 5), "AA"); assertEquals("AA", m.invoke(instanceOfClassBB, 5));
Vector v = new Vector<>(); Vector v = new Vector<>();
v.add(instanceOfClassBB); v.add(instanceOfClassBB);
Method main = classToTest.getDeclaredMethod("main", Vector.class, Integer.class); Method main = classToTest.getDeclaredMethod("main", Vector.class, Integer.class);
assertEquals(main.invoke(instanceOfClass, v, 5), "AA"); assertEquals("AA", main.invoke(instanceOfClass, v, 5));
} }
@Test @Test
public void testmainVectorCC() throws Exception { public void testmainVectorCC() throws Exception {
Method m = classToTestCC.getDeclaredMethod("m", Integer.class); Method m = classToTestCC.getDeclaredMethod("m", Integer.class);
assertEquals(m.invoke(instanceOfClassCC, 5), "CC"); assertEquals("CC", m.invoke(instanceOfClassCC, 5));
Vector v = new Vector<>(); Vector v = new Vector<>();
v.add(instanceOfClassCC); v.add(instanceOfClassCC);
Method main = classToTest.getDeclaredMethod("main", Vector.class, Integer.class); Method main = classToTest.getDeclaredMethod("main", Vector.class, Integer.class);
assertEquals(main.invoke(instanceOfClass, v, 5), "CC"); assertEquals("CC", main.invoke(instanceOfClass, v, 5));
} }
@Test @Test
public void testmainVectorDD() throws Exception { public void testmainVectorDD() throws Exception {
Method m = classToTestCC.getDeclaredMethod("m", Integer.class); Method m = classToTestCC.getDeclaredMethod("m", Integer.class);
assertEquals(m.invoke(instanceOfClassDD, 5), "CC"); assertEquals("CC", m.invoke(instanceOfClassDD, 5));
Vector v = new Vector<>(); Vector v = new Vector<>();
v.add(instanceOfClassDD); v.add(instanceOfClassDD);
Method main = classToTest.getDeclaredMethod("main", Vector.class, Integer.class); Method main = classToTest.getDeclaredMethod("main", Vector.class, Integer.class);
assertEquals(main.invoke(instanceOfClass, v, 5), "CC"); assertEquals("CC", main.invoke(instanceOfClass, v, 5));
} }
} }

View File

@@ -1,23 +1,22 @@
package targetast; package targetast;
import de.dhbwstuttgart.environment.ByteArrayClassLoader; import org.junit.jupiter.api.BeforeAll;
import org.junit.BeforeClass; import org.junit.jupiter.api.Disabled;
import org.junit.Ignore; import org.junit.jupiter.api.Test;
import org.junit.Test;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Vector; import java.util.Vector;
import static org.junit.Assert.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
@Ignore("FIXME") @Disabled("FIXME")
public class InheritTest2 { public class InheritTest2 {
private static Class<?> classToTest, classToTestAA, classToTestBB, classToTestCC, classToTestDD; private static Class<?> classToTest, classToTestAA, classToTestBB, classToTestCC, classToTestDD;
private static Object instanceOfClass, instanceOfClassAA, instanceOfClassBB, instanceOfClassCC, instanceOfClassDD; private static Object instanceOfClass, instanceOfClassAA, instanceOfClassBB, instanceOfClassCC, instanceOfClassDD;
@BeforeClass @BeforeAll
public static void setUpBeforeClass() throws Exception { public static void setUpBeforeClass() throws Exception {
var classLoader = new ByteArrayClassLoader(); var classLoader = TestCodegen.createClassLoader();
classToTest = TestCodegen.generateClassFiles(classLoader, "Inherit2.jav").get("Inherit2"); classToTest = TestCodegen.generateClassFiles(classLoader, "Inherit2.jav").get("Inherit2");
classToTestAA = TestCodegen.generateClassFiles(classLoader, "AA.jav").get("AA"); classToTestAA = TestCodegen.generateClassFiles(classLoader, "AA.jav").get("AA");
classToTestBB = TestCodegen.generateClassFiles(classLoader, "BB.jav").get("BB"); classToTestBB = TestCodegen.generateClassFiles(classLoader, "BB.jav").get("BB");

View File

@@ -1,21 +1,20 @@
package targetast; package targetast;
import de.dhbwstuttgart.environment.ByteArrayClassLoader; import org.junit.jupiter.api.BeforeAll;
import org.junit.BeforeClass; import org.junit.jupiter.api.Test;
import org.junit.Test;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import static org.junit.Assert.assertFalse; import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.Assert.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
public class LessEqualTest { public class LessEqualTest {
static Class<?> classToTest; static Class<?> classToTest;
static Object instance; static Object instance;
@BeforeClass @BeforeAll
public static void beforeClass() throws Exception { public static void beforeClass() throws Exception {
var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "LessEqual.jav"); var classFiles = TestCodegen.generateClassFiles(TestCodegen.createClassLoader(), "LessEqual.jav");
classToTest = classFiles.get("LessEqual"); classToTest = classFiles.get("LessEqual");
instance = classToTest.getDeclaredConstructor().newInstance(); instance = classToTest.getDeclaredConstructor().newInstance();
} }

View File

@@ -1,21 +1,20 @@
package targetast; package targetast;
import de.dhbwstuttgart.environment.ByteArrayClassLoader; import org.junit.jupiter.api.BeforeAll;
import org.junit.BeforeClass; import org.junit.jupiter.api.Test;
import org.junit.Test;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import static org.junit.Assert.assertFalse; import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.Assert.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
public class LessThanTest { public class LessThanTest {
static Class<?> classToTest; static Class<?> classToTest;
static Object instance; static Object instance;
@BeforeClass @BeforeAll
public static void beforeClass() throws Exception { public static void beforeClass() throws Exception {
var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "LessThan.jav"); var classFiles = TestCodegen.generateClassFiles(TestCodegen.createClassLoader(), "LessThan.jav");
classToTest = classFiles.get("LessThan"); classToTest = classFiles.get("LessThan");
instance = classToTest.getDeclaredConstructor().newInstance(); instance = classToTest.getDeclaredConstructor().newInstance();
} }

View File

@@ -1,12 +1,12 @@
package targetast; package targetast;
import de.dhbwstuttgart.environment.ByteArrayClassLoader; import org.junit.jupiter.api.BeforeAll;
import org.junit.BeforeClass; import org.junit.jupiter.api.Test;
import org.junit.Test;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import static org.junit.Assert.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
public class OLTest { public class OLTest {
private static Class<?> classToTest; private static Class<?> classToTest;
@@ -14,9 +14,9 @@ public class OLTest {
private static Object instanceOfClass; private static Object instanceOfClass;
private static Object instanceOfClass1; private static Object instanceOfClass1;
@BeforeClass @BeforeAll
public static void setUpBeforeClass() throws Exception { public static void setUpBeforeClass() throws Exception {
var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "OL.jav"); var classFiles = TestCodegen.generateClassFiles(TestCodegen.createClassLoader(), "OL.jav");
classToTest = classFiles.get("OL"); classToTest = classFiles.get("OL");
instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); instanceOfClass = classToTest.getDeclaredConstructor().newInstance();
classToTest1 = classFiles.get("OLMain"); classToTest1 = classFiles.get("OLMain");

View File

@@ -1,20 +1,19 @@
package targetast; package targetast;
import de.dhbwstuttgart.environment.ByteArrayClassLoader; import org.junit.jupiter.api.BeforeAll;
import org.junit.BeforeClass; import org.junit.jupiter.api.Test;
import org.junit.Test;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import static org.junit.Assert.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
public class PostIncTest { public class PostIncTest {
private static Class<?> classToTest; private static Class<?> classToTest;
private static Object instanceOfClass; private static Object instanceOfClass;
@BeforeClass @BeforeAll
public static void setUpBeforeClass() throws Exception { public static void setUpBeforeClass() throws Exception {
var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "PostIncDec.jav"); var classFiles = TestCodegen.generateClassFiles(TestCodegen.createClassLoader(), "PostIncDec.jav");
classToTest = classFiles.get("PostIncDec"); classToTest = classFiles.get("PostIncDec");
instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); instanceOfClass = classToTest.getDeclaredConstructor().newInstance();
} }

View File

@@ -1,20 +1,19 @@
package targetast; package targetast;
import de.dhbwstuttgart.environment.ByteArrayClassLoader; import org.junit.jupiter.api.BeforeAll;
import org.junit.BeforeClass; import org.junit.jupiter.api.Test;
import org.junit.Test;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import static org.junit.Assert.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
public class PreIncTest { public class PreIncTest {
private static Class<?> classToTest; private static Class<?> classToTest;
private static Object instanceOfClass; private static Object instanceOfClass;
@BeforeClass @BeforeAll
public static void setUpBeforeClass() throws Exception { public static void setUpBeforeClass() throws Exception {
var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "PreInc.jav"); var classFiles = TestCodegen.generateClassFiles(TestCodegen.createClassLoader(), "PreInc.jav");
classToTest = classFiles.get("PreInc"); classToTest = classFiles.get("PreInc");
instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); instanceOfClass = classToTest.getDeclaredConstructor().newInstance();
} }

View File

@@ -1,22 +1,21 @@
package targetast; package targetast;
import de.dhbwstuttgart.environment.ByteArrayClassLoader; import org.junit.jupiter.api.BeforeAll;
import org.junit.BeforeClass; import org.junit.jupiter.api.Test;
import org.junit.Test;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Stack; import java.util.Stack;
import java.util.Vector; import java.util.Vector;
import static org.junit.Assert.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
public class PutTest { public class PutTest {
private static Class<?> classToTest; private static Class<?> classToTest;
private static Object instanceOfClass; private static Object instanceOfClass;
@BeforeClass @BeforeAll
public static void setUpBeforeClass() throws Exception { public static void setUpBeforeClass() throws Exception {
var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "Put.jav"); var classFiles = TestCodegen.generateClassFiles(TestCodegen.createClassLoader(), "Put.jav");
classToTest = classFiles.get("Put"); classToTest = classFiles.get("Put");
instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); instanceOfClass = classToTest.getDeclaredConstructor().newInstance();
} }

View File

@@ -2,7 +2,7 @@ package targetast;
import de.dhbwstuttgart.core.JavaTXCompiler; import de.dhbwstuttgart.core.JavaTXCompiler;
import de.dhbwstuttgart.bytecode.Codegen; import de.dhbwstuttgart.bytecode.Codegen;
import de.dhbwstuttgart.environment.ByteArrayClassLoader; import de.dhbwstuttgart.environment.DirectoryClassLoader;
import de.dhbwstuttgart.environment.IByteArrayClassLoader; import de.dhbwstuttgart.environment.IByteArrayClassLoader;
import de.dhbwstuttgart.parser.scope.JavaClassName; import de.dhbwstuttgart.parser.scope.JavaClassName;
import de.dhbwstuttgart.target.generate.ASTToTargetAST; import de.dhbwstuttgart.target.generate.ASTToTargetAST;
@@ -14,10 +14,10 @@ import de.dhbwstuttgart.target.tree.expression.*;
import de.dhbwstuttgart.target.tree.type.TargetFunNType; import de.dhbwstuttgart.target.tree.type.TargetFunNType;
import de.dhbwstuttgart.target.tree.type.TargetRefType; import de.dhbwstuttgart.target.tree.type.TargetRefType;
import de.dhbwstuttgart.target.tree.type.TargetType; import de.dhbwstuttgart.target.tree.type.TargetType;
import org.junit.Ignore; import org.junit.jupiter.api.Disabled;
import org.junit.Test; import org.junit.jupiter.api.Test;
import static org.junit.Assert.*; import static org.junit.jupiter.api.Assertions.*;
import org.objectweb.asm.Opcodes; import org.objectweb.asm.Opcodes;
@@ -37,6 +37,10 @@ public class TestCodegen {
Files.write(outputPath.resolve(name + ".class"), code); Files.write(outputPath.resolve(name + ".class"), code);
} }
public static IByteArrayClassLoader createClassLoader() {
return new DirectoryClassLoader(List.of(outputPath.toFile()), ClassLoader.getSystemClassLoader());
}
public static Path path = Path.of(System.getProperty("user.dir"), "resources/bytecode/javFiles/"); public static Path path = Path.of(System.getProperty("user.dir"), "resources/bytecode/javFiles/");
public static Map<String, ? extends Class<?>> generateClassFiles(IByteArrayClassLoader classLoader, String... files) throws IOException, ClassNotFoundException { public static Map<String, ? extends Class<?>> generateClassFiles(IByteArrayClassLoader classLoader, String... files) throws IOException, ClassNotFoundException {
@@ -119,7 +123,7 @@ public class TestCodegen {
public void testEmptyClass() throws Exception { public void testEmptyClass() throws Exception {
var clazz = new TargetClass(Opcodes.ACC_PUBLIC, new JavaClassName("Empty")); var clazz = new TargetClass(Opcodes.ACC_PUBLIC, new JavaClassName("Empty"));
clazz.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "main", List.of(), null, new TargetBlock(List.of())); clazz.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "main", List.of(), null, new TargetBlock(List.of()));
generateClass(clazz, new ByteArrayClassLoader()).getDeclaredMethod("main").invoke(null); generateClass(clazz, createClassLoader()).getDeclaredMethod("main").invoke(null);
} }
@Test @Test
@@ -132,7 +136,7 @@ public class TestCodegen {
targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "mul", List.of(new MethodParameter(TargetType.Integer, "a"), new MethodParameter(TargetType.Integer, "b")), TargetType.Integer, new TargetBlock(List.of(new TargetReturn(new TargetBinaryOp.Mul(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "a"), new TargetLocalVar(TargetType.Integer, "b")))))); targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "mul", List.of(new MethodParameter(TargetType.Integer, "a"), new MethodParameter(TargetType.Integer, "b")), TargetType.Integer, new TargetBlock(List.of(new TargetReturn(new TargetBinaryOp.Mul(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "a"), new TargetLocalVar(TargetType.Integer, "b"))))));
targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "rem", List.of(new MethodParameter(TargetType.Integer, "a"), new MethodParameter(TargetType.Integer, "b")), TargetType.Integer, new TargetBlock(List.of(new TargetReturn(new TargetBinaryOp.Rem(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "a"), new TargetLocalVar(TargetType.Integer, "b")))))); targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "rem", List.of(new MethodParameter(TargetType.Integer, "a"), new MethodParameter(TargetType.Integer, "b")), TargetType.Integer, new TargetBlock(List.of(new TargetReturn(new TargetBinaryOp.Rem(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "a"), new TargetLocalVar(TargetType.Integer, "b"))))));
var clazz = generateClass(targetClass, new ByteArrayClassLoader()); var clazz = generateClass(targetClass, createClassLoader());
assertEquals(clazz.getDeclaredMethod("add", Integer.class, Integer.class).invoke(null, 10, 10), 20); assertEquals(clazz.getDeclaredMethod("add", Integer.class, Integer.class).invoke(null, 10, 10), 20);
assertEquals(clazz.getDeclaredMethod("sub", Integer.class, Integer.class).invoke(null, 20, 10), 10); assertEquals(clazz.getDeclaredMethod("sub", Integer.class, Integer.class).invoke(null, 20, 10), 10);
assertEquals(clazz.getDeclaredMethod("div", Integer.class, Integer.class).invoke(null, 20, 10), 2); assertEquals(clazz.getDeclaredMethod("div", Integer.class, Integer.class).invoke(null, 20, 10), 2);
@@ -148,7 +152,7 @@ public class TestCodegen {
targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "neg", List.of(new MethodParameter(TargetType.Integer, "a")), TargetType.Integer, new TargetBlock(List.of(new TargetReturn(new TargetUnaryOp.Negate(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "a")))))); targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "neg", List.of(new MethodParameter(TargetType.Integer, "a")), TargetType.Integer, new TargetBlock(List.of(new TargetReturn(new TargetUnaryOp.Negate(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "a"))))));
targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "add", List.of(new MethodParameter(TargetType.Integer, "a")), TargetType.Integer, new TargetBlock(List.of(new TargetReturn(new TargetUnaryOp.Add(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "a")))))); targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "add", List.of(new MethodParameter(TargetType.Integer, "a")), TargetType.Integer, new TargetBlock(List.of(new TargetReturn(new TargetUnaryOp.Add(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "a"))))));
var clazz = generateClass(targetClass, new ByteArrayClassLoader()); var clazz = generateClass(targetClass, createClassLoader());
assertEquals(clazz.getDeclaredMethod("not", Integer.class).invoke(null, 10), -11); assertEquals(clazz.getDeclaredMethod("not", Integer.class).invoke(null, 10), -11);
assertEquals(clazz.getDeclaredMethod("neg", Integer.class).invoke(null, 10), -10); assertEquals(clazz.getDeclaredMethod("neg", Integer.class).invoke(null, 10), -10);
assertEquals(clazz.getDeclaredMethod("add", Integer.class).invoke(null, 10), 10); assertEquals(clazz.getDeclaredMethod("add", Integer.class).invoke(null, 10), 10);
@@ -162,7 +166,7 @@ public class TestCodegen {
targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "and", List.of(new MethodParameter(TargetType.Boolean, "a"), new MethodParameter(TargetType.Boolean, "b")), TargetType.Boolean, new TargetBlock(List.of(new TargetReturn(new TargetBinaryOp.And(TargetType.Boolean, new TargetLocalVar(TargetType.Boolean, "a"), new TargetLocalVar(TargetType.Boolean, "b")))))); targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "and", List.of(new MethodParameter(TargetType.Boolean, "a"), new MethodParameter(TargetType.Boolean, "b")), TargetType.Boolean, new TargetBlock(List.of(new TargetReturn(new TargetBinaryOp.And(TargetType.Boolean, new TargetLocalVar(TargetType.Boolean, "a"), new TargetLocalVar(TargetType.Boolean, "b"))))));
targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "or", List.of(new MethodParameter(TargetType.Boolean, "a"), new MethodParameter(TargetType.Boolean, "b")), TargetType.Boolean, new TargetBlock(List.of(new TargetReturn(new TargetBinaryOp.Or(TargetType.Boolean, new TargetLocalVar(TargetType.Boolean, "a"), new TargetLocalVar(TargetType.Boolean, "b")))))); targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "or", List.of(new MethodParameter(TargetType.Boolean, "a"), new MethodParameter(TargetType.Boolean, "b")), TargetType.Boolean, new TargetBlock(List.of(new TargetReturn(new TargetBinaryOp.Or(TargetType.Boolean, new TargetLocalVar(TargetType.Boolean, "a"), new TargetLocalVar(TargetType.Boolean, "b"))))));
var clazz = generateClass(targetClass, new ByteArrayClassLoader()); var clazz = generateClass(targetClass, createClassLoader());
var and = clazz.getDeclaredMethod("and", Boolean.class, Boolean.class); var and = clazz.getDeclaredMethod("and", Boolean.class, Boolean.class);
var or = clazz.getDeclaredMethod("or", Boolean.class, Boolean.class); var or = clazz.getDeclaredMethod("or", Boolean.class, Boolean.class);
assertEquals(and.invoke(null, true, false), false); assertEquals(and.invoke(null, true, false), false);
@@ -176,7 +180,7 @@ public class TestCodegen {
public void testArithmeticConvert() throws Exception { public void testArithmeticConvert() throws Exception {
var targetClass = new TargetClass(Opcodes.ACC_PUBLIC, new JavaClassName("ArithmeticConvert")); var targetClass = new TargetClass(Opcodes.ACC_PUBLIC, new JavaClassName("ArithmeticConvert"));
targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "add", List.of(), TargetType.Long, new TargetBlock(List.of(new TargetReturn(new TargetBinaryOp.Add(TargetType.Long, new TargetLiteral.CharLiteral((char) 10), new TargetLiteral.LongLiteral((long) 20)))))); targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "add", List.of(), TargetType.Long, new TargetBlock(List.of(new TargetReturn(new TargetBinaryOp.Add(TargetType.Long, new TargetLiteral.CharLiteral((char) 10), new TargetLiteral.LongLiteral((long) 20))))));
var clazz = generateClass(targetClass, new ByteArrayClassLoader()); var clazz = generateClass(targetClass, createClassLoader());
assertEquals(clazz.getDeclaredMethod("add").invoke(null), (long) 30); assertEquals(clazz.getDeclaredMethod("add").invoke(null), (long) 30);
} }
@@ -185,7 +189,7 @@ public class TestCodegen {
var targetClass = new TargetClass(Opcodes.ACC_PUBLIC, new JavaClassName("HelloWorld")); var targetClass = new TargetClass(Opcodes.ACC_PUBLIC, new JavaClassName("HelloWorld"));
targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "helloWorld", List.of(), null, new TargetBlock(List.of(new TargetMethodCall(null, new TargetFieldVar(new TargetRefType("java.io.PrintStream"), new TargetRefType("java.lang.System"), true, new TargetClassName(new TargetRefType("java.lang.System")), "out"), List.of(new TargetLiteral.StringLiteral("Hello World!")), new TargetRefType("java.io.PrintStream"), "println", false, false, false)))); targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "helloWorld", List.of(), null, new TargetBlock(List.of(new TargetMethodCall(null, new TargetFieldVar(new TargetRefType("java.io.PrintStream"), new TargetRefType("java.lang.System"), true, new TargetClassName(new TargetRefType("java.lang.System")), "out"), List.of(new TargetLiteral.StringLiteral("Hello World!")), new TargetRefType("java.io.PrintStream"), "println", false, false, false))));
var clazz = generateClass(targetClass, new ByteArrayClassLoader()); var clazz = generateClass(targetClass, createClassLoader());
clazz.getDeclaredMethod("helloWorld").invoke(null); clazz.getDeclaredMethod("helloWorld").invoke(null);
} }
@@ -193,7 +197,7 @@ public class TestCodegen {
public void testIfStatement() throws Exception { public void testIfStatement() throws Exception {
var targetClass = new TargetClass(Opcodes.ACC_PUBLIC, new JavaClassName("IfStmt")); var targetClass = new TargetClass(Opcodes.ACC_PUBLIC, new JavaClassName("IfStmt"));
targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "ifStmt", List.of(new MethodParameter(TargetType.Integer, "val")), TargetType.Integer, new TargetBlock(List.of(new TargetIf(new TargetBinaryOp.Equal(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "val"), new TargetLiteral.IntLiteral(10)), new TargetReturn(new TargetLiteral.IntLiteral(1)), new TargetIf(new TargetBinaryOp.Less(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "val"), new TargetLiteral.IntLiteral(5)), new TargetReturn(new TargetLiteral.IntLiteral(2)), new TargetReturn(new TargetLiteral.IntLiteral(3))))))); targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "ifStmt", List.of(new MethodParameter(TargetType.Integer, "val")), TargetType.Integer, new TargetBlock(List.of(new TargetIf(new TargetBinaryOp.Equal(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "val"), new TargetLiteral.IntLiteral(10)), new TargetReturn(new TargetLiteral.IntLiteral(1)), new TargetIf(new TargetBinaryOp.Less(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "val"), new TargetLiteral.IntLiteral(5)), new TargetReturn(new TargetLiteral.IntLiteral(2)), new TargetReturn(new TargetLiteral.IntLiteral(3)))))));
var clazz = generateClass(targetClass, new ByteArrayClassLoader()); var clazz = generateClass(targetClass, createClassLoader());
var ifStmt = clazz.getDeclaredMethod("ifStmt", Integer.class); var ifStmt = clazz.getDeclaredMethod("ifStmt", Integer.class);
assertEquals(ifStmt.invoke(null, 10), 1); assertEquals(ifStmt.invoke(null, 10), 1);
assertEquals(ifStmt.invoke(null, 3), 2); assertEquals(ifStmt.invoke(null, 3), 2);
@@ -204,7 +208,7 @@ public class TestCodegen {
public void testFor() throws Exception { public void testFor() throws Exception {
var targetClass = new TargetClass(Opcodes.ACC_PUBLIC, new JavaClassName("For")); var targetClass = new TargetClass(Opcodes.ACC_PUBLIC, new JavaClassName("For"));
targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "forLoop", List.of(), TargetType.Integer, new TargetBlock(List.of(new TargetVarDecl(TargetType.Integer, "sum", new TargetLiteral.IntLiteral(0)), new TargetFor(List.of(new TargetVarDecl(TargetType.Integer, "i", new TargetLiteral.IntLiteral(0))), new TargetBinaryOp.Less(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "i"), new TargetLiteral.IntLiteral(10)), List.of(new TargetAssign(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "i"), new TargetBinaryOp.Add(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "i"), new TargetLiteral.IntLiteral(1)))), new TargetBlock(List.of(new TargetAssign(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "sum"), new TargetBinaryOp.Add(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "sum"), new TargetLocalVar(TargetType.Integer, "i")))))), new TargetReturn(new TargetLocalVar(TargetType.Integer, "sum"))))); targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "forLoop", List.of(), TargetType.Integer, new TargetBlock(List.of(new TargetVarDecl(TargetType.Integer, "sum", new TargetLiteral.IntLiteral(0)), new TargetFor(List.of(new TargetVarDecl(TargetType.Integer, "i", new TargetLiteral.IntLiteral(0))), new TargetBinaryOp.Less(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "i"), new TargetLiteral.IntLiteral(10)), List.of(new TargetAssign(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "i"), new TargetBinaryOp.Add(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "i"), new TargetLiteral.IntLiteral(1)))), new TargetBlock(List.of(new TargetAssign(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "sum"), new TargetBinaryOp.Add(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "sum"), new TargetLocalVar(TargetType.Integer, "i")))))), new TargetReturn(new TargetLocalVar(TargetType.Integer, "sum")))));
var clazz = generateClass(targetClass, new ByteArrayClassLoader()); var clazz = generateClass(targetClass, createClassLoader());
assertEquals(clazz.getDeclaredMethod("forLoop").invoke(null), 45); assertEquals(clazz.getDeclaredMethod("forLoop").invoke(null), 45);
} }
@@ -212,7 +216,7 @@ public class TestCodegen {
public void testWhile() throws Exception { public void testWhile() throws Exception {
var targetClass = new TargetClass(Opcodes.ACC_PUBLIC, new JavaClassName("While")); var targetClass = new TargetClass(Opcodes.ACC_PUBLIC, new JavaClassName("While"));
targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "whileLoop", List.of(), TargetType.Integer, new TargetBlock(List.of(new TargetVarDecl(TargetType.Integer, "i", new TargetLiteral.IntLiteral(0)), new TargetWhile(new TargetBinaryOp.Less(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "i"), new TargetLiteral.IntLiteral(10)), new TargetBlock(List.of(new TargetAssign(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "i"), new TargetBinaryOp.Add(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "i"), new TargetLiteral.IntLiteral(1)))))), new TargetReturn(new TargetLocalVar(TargetType.Integer, "i"))))); targetClass.addMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "whileLoop", List.of(), TargetType.Integer, new TargetBlock(List.of(new TargetVarDecl(TargetType.Integer, "i", new TargetLiteral.IntLiteral(0)), new TargetWhile(new TargetBinaryOp.Less(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "i"), new TargetLiteral.IntLiteral(10)), new TargetBlock(List.of(new TargetAssign(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "i"), new TargetBinaryOp.Add(TargetType.Integer, new TargetLocalVar(TargetType.Integer, "i"), new TargetLiteral.IntLiteral(1)))))), new TargetReturn(new TargetLocalVar(TargetType.Integer, "i")))));
var clazz = generateClass(targetClass, new ByteArrayClassLoader()); var clazz = generateClass(targetClass, createClassLoader());
assertEquals(clazz.getDeclaredMethod("whileLoop").invoke(null), 10); assertEquals(clazz.getDeclaredMethod("whileLoop").invoke(null), 10);
} }
@@ -235,7 +239,7 @@ public class TestCodegen {
new TargetReturn(new TargetLocalVar(TargetType.Integer, "res")) new TargetReturn(new TargetLocalVar(TargetType.Integer, "res"))
))); )));
var clazz = generateClass(targetClass, new ByteArrayClassLoader()); var clazz = generateClass(targetClass, createClassLoader());
var m = clazz.getDeclaredMethod("switchClassic", Integer.class); var m = clazz.getDeclaredMethod("switchClassic", Integer.class);
assertEquals(m.invoke(null, 10), 0); assertEquals(m.invoke(null, 10), 0);
assertEquals(m.invoke(null, 15), 1); assertEquals(m.invoke(null, 15), 1);
@@ -264,7 +268,7 @@ public class TestCodegen {
List.of(new TargetLiteral.IntLiteral(2)) List.of(new TargetLiteral.IntLiteral(2))
), true), TargetType.Integer) ), true), TargetType.Integer)
)))); ))));
var clazz = generateClass(targetClass, new ByteArrayClassLoader()); var clazz = generateClass(targetClass, createClassLoader());
var m = clazz.getDeclaredMethod("switchType", Object.class); var m = clazz.getDeclaredMethod("switchType", Object.class);
assertEquals(m.invoke(null, "String"), 0); assertEquals(m.invoke(null, "String"), 0);
assertEquals(m.invoke(null, 10), 1); assertEquals(m.invoke(null, 10), 1);
@@ -273,9 +277,9 @@ public class TestCodegen {
} }
@Test @Test
@Ignore("The lambda class is not generated because we don't call ASTToTargetAST") @Disabled("The lambda class is not generated because we don't call ASTToTargetAST")
public void testLambda() throws Exception { public void testLambda() throws Exception {
var classLoader = new ByteArrayClassLoader(); var classLoader = createClassLoader();
// var fun = classLoader.loadClass(Path.of(System.getProperty("user.dir"), "src/test/java/targetast/Fun1$$.class")); // var fun = classLoader.loadClass(Path.of(System.getProperty("user.dir"), "src/test/java/targetast/Fun1$$.class"));
var interfaceType = TargetFunNType.fromParams(List.of(TargetType.Integer), 1); var interfaceType = TargetFunNType.fromParams(List.of(TargetType.Integer), 1);

View File

@@ -12,9 +12,9 @@ import de.dhbwstuttgart.target.generate.Bound;
import static de.dhbwstuttgart.target.generate.Bound.*; import static de.dhbwstuttgart.target.generate.Bound.*;
import de.dhbwstuttgart.target.generate.BoundsList; import de.dhbwstuttgart.target.generate.BoundsList;
import de.dhbwstuttgart.target.generate.GenericsResult; import de.dhbwstuttgart.target.generate.GenericsResult;
import org.junit.Ignore; import org.junit.jupiter.api.Disabled;
import org.junit.Test; import org.junit.jupiter.api.Test;
import static org.junit.Assert.*; import static org.junit.jupiter.api.Assertions.*;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@@ -22,7 +22,7 @@ import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@Ignore("TODO: Rewrite with the new algorithm") @Disabled("TODO: Rewrite with the new algorithm")
public class TestGenerics { public class TestGenerics {
private static final String rootDirectory = System.getProperty("user.dir") + "/resources/insertGenerics/javFiles/"; private static final String rootDirectory = System.getProperty("user.dir") + "/resources/insertGenerics/javFiles/";
private static final String bytecodeDirectory = System.getProperty("user.dir") + "targetTest"; private static final String bytecodeDirectory = System.getProperty("user.dir") + "targetTest";

View File

@@ -1,21 +1,21 @@
package targetast; package targetast;
import de.dhbwstuttgart.environment.ByteArrayClassLoader; import org.junit.jupiter.api.BeforeAll;
import org.junit.BeforeClass; import org.junit.jupiter.api.Test;
import org.junit.Test;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import static org.junit.Assert.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
public class TphTest { public class TphTest {
private static Class<?> classToTest; private static Class<?> classToTest;
private static Object instanceOfClass; private static Object instanceOfClass;
@BeforeClass @BeforeAll
public static void setUpBeforeClass() throws Exception { public static void setUpBeforeClass() throws Exception {
var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "Tph.jav"); var classFiles = TestCodegen.generateClassFiles(TestCodegen.createClassLoader(), "Tph.jav");
classToTest = classFiles.get("Tph"); classToTest = classFiles.get("Tph");
instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); instanceOfClass = classToTest.getDeclaredConstructor().newInstance();
} }

View File

@@ -1,20 +1,19 @@
package targetast; package targetast;
import de.dhbwstuttgart.environment.ByteArrayClassLoader; import org.junit.jupiter.api.BeforeAll;
import org.junit.BeforeClass; import org.junit.jupiter.api.Test;
import org.junit.Test;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import static org.junit.Assert.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
public class WhileTest { public class WhileTest {
private static Class<?> classToTest; private static Class<?> classToTest;
private static Object instanceOfClass; private static Object instanceOfClass;
@BeforeClass @BeforeAll
public static void setUpBeforeClass() throws Exception { public static void setUpBeforeClass() throws Exception {
var classFiles = TestCodegen.generateClassFiles(new ByteArrayClassLoader(), "While.jav"); var classFiles = TestCodegen.generateClassFiles(TestCodegen.createClassLoader(), "While.jav");
classToTest = classFiles.get("While"); classToTest = classFiles.get("While");
instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); instanceOfClass = classToTest.getDeclaredConstructor().newInstance();
} }

View File

@@ -8,8 +8,8 @@ import de.dhbwstuttgart.typedeployment.TypeInsert;
import de.dhbwstuttgart.typedeployment.TypeInsertFactory; import de.dhbwstuttgart.typedeployment.TypeInsertFactory;
import de.dhbwstuttgart.typeinference.result.ResultSet; import de.dhbwstuttgart.typeinference.result.ResultSet;
import org.junit.Ignore; import org.junit.jupiter.api.Test;
import org.junit.Test; import org.junit.jupiter.api.Disabled;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@@ -22,7 +22,7 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@Ignore("To be renewed") @Disabled("To be renewed")
public class JavaTXCompilerTest { public class JavaTXCompilerTest {
public static final String rootDirectory = System.getProperty("user.dir") + "/src/test/resources/javFiles/"; public static final String rootDirectory = System.getProperty("user.dir") + "/src/test/resources/javFiles/";