Compare commits

..
3 Commits
Author SHA1 Message Date
dholle 034cdf2e0b Merge branch 'master' into fix-411
Build and Test with Maven / Build-and-test-with-Maven (push) Successful in 1m34s
SonarQube Scan / SonarQube Trigger (pull_request) Successful in 3m27s
2026-11-11 16:37:23 +01:00
dholle 95ee84cb99 Fix #411 by setting functional interface property properly
SonarQube Scan / SonarQube Trigger (pull_request) Successful in 2m34s
Build and Test with Maven / Build-and-test-with-Maven (push) Successful in 1m31s
2026-11-11 16:29:30 +01:00
dholle 3fc098b155 Merge pull request 'Fix #412 by handling default correctly' (#430) from fix-412 into master
SonarQube Scan / SonarQube Trigger (push) Successful in 2m29s
Reviewed-on: #430
2026-11-11 14:20:19 +00:00
4 changed files with 18 additions and 2 deletions

No files matched your search

+7
View File
@@ -0,0 +1,7 @@
import java.lang.Integer;
public interface Bug411 {
default f() {
return 1;
}
}
@@ -15,6 +15,7 @@ import de.dhbwstuttgart.typeinference.constraints.Pair;
import de.dhbwstuttgart.typeinference.unify.PlaceholderRegistry;
import de.dhbwstuttgart.typeinference.unify.model.*;
import java.lang.reflect.Modifier;
import java.util.*;
import java.util.stream.Collectors;
@@ -54,7 +55,8 @@ public class FCGenerator {
private static Boolean isFunctionalInterface(ClassOrInterface cly) {
return (cly.isInterface() && (cly.isFunctionalInterface() || cly.getMethods().size() == 1));
// TODO isFunctionalInterface should be set properly, we shouldn't need to check it again
return (cly.isInterface() && (cly.isFunctionalInterface() || cly.getMethods().size() == 1 && Modifier.isAbstract(cly.getMethods().getFirst().modifier)));
}
private static Pair genImplFunType(ClassOrInterface cly, RefTypeOrTPHOrWildcardOrGeneric fIType, HashMap<String, RefTypeOrTPHOrWildcardOrGeneric> gtvs) {
@@ -409,8 +409,9 @@ public class SyntaxTreeGenerator {
}
}
boolean isFunctonalInterfce = methods.size() == 1 && Modifier.isAbstract(methods.getFirst().modifier);
var staticCtor = Optional.of(this.generateStaticConstructor(ctx.identifier().getText(), staticFieldInitializations, genericParams, ctx.getStart()));
return new ClassOrInterface(modifiers, name, fields, Optional.empty(), staticCtor, methods, new ArrayList<>(), genericParams, superClass, true, methods.size() == 1 ? true : false, extendedInterfaces, permittedSubtypes, ctx.getStart(), fileName);
return new ClassOrInterface(modifiers, name, fields, Optional.empty(), staticCtor, methods, new ArrayList<>(), genericParams, superClass, true, isFunctonalInterfce, extendedInterfaces, permittedSubtypes, ctx.getStart(), fileName);
}
private GenericDeclarationList createEmptyGenericDeclarationList(Token classNameIdentifier) {
+6
View File
@@ -1760,6 +1760,12 @@ public class TestComplete {
assertEquals("many", name.invoke(instance, 2));
}
@Test
public void testBug411() throws Exception {
var classFiles = generateClassFiles(createClassLoader(), "Bug411.jav");
var clazz = classFiles.get("Bug411");
}
@Test
public void testBug412() throws Exception {
var classFiles = generateClassFiles(createClassLoader(), "Bug412.jav");