blob: f9c3b37b9f7e144f3c9feb0ea5791b79a6cbd586 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package groovy.bugs
import gls.CompilableTestSupport
import groovy.test.NotYetImplemented
class Groovy6271Bug extends CompilableTestSupport {
/*
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
TestScripttestTraitWithCompileStaticAndCoercedClosure0.groovy: 17: [Static type checking] - Incompatible generic argument types. Cannot assign fj.data.hlist.HList$HCons <java.math.BigDecimal, fj.data.hlist.HList$HCons> to: fj.data.hlist.HList$HCons <Double, HCons>
@ line 17, column 19.
nil().extend([1, 2] as Integer[]).extend("Bar").extend(4.0);
^
TestScripttestTraitWithCompileStaticAndCoercedClosure0.groovy: 33: [Static type checking] - Cannot call fj.data.hlist.HList$HAppend <fj.data.hlist.HList$HCons, fj.data.hlist.HList$HCons, fj.data.hlist.HList$HCons>#append(fj.data.hlist.HList$HCons <String, HCons>, fj.data.hlist.HList$HCons <Double, HCons>) with arguments [fj.data.hlist.HList$HCons <java.lang.String, fj.data.hlist.HList$HCons>, fj.data.hlist.HList$HCons <java.math.BigDecimal, fj.data.hlist.HList$HCons>]
@ line 33, column 127.
ons<Integer[], HNil>>>>>> x = three.appe
^
2 errors
*/
@NotYetImplemented
void testGroovy6271Bug() {
shouldCompile '''
@Grab('org.functionaljava:functionaljava:3.1')
import static fj.data.hlist.HList.HCons;
import static fj.data.hlist.HList.HNil;
import static fj.data.hlist.HList.HAppend.append;
import static fj.data.hlist.HList.HAppend;
import static fj.data.hlist.HList.nil;
import groovy.transform.CompileStatic
@CompileStatic
public class HListExample {
public static void main(String[] args) {
final HCons<String, HCons<Integer, HCons<Boolean, HNil>>> a =
nil().extend(true).extend(3).extend("Foo");
final HCons<Double, HCons<String, HCons<Integer[], HNil>>> b =
nil().extend([1, 2] as Integer[]).extend("Bar").extend(4.0);
// nil().extend(new Integer[]{1, 2}).extend("Bar").extend(4.0);
final HAppend<HNil, HCons<Double, HCons<String, HCons<Integer[], HNil>>>,
HCons<Double, HCons<String, HCons<Integer[], HNil>>>> zero = append();
final HAppend<HCons<Boolean, HNil>, HCons<Double, HCons<String, HCons<Integer[], HNil>>>,
HCons<Boolean, HCons<Double, HCons<String, HCons<Integer[], HNil>>>>> one = append(zero);
final HAppend<HCons<Integer, HCons<Boolean, HNil>>, HCons<Double, HCons<String, HCons<Integer[], HNil>>>,
HCons<Integer, HCons<Boolean, HCons<Double, HCons<String, HCons<Integer[], HNil>>>>>> two = append(one);
final HAppend<HCons<String, HCons<Integer, HCons<Boolean, HNil>>>,
HCons<Double, HCons<String, HCons<Integer[], HNil>>>,
HCons<String, HCons<Integer, HCons<Boolean, HCons<Double, HCons<String, HCons<Integer[], HNil>>>>>>> three = append(two);
final HCons<String, HCons<Integer, HCons<Boolean, HCons<Double, HCons<String, HCons<Integer[], HNil>>>>>> x = three.append(a, b);
System.out.println(x.head()); // Foo
System.out.println(x.tail().tail().tail().tail().head()); // Bar
}
}
'''
}
}