Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
de96cda327 | ||
|
|
2710685db3 |
No files matched your search
@@ -0,0 +1,11 @@
|
||||
import java.lang.Integer;
|
||||
import java.lang.String;
|
||||
|
||||
public class Bug417 {
|
||||
public name(Integer i) {
|
||||
return switch (i) {
|
||||
case 1 -> "one";
|
||||
default -> "many";
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1437,13 +1437,16 @@ public class Codegen {
|
||||
if (label instanceof TargetTypePattern || label instanceof TargetComplexPattern) {
|
||||
if (label.type() instanceof TargetGenericType) types.add(Type.getType(Object.class));
|
||||
else types.add(Type.getObjectType(label.type().getInternalName()));
|
||||
} else if (label instanceof TargetLiteral lit) {
|
||||
types.add(lit.value());
|
||||
} else if (label instanceof TargetExpressionPattern expr) {
|
||||
if (expr.expression() instanceof TargetLiteral literal) {
|
||||
types.add(Type.getObjectType(TargetType.toWrapper(literal.type()).getInternalName()));
|
||||
} else {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
} else if (label instanceof TargetGuard guard) {
|
||||
types.add(Type.getObjectType(guard.inner().type().getInternalName()));
|
||||
// TODO Same here we need to evaluate constant;
|
||||
} else {
|
||||
logger.info(label);
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -875,8 +875,8 @@ public class TYPEStmt implements StatementVisitor {
|
||||
if (caseExpressionType == null) {
|
||||
for (var child : switchStmt.getBlocks()) {
|
||||
for (var label : child.getLabels()) {
|
||||
if (label.getPattern() == null) {
|
||||
constraintsSet.addUndConstraint(new Pair(new RefType(new JavaClassName("java.lang.Object"), new NullToken()), switchStmt.getSwitch().getType(), PairOperator.SMALLERDOT, loc(label.getOffset())));
|
||||
if (label.getPattern() == null && switchStmt.getSwitch().getType() instanceof TypePlaceholder) {
|
||||
constraintsSet.addUndConstraint(new Pair(new RefType(new JavaClassName("java.lang.Object"), new NullToken()), switchStmt.getSwitch().getType(), PairOperator.EQUALSDOT, loc(label.getOffset())));
|
||||
}
|
||||
if (label.getPattern() instanceof RecordPattern) {
|
||||
RecordPattern recordPattern = (RecordPattern) label.getPattern();
|
||||
|
||||
@@ -1745,4 +1745,14 @@ public class TestComplete {
|
||||
var m = clazz.getDeclaredMethod("m");
|
||||
assertEquals(5, m.invoke(instance));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBug417() throws Exception {
|
||||
var classFiles = generateClassFiles(createClassLoader(), "Bug417.jav");
|
||||
var clazz = classFiles.get("Bug417");
|
||||
var instance = clazz.getDeclaredConstructor().newInstance();
|
||||
var name = clazz.getDeclaredMethod("name", Integer.class);
|
||||
assertEquals("one", name.invoke(instance, 1));
|
||||
assertEquals("many", name.invoke(instance, 2));
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user