/* * Copyright (C) 2014-2017 the original authors or authors. * * Licensed 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 io.sarl.lang.tests.bugs.to00699; import com.google.inject.Inject; import org.eclipse.xtext.xbase.lib.Functions.Function1; import org.eclipse.xtext.xbase.testing.CompilationTestHelper; import org.junit.Test; import io.sarl.lang.SARLVersion; import io.sarl.lang.sarl.SarlPackage; import io.sarl.lang.sarl.SarlScript; import io.sarl.tests.api.AbstractSarlTest; /** Testing class for issue: Generate real lambda. * * <p>https://github.com/sarl/sarl/issues/623 * * @author $Author: sgalland$ * @version $Name$ $Revision$ $Date$ * @mavengroupid $GroupId$ * @mavenartifactid $ArtifactId$ */ @SuppressWarnings("all") public class Bug623 extends AbstractSarlTest { private static final String SNIPSET1 = multilineString( "package io.sarl.lang.tests.bug623", "class XXX {", " def fct {", " fct2 [ it + 4 ]", " }", " def fct2(a : (int) => int) : void {", " }", "}"); private static final String SNIPSET2 = multilineString( "package io.sarl.lang.tests.bug623", "class XXX {", " def fct {", " val vv = 4", " fct2 [ it + vv ]", " }", " def fct2(a : (int) => int) : void {", " }", "}"); private static final String SNIPSET3 = multilineString( "package io.sarl.lang.tests.bug623", "class XXX {", " def fct : int {", " var vv = 4", " vv += 1", " fct2 [ it + vv ]", " vv += 1", " vv", " }", " def fct2(a : (int) => int) : void {", " }", "}"); @Inject private CompilationTestHelper compiler; @Test public void parsing_01() throws Exception { SarlScript mas = file(SNIPSET1); final Validator validator = validate(mas); validator.assertNoErrors(); } @Test public void compiling_01() throws Exception { this.compiler.assertCompilesTo(SNIPSET1, multilineString( "package io.sarl.lang.tests.bug623;", "", "import io.sarl.lang.annotation.SarlElementType;", "import io.sarl.lang.annotation.SarlSpecification;", "import io.sarl.lang.annotation.SyntheticMember;", "import org.eclipse.xtext.xbase.lib.Functions.Function1;", "", "@SarlSpecification(\"" + SARLVersion.SPECIFICATION_RELEASE_VERSION_STRING + "\")", "@SarlElementType(" + SarlPackage.SARL_CLASS + ")", "@SuppressWarnings(\"all\")", "public class XXX {", " public void fct() {", " final Function1<Integer, Integer> _function = (Integer it) -> {", " return Integer.valueOf(((it).intValue() + 4));", " };", " this.fct2(_function);", " }", " ", " public void fct2(final Function1<? super Integer, ? extends Integer> a) {", " }", " ", " @SyntheticMember", " public XXX() {", " super();", " }", "}", "")); } @Test public void parsing_02() throws Exception { SarlScript mas = file(SNIPSET2); final Validator validator = validate(mas); validator.assertNoErrors(); } @Test public void compiling_02() throws Exception { this.compiler.assertCompilesTo(SNIPSET2, multilineString( "package io.sarl.lang.tests.bug623;", "", "import io.sarl.lang.annotation.SarlElementType;", "import io.sarl.lang.annotation.SarlSpecification;", "import io.sarl.lang.annotation.SyntheticMember;", "import org.eclipse.xtext.xbase.lib.Functions.Function1;", "", "@SarlSpecification(\"" + SARLVersion.SPECIFICATION_RELEASE_VERSION_STRING + "\")", "@SarlElementType(" + SarlPackage.SARL_CLASS + ")", "@SuppressWarnings(\"all\")", "public class XXX {", " public void fct() {", " final int vv = 4;", " final Function1<Integer, Integer> _function = (Integer it) -> {", " return Integer.valueOf(((it).intValue() + vv));", " };", " this.fct2(_function);", " }", " ", " public void fct2(final Function1<? super Integer, ? extends Integer> a) {", " }", " ", " @SyntheticMember", " public XXX() {", " super();", " }", "}", "")); } @Test public void parsing_03() throws Exception { SarlScript mas = file(SNIPSET3); final Validator validator = validate(mas); validator.assertNoErrors(); } @Test public void compiling_03() throws Exception { this.compiler.assertCompilesTo(SNIPSET3, multilineString( "package io.sarl.lang.tests.bug623;", "", "import io.sarl.lang.annotation.SarlElementType;", "import io.sarl.lang.annotation.SarlSpecification;", "import io.sarl.lang.annotation.SyntheticMember;", "import org.eclipse.xtext.xbase.lib.Functions.Function1;", "", "@SarlSpecification(\"" + SARLVersion.SPECIFICATION_RELEASE_VERSION_STRING + "\")", "@SarlElementType(" + SarlPackage.SARL_CLASS + ")", "@SuppressWarnings(\"all\")", "public class XXX {", " public int fct() {", " int _xblockexpression = (int) 0;", " {", " int vv = 4;", " int _vv = vv;", " vv = (_vv + 1);", " final Function1<Integer, Integer> _function = (Integer it) -> {", " return Integer.valueOf(((it).intValue() + vv));", " };", " this.fct2(_function);", " int _vv_1 = vv;", " vv = (_vv_1 + 1);", " _xblockexpression = vv;", " }", " return _xblockexpression;", " }", " ", " public void fct2(final Function1<? super Integer, ? extends Integer> a) {", " }", " ", " @SyntheticMember", " public XXX() {", " super();", " }", "}", "")); } // Only for checking if Java compiler support variables in lambdas. public void fct() { int vv = 4; final Function1<Integer, Integer> _function = (Integer it) -> { return Integer.valueOf(((it).intValue() + vv)); }; this.fct2(_function); } // Only for checking if Java compiler support variables in lambdas. public void fct2(final Function1<? super Integer, ? extends Integer> a) { } }