Compare commits

...
3 Commits
Author SHA1 Message Date
dholle e1b9766a53 Merge pull request 'Fix various issues with static methods, fixes #416' (#433) from fix-416 into master
SonarQube Scan / SonarQube Trigger (push) Successful in 2m38s
Reviewed-on: #433
2026-11-11 16:51:45 +00:00
dholle 35e8dda6bd Fix various issues with static methods, fixes #416
Build and Test with Maven / Build-and-test-with-Maven (push) Successful in 2m7s
SonarQube Scan / SonarQube Trigger (pull_request) Canceled after 16m22s
2026-11-11 17:32:58 +01:00
dholle bf22cf246e Merge pull request 'Fix #411 by setting functional interface property properly' (#431) from fix-411 into master
SonarQube Scan / SonarQube Trigger (push) Successful in 3m27s
Reviewed-on: #431
2026-11-11 15:43:24 +00:00
4 changed files with 29 additions and 2 deletions

No files matched your search

+9
View File
@@ -0,0 +1,9 @@
import java.lang.Integer;
sealed interface L<T> permits Cons, Nil {}
public record Cons<T>(T head, L<T> tail) implements L<T> {}
public record Nil<T>() implements L<T> {}
public class Bug416 {
public static <T> len(Cons(h, t)) { return 1 + len(t); }
public static <T> len(Nil()) { return 0; }
}
@@ -1780,7 +1780,7 @@ public class Codegen {
if (parent != null) {
state.scope.parent = parent.scope;
}
var offset = 1;
var offset = method.isStatic() ? 0 : 1;
for (var param : method.signature().parameters()) {
state.createVariable(param.pattern().name(), param.pattern().type());
}
@@ -29,6 +29,7 @@ import org.objectweb.asm.Opcodes;
import java.lang.classfile.Opcode;
import java.lang.reflect.AccessFlag;
import java.lang.reflect.Modifier;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -630,7 +631,7 @@ public class ASTToTargetAST {
mParams,
classType,
method.name(),
false, false, method.isPrivate()
method.isStatic(), false, method.isPrivate()
);
if (method.signature().returnType() != null) {
caseBody = new TargetReturn(caseBody);
+17
View File
@@ -1775,4 +1775,21 @@ public class TestComplete {
assertEquals(10, m.invoke(instance, 1));
assertEquals(20, m.invoke(instance, 2));
}
@Test
public void testBug416() throws Exception {
var classFiles = generateClassFiles(createClassLoader(), "Bug416.jav");
var clazz = classFiles.get("Bug416");
var L = classFiles.get("L");
var Cons = classFiles.get("Cons");
var Nil = classFiles.get("Nil");
var consCtor = Cons.getDeclaredConstructor(Object.class, L);
var nilCtor = Nil.getDeclaredConstructor();
var list = consCtor.newInstance(1, consCtor.newInstance(2, consCtor.newInstance(3, nilCtor.newInstance())));
var len = clazz.getDeclaredMethod("len", L);
assertEquals(3, len.invoke(null, list));
}
}