Added tests for && and ||

This commit is contained in:
Mikhael Bogdanov
2013-12-02 12:43:51 +04:00
parent 0728428814
commit 712dcaac91
3 changed files with 25 additions and 1 deletions
@@ -35,6 +35,7 @@ import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.lang.InlineUtil;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.lexer.JetToken;
import org.jetbrains.jet.lexer.JetTokens;
import java.util.HashSet;
@@ -118,7 +119,8 @@ public class InlineCallResolverExtension implements CallResolverExtension {
}
}
else if (parent instanceof JetBinaryExpression) {
if (JetPsiUtil.getOperationToken((JetOperationExpression) parent) == JetTokens.EQ) {
JetToken token = JetPsiUtil.getOperationToken((JetOperationExpression) parent);
if (token == JetTokens.EQ || token == JetTokens.ANDAND || token == JetTokens.OROR) {
//assignment
return false;
}
@@ -0,0 +1,17 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE -NOTHING_TO_INLINE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -UNUSED_VALUE -TYPE_MISMATCH
inline fun inlineFunWithInvoke(s: (p: Int) -> Unit, ext: Int.(p: Int) -> Unit) {
<!USAGE_IS_NOT_INLINABLE!>s<!> && <!USAGE_IS_NOT_INLINABLE!>ext<!>
<!USAGE_IS_NOT_INLINABLE!>s<!> || <!USAGE_IS_NOT_INLINABLE!>s<!>
}
inline fun inlineFunWithInvokeNonInline(noinline s: (p: Int) -> Unit, ext: Int.(p: Int) -> Unit) {
s && <!USAGE_IS_NOT_INLINABLE!>ext<!>
s || s
}
inline fun Function1<Int, Unit>.inlineExt() {
invoke(11)
<!USAGE_IS_NOT_INLINABLE!>this<!> && <!USAGE_IS_NOT_INLINABLE!>this<!>
<!USAGE_IS_NOT_INLINABLE!>this<!> || <!USAGE_IS_NOT_INLINABLE!>this<!>
}
@@ -3858,6 +3858,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/diagnostics/tests/inline/binaryExpressions"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("andOr.kt")
public void testAndOr() throws Exception {
doTest("compiler/testData/diagnostics/tests/inline/binaryExpressions/andOr.kt");
}
@TestMetadata("arrayAccess.kt")
public void testArrayAccess() throws Exception {
doTest("compiler/testData/diagnostics/tests/inline/binaryExpressions/arrayAccess.kt");