use of com.redhat.ceylon.model.typechecker.model.Class in project ceylon-compiler by ceylon.
the class TypeFactory method isTupleOfVariadicCallable.
/**
* Copy of Unit.isTupleLengthUnbounded which is more strict on what we consider variadic. For example
* we do not consider Args|[] as a variadic tuple in a Callable. See https://github.com/ceylon/ceylon-compiler/issues/1908
*/
public boolean isTupleOfVariadicCallable(Type args) {
if (args != null) {
/*Boolean simpleTupleLengthUnbounded =
isSimpleTupleLengthUnbounded(args);
if (simpleTupleLengthUnbounded != null) {
return simpleTupleLengthUnbounded.booleanValue();
}*/
if (isEmptyType(args)) {
return false;
} else if (isVariadicElement(args)) {
return true;
}
Class td = getTupleDeclaration();
Type tuple = nonemptyArgs(args).getSupertype(td);
if (tuple == null) {
return false;
} else {
while (true) {
java.util.List<Type> tal = tuple.getTypeArgumentList();
if (tal.size() >= 3) {
Type rest = tal.get(2);
if (rest == null) {
return false;
} else if (isEmptyType(rest)) {
return false;
} else if (isVariadicElement(rest)) {
return true;
} else {
tuple = nonemptyArgs(rest).getSupertype(td);
if (tuple == null) {
return false;
}
//else continue the loop!
}
} else {
return false;
}
}
}
}
return false;
}
use of com.redhat.ceylon.model.typechecker.model.Class in project ceylon-compiler by ceylon.
the class TypeParserTests method assertTypeWithParameters.
private void assertTypeWithParameters(Type type) {
Assert.assertNotNull(type);
TypeDeclaration declaration = type.getDeclaration();
Assert.assertNotNull(declaration);
Assert.assertTrue(declaration instanceof Class);
Assert.assertEquals("t2", declaration.getName());
List<Type> tal = type.getTypeArgumentList();
Assert.assertEquals(2, tal.size());
Assert.assertEquals("b", tal.get(0).getDeclaration().getName());
Assert.assertTrue(tal.get(0).getDeclaration() instanceof Class);
Assert.assertEquals("c", tal.get(1).getDeclaration().getName());
Assert.assertTrue(tal.get(1).getDeclaration() instanceof Class);
}
use of com.redhat.ceylon.model.typechecker.model.Class in project ceylon-compiler by ceylon.
the class TypeParserTests method testIntersectionAndUnion.
@Test
public void testIntersectionAndUnion() {
Type type = new TypeParser(MockLoader.instance).decodeType("a&b|c", null, mockDefaultModule, mockPkgUnit);
Assert.assertNotNull(type);
TypeDeclaration declaration = type.getDeclaration();
Assert.assertNotNull(declaration);
Assert.assertTrue(declaration instanceof UnionType);
UnionType union = (UnionType) declaration;
List<Type> unionTypes = union.getCaseTypes();
Assert.assertEquals(2, unionTypes.size());
Assert.assertTrue(unionTypes.get(0).getDeclaration() instanceof IntersectionType);
IntersectionType intersection = (IntersectionType) unionTypes.get(0).getDeclaration();
List<Type> intersectionTypes = intersection.getSatisfiedTypes();
Assert.assertEquals(2, intersectionTypes.size());
Assert.assertEquals("a", intersectionTypes.get(0).getDeclaration().getName());
Assert.assertTrue(intersectionTypes.get(0).getDeclaration() instanceof Class);
Assert.assertEquals("b", intersectionTypes.get(1).getDeclaration().getName());
Assert.assertTrue(intersectionTypes.get(1).getDeclaration() instanceof Class);
Assert.assertEquals("c", unionTypes.get(1).getDeclaration().getName());
Assert.assertTrue(unionTypes.get(1).getDeclaration() instanceof Class);
}
use of com.redhat.ceylon.model.typechecker.model.Class in project ceylon-compiler by ceylon.
the class TypeParserTests method testTuple2Abbrev.
@Test
public void testTuple2Abbrev() {
Type type = new TypeParser(MockLoader.instance).decodeType("[a,b]", null, mockDefaultModule, mockPkgUnit);
Assert.assertNotNull(type);
TypeDeclaration declaration = type.getDeclaration();
Assert.assertNotNull(declaration);
Assert.assertTrue(declaration instanceof Class);
Assert.assertEquals("ceylon.language::Tuple", declaration.getQualifiedNameString());
Assert.assertEquals("[a, b]", type.asString());
Assert.assertNull(type.getQualifyingType());
}
use of com.redhat.ceylon.model.typechecker.model.Class in project ceylon-compiler by ceylon.
the class TypeParserTests method testQualifiedAndParameterised.
@Test
public void testQualifiedAndParameterised() {
Type type = new TypeParser(MockLoader.instance).decodeType("t2<a,b>.t2<c,d>", null, mockDefaultModule, mockPkgUnit);
Assert.assertNotNull(type);
TypeDeclaration declaration = type.getDeclaration();
Assert.assertNotNull(declaration);
Assert.assertTrue(declaration instanceof Class);
Assert.assertEquals("t2.t2", declaration.getQualifiedNameString());
Assert.assertEquals(2, type.getTypeArgumentList().size());
// c
Type c = type.getTypeArgumentList().get(0);
Assert.assertEquals("c", c.getDeclaration().getName());
Assert.assertTrue(c.getDeclaration() instanceof Class);
// d
Type d = type.getTypeArgumentList().get(1);
Assert.assertEquals("d", d.getDeclaration().getName());
Assert.assertTrue(d.getDeclaration() instanceof Class);
Type qualifyingType = type.getQualifyingType();
Assert.assertNotNull(qualifyingType);
TypeDeclaration qualifyingDeclaration = qualifyingType.getDeclaration();
Assert.assertNotNull(qualifyingDeclaration);
Assert.assertTrue(qualifyingDeclaration instanceof Class);
Assert.assertEquals("t2", qualifyingDeclaration.getName());
Assert.assertEquals(2, qualifyingType.getTypeArgumentList().size());
// a
Type a = qualifyingType.getTypeArgumentList().get(0);
Assert.assertEquals("a", a.getDeclaration().getName());
Assert.assertTrue(a.getDeclaration() instanceof Class);
// b
Type b = qualifyingType.getTypeArgumentList().get(1);
Assert.assertEquals("b", b.getDeclaration().getName());
Assert.assertTrue(b.getDeclaration() instanceof Class);
}
Aggregations