Frontend tests: serialize dynamic call descriptors and check them in diagnostic tests.
This commit is contained in:
@@ -17,7 +17,9 @@
|
||||
package org.jetbrains.jet.checkers;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.*;
|
||||
import com.google.common.collect.Collections2;
|
||||
import com.google.common.collect.LinkedListMultimap;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.PsiElement;
|
||||
@@ -30,12 +32,12 @@ import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.Stack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.diagnostics.Diagnostic;
|
||||
import org.jetbrains.jet.lang.diagnostics.DiagnosticFactory;
|
||||
import org.jetbrains.jet.lang.diagnostics.Severity;
|
||||
import org.jetbrains.jet.lang.diagnostics.rendering.AbstractDiagnosticWithParametersRenderer;
|
||||
import org.jetbrains.jet.lang.diagnostics.rendering.DefaultErrorMessages;
|
||||
import org.jetbrains.jet.lang.diagnostics.rendering.DiagnosticFactoryToRendererMap;
|
||||
import org.jetbrains.jet.lang.diagnostics.rendering.DiagnosticRenderer;
|
||||
import org.jetbrains.jet.lang.psi.JetElement;
|
||||
import org.jetbrains.jet.lang.psi.JetExpression;
|
||||
@@ -87,7 +89,8 @@ public class CheckerTestUtil {
|
||||
public static List<Diagnostic> getDiagnosticsIncludingSyntaxErrors(
|
||||
@NotNull BindingContext bindingContext,
|
||||
@NotNull final PsiElement root,
|
||||
boolean markDynamicCalls
|
||||
boolean markDynamicCalls,
|
||||
@Nullable List<DeclarationDescriptor> dynamicCallDescriptors
|
||||
) {
|
||||
List<Diagnostic> diagnostics = new ArrayList<Diagnostic>();
|
||||
diagnostics.addAll(Collections2.filter(bindingContext.getDiagnostics().all(),
|
||||
@@ -100,16 +103,17 @@ public class CheckerTestUtil {
|
||||
for (PsiErrorElement errorElement : AnalyzingUtils.getSyntaxErrorRanges(root)) {
|
||||
diagnostics.add(new SyntaxErrorDiagnostic(errorElement));
|
||||
}
|
||||
List<Diagnostic> debugAnnotations = getDebugInfoDiagnostics(root, bindingContext, markDynamicCalls);
|
||||
List<Diagnostic> debugAnnotations = getDebugInfoDiagnostics(root, bindingContext, markDynamicCalls, dynamicCallDescriptors);
|
||||
diagnostics.addAll(debugAnnotations);
|
||||
return diagnostics;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static List<Diagnostic> getDebugInfoDiagnostics(
|
||||
private static List<Diagnostic> getDebugInfoDiagnostics(
|
||||
@NotNull PsiElement root,
|
||||
@NotNull BindingContext bindingContext,
|
||||
final boolean markDynamicCalls
|
||||
final boolean markDynamicCalls,
|
||||
@Nullable final List<DeclarationDescriptor> dynamicCallDescriptors
|
||||
) {
|
||||
final List<Diagnostic> debugAnnotations = Lists.newArrayList();
|
||||
DebugInfoUtil.markDebugAnnotations(root, bindingContext, new DebugInfoUtil.DebugInfoReporter() {
|
||||
@@ -129,7 +133,11 @@ public class CheckerTestUtil {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reportDynamicCall(@NotNull JetElement element) {
|
||||
public void reportDynamicCall(@NotNull JetElement element, DeclarationDescriptor declarationDescriptor) {
|
||||
if (dynamicCallDescriptors != null) {
|
||||
dynamicCallDescriptors.add(declarationDescriptor);
|
||||
}
|
||||
|
||||
if (markDynamicCalls) {
|
||||
newDiagnostic(element, DebugInfoDiagnosticFactory.DYNAMIC);
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ public class DebugInfoUtil {
|
||||
|
||||
public abstract void reportUnresolvedWithTarget(@NotNull JetReferenceExpression expression, @NotNull String target);
|
||||
|
||||
public void reportDynamicCall(@NotNull JetElement element) { }
|
||||
public void reportDynamicCall(@NotNull JetElement element, DeclarationDescriptor declarationDescriptor) { }
|
||||
}
|
||||
|
||||
public static void markDebugAnnotations(
|
||||
@@ -99,11 +99,9 @@ public class DebugInfoUtil {
|
||||
@Override
|
||||
public void visitForExpression(@NotNull JetForExpression expression) {
|
||||
JetExpression range = expression.getLoopRange();
|
||||
if (reportIfDynamicCall(range, range, LOOP_RANGE_ITERATOR_RESOLVED_CALL) ||
|
||||
reportIfDynamicCall(range, range, LOOP_RANGE_HAS_NEXT_RESOLVED_CALL) ||
|
||||
reportIfDynamicCall(range, range, LOOP_RANGE_NEXT_RESOLVED_CALL)) {
|
||||
// for side-effect of the condition only
|
||||
}
|
||||
reportIfDynamicCall(range, range, LOOP_RANGE_ITERATOR_RESOLVED_CALL);
|
||||
reportIfDynamicCall(range, range, LOOP_RANGE_HAS_NEXT_RESOLVED_CALL);
|
||||
reportIfDynamicCall(range, range, LOOP_RANGE_NEXT_RESOLVED_CALL);
|
||||
super.visitForExpression(expression);
|
||||
}
|
||||
|
||||
@@ -120,11 +118,9 @@ public class DebugInfoUtil {
|
||||
VariableDescriptor descriptor = bindingContext.get(VARIABLE, property);
|
||||
if (descriptor instanceof PropertyDescriptor && property.getDelegate() != null) {
|
||||
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) descriptor;
|
||||
if (reportIfDynamicCall(property.getDelegate(), propertyDescriptor.getGetter(), DELEGATED_PROPERTY_RESOLVED_CALL)
|
||||
|| reportIfDynamicCall(property.getDelegate(), propertyDescriptor.getSetter(), DELEGATED_PROPERTY_RESOLVED_CALL)
|
||||
|| reportIfDynamicCall(property.getDelegate(), propertyDescriptor, DELEGATED_PROPERTY_PD_RESOLVED_CALL)) {
|
||||
// for side-effect of the condition only
|
||||
}
|
||||
reportIfDynamicCall(property.getDelegate(), propertyDescriptor.getGetter(), DELEGATED_PROPERTY_RESOLVED_CALL);
|
||||
reportIfDynamicCall(property.getDelegate(), propertyDescriptor.getSetter(), DELEGATED_PROPERTY_RESOLVED_CALL);
|
||||
reportIfDynamicCall(property.getDelegate(), propertyDescriptor, DELEGATED_PROPERTY_PD_RESOLVED_CALL);
|
||||
}
|
||||
super.visitProperty(property);
|
||||
}
|
||||
@@ -230,7 +226,7 @@ public class DebugInfoUtil {
|
||||
|
||||
private static boolean reportIfDynamic(JetElement element, DeclarationDescriptor declarationDescriptor, DebugInfoReporter debugInfoReporter) {
|
||||
if (declarationDescriptor != null && TasksPackage.isDynamic(declarationDescriptor)) {
|
||||
debugInfoReporter.reportDynamicCall(element);
|
||||
debugInfoReporter.reportDynamicCall(element, declarationDescriptor);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
public final fun sam(/*0*/ p0: dynamic): dynamic
|
||||
@@ -0,0 +1,5 @@
|
||||
public final fun foo(): dynamic
|
||||
public final var bar: dynamic
|
||||
public final fun <get-bar>(): dynamic
|
||||
public final fun <set-bar>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final fun baz(/*0*/ p0: dynamic): dynamic
|
||||
@@ -0,0 +1,72 @@
|
||||
public final fun plus(): dynamic
|
||||
public final fun minus(): dynamic
|
||||
public final fun not(): dynamic
|
||||
public final fun plus(/*0*/ p0: dynamic): dynamic
|
||||
public final fun plus(/*0*/ p0: dynamic): dynamic
|
||||
public final fun minus(/*0*/ p0: dynamic): dynamic
|
||||
public final fun times(/*0*/ p0: dynamic): dynamic
|
||||
public final fun div(/*0*/ p0: dynamic): dynamic
|
||||
public final fun mod(/*0*/ p0: dynamic): dynamic
|
||||
public final fun rangeTo(/*0*/ p0: dynamic): dynamic
|
||||
public final fun and(/*0*/ p0: dynamic): dynamic
|
||||
public final fun contains(/*0*/ p0: dynamic): dynamic
|
||||
public final fun contains(/*0*/ p0: dynamic): dynamic
|
||||
public final fun contains(/*0*/ p0: dynamic): dynamic
|
||||
public final fun contains(/*0*/ p0: dynamic): dynamic
|
||||
public final fun get(/*0*/ p0: dynamic): dynamic
|
||||
public final fun get(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
|
||||
public final fun set(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
|
||||
public final fun set(/*0*/ p0: dynamic, /*1*/ p1: dynamic, /*2*/ p2: dynamic): dynamic
|
||||
public final fun get(/*0*/ p0: dynamic): dynamic
|
||||
public final fun inc(): dynamic
|
||||
public final fun inc(): dynamic
|
||||
public final fun get(/*0*/ p0: dynamic): dynamic
|
||||
public final fun get(/*0*/ p0: dynamic): dynamic
|
||||
public final fun dec(): dynamic
|
||||
public final fun dec(): dynamic
|
||||
public final fun get(/*0*/ p0: dynamic): dynamic
|
||||
public final fun invoke(): dynamic
|
||||
public final fun invoke(/*0*/ p0: dynamic): dynamic
|
||||
public final fun invoke(/*0*/ name: dynamic): dynamic
|
||||
public final fun invoke(/*0*/ p0: () -> dynamic): dynamic
|
||||
public final fun invoke(/*0*/ p0: dynamic): dynamic
|
||||
public final fun compareTo(/*0*/ p0: dynamic): dynamic
|
||||
public final fun compareTo(/*0*/ p0: dynamic): dynamic
|
||||
public final fun compareTo(/*0*/ p0: dynamic): dynamic
|
||||
public final fun compareTo(/*0*/ p0: dynamic): dynamic
|
||||
public final fun foo(): dynamic
|
||||
public final fun component1(): dynamic
|
||||
public final fun component2(): dynamic
|
||||
public final fun component3(): dynamic
|
||||
public final fun foo(): dynamic
|
||||
public final fun foo(): dynamic
|
||||
public final fun foo(): dynamic
|
||||
public final fun inc(): dynamic
|
||||
public final fun inc(): dynamic
|
||||
public final fun dec(): dynamic
|
||||
public final fun dec(): dynamic
|
||||
public final fun plusAssign(/*0*/ p0: dynamic): dynamic
|
||||
public final fun minusAssign(/*0*/ p0: dynamic): dynamic
|
||||
public final fun timesAssign(/*0*/ p0: dynamic): dynamic
|
||||
public final fun divAssign(/*0*/ p0: dynamic): dynamic
|
||||
public final fun modAssign(/*0*/ p0: dynamic): dynamic
|
||||
public final fun plusAssign(/*0*/ p0: dynamic): dynamic
|
||||
public final fun minusAssign(/*0*/ p0: dynamic): dynamic
|
||||
public final fun timesAssign(/*0*/ p0: dynamic): dynamic
|
||||
public final fun divAssign(/*0*/ p0: dynamic): dynamic
|
||||
public final fun modAssign(/*0*/ p0: dynamic): dynamic
|
||||
public final fun get(/*0*/ p0: dynamic): dynamic
|
||||
public final fun plusAssign(/*0*/ p0: dynamic): dynamic
|
||||
public final fun get(/*0*/ p0: dynamic): dynamic
|
||||
public final fun minusAssign(/*0*/ p0: dynamic): dynamic
|
||||
public final fun get(/*0*/ p0: dynamic): dynamic
|
||||
public final fun timesAssign(/*0*/ p0: dynamic): dynamic
|
||||
public final fun get(/*0*/ p0: dynamic): dynamic
|
||||
public final fun divAssign(/*0*/ p0: dynamic): dynamic
|
||||
public final fun get(/*0*/ p0: dynamic): dynamic
|
||||
public final fun modAssign(/*0*/ p0: dynamic): dynamic
|
||||
public fun get(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
|
||||
public fun propertyDelegated(/*0*/ p0: dynamic): dynamic
|
||||
public fun get(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
|
||||
public fun set(/*0*/ p0: dynamic, /*1*/ p1: dynamic, /*2*/ p2: dynamic): dynamic
|
||||
public fun propertyDelegated(/*0*/ p0: dynamic): dynamic
|
||||
@@ -60,7 +60,7 @@ fun test(d: dynamic) {
|
||||
d <!DEBUG_INFO_DYNAMIC!>>=<!> d
|
||||
d <!DEBUG_INFO_DYNAMIC!>><!> d
|
||||
|
||||
for (i in <!DEBUG_INFO_DYNAMIC!>d<!>) {
|
||||
for (i in d) {
|
||||
i.<!DEBUG_INFO_DYNAMIC!>foo<!>()
|
||||
}
|
||||
|
||||
@@ -96,5 +96,5 @@ fun test(d: dynamic) {
|
||||
}
|
||||
|
||||
val dyn: dynamic = null
|
||||
val foo : Int <!DEBUG_INFO_DYNAMIC!>by dyn<!>
|
||||
var bar : Int <!DEBUG_INFO_DYNAMIC!>by dyn<!>
|
||||
val foo : Int <!DEBUG_INFO_DYNAMIC, DEBUG_INFO_DYNAMIC!>by dyn<!>
|
||||
var bar : Int <!DEBUG_INFO_DYNAMIC, DEBUG_INFO_DYNAMIC, DEBUG_INFO_DYNAMIC!>by dyn<!>
|
||||
@@ -0,0 +1,15 @@
|
||||
public final fun foo(): dynamic
|
||||
public final fun isDynamic(): dynamic
|
||||
public final fun foo(/*0*/ p0: dynamic): dynamic
|
||||
public final fun isDynamic(): dynamic
|
||||
public final fun foo(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
|
||||
public final fun isDynamic(): dynamic
|
||||
public final fun </*0*/ T0> foo(): dynamic
|
||||
public final fun isDynamic(): dynamic
|
||||
public final var foo: dynamic
|
||||
public final fun <get-foo>(): dynamic
|
||||
public final fun <set-foo>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final fun isDynamic(): dynamic
|
||||
public final var foo: dynamic
|
||||
public final fun <get-foo>(): dynamic
|
||||
public final fun <set-foo>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
public final fun foo(/*0*/ p0: () -> dynamic): dynamic
|
||||
public final fun foo(/*0*/ p0: () -> dynamic): dynamic
|
||||
public final fun foo(/*0*/ p0: (dynamic) -> dynamic): dynamic
|
||||
public final fun foo(/*0*/ p0: (dynamic) -> dynamic): dynamic
|
||||
public final fun foo(/*0*/ p0: (dynamic, dynamic) -> dynamic): dynamic
|
||||
public final fun foo(/*0*/ p0: (dynamic, dynamic) -> dynamic): dynamic
|
||||
public final fun foo(/*0*/ p0: (dynamic, dynamic) -> dynamic): dynamic
|
||||
public final fun foo(/*0*/ p0: (dynamic, dynamic) -> dynamic): dynamic
|
||||
public final fun foo(/*0*/ p0: dynamic.(dynamic, dynamic) -> dynamic): dynamic
|
||||
public final fun foo(/*0*/ p0: () -> dynamic): dynamic
|
||||
public final fun foo(/*0*/ p0: (dynamic) -> dynamic): dynamic
|
||||
public final fun foo(/*0*/ p0: dynamic): dynamic
|
||||
public final fun foo(/*0*/ p0: (dynamic) -> dynamic): dynamic
|
||||
public final fun foo(/*0*/ p0: (dynamic, dynamic) -> dynamic): dynamic
|
||||
public final fun foo(/*0*/ p0: (dynamic, dynamic) -> dynamic): dynamic
|
||||
public final fun foo(/*0*/ p0: (dynamic) -> dynamic): dynamic
|
||||
public final fun foo(/*0*/ p0: (dynamic) -> dynamic): dynamic
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
public final fun foo(): dynamic
|
||||
public final fun isDynamic(): dynamic
|
||||
public final fun foo(/*0*/ p0: dynamic): dynamic
|
||||
public final fun isDynamic(): dynamic
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
public final var onAnyVal: dynamic
|
||||
public final fun <get-onAnyVal>(): dynamic
|
||||
public final fun <set-onAnyVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var onAnyVal: dynamic
|
||||
public final fun <get-onAnyVal>(): dynamic
|
||||
public final fun <set-onAnyVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var onAnyVal: dynamic
|
||||
public final fun <get-onAnyVal>(): dynamic
|
||||
public final fun <set-onAnyVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var onAnyVal: dynamic
|
||||
public final fun <get-onAnyVal>(): dynamic
|
||||
public final fun <set-onAnyVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var onAnyVal: dynamic
|
||||
public final fun <get-onAnyVal>(): dynamic
|
||||
public final fun <set-onAnyVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var onAnyVal: dynamic
|
||||
public final fun <get-onAnyVal>(): dynamic
|
||||
public final fun <set-onAnyVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var onNullableAnyVal: dynamic
|
||||
public final fun <get-onNullableAnyVal>(): dynamic
|
||||
public final fun <set-onNullableAnyVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var onStringVal: dynamic
|
||||
public final fun <get-onStringVal>(): dynamic
|
||||
public final fun <set-onStringVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var memberVal: dynamic
|
||||
public final fun <get-memberVal>(): dynamic
|
||||
public final fun <set-memberVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var memberVal: dynamic
|
||||
public final fun <get-memberVal>(): dynamic
|
||||
public final fun <set-memberVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var memberExtensionVal: dynamic
|
||||
public final fun <get-memberExtensionVal>(): dynamic
|
||||
public final fun <set-memberExtensionVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var memberExtensionVal: dynamic
|
||||
public final fun <get-memberExtensionVal>(): dynamic
|
||||
public final fun <set-memberExtensionVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
public final var onAnyVar: dynamic
|
||||
public final fun <get-onAnyVar>(): dynamic
|
||||
public final fun <set-onAnyVar>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var onAnyVar: dynamic
|
||||
public final fun <get-onAnyVar>(): dynamic
|
||||
public final fun <set-onAnyVar>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var onAnyVar: dynamic
|
||||
public final fun <get-onAnyVar>(): dynamic
|
||||
public final fun <set-onAnyVar>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var onAnyVar: dynamic
|
||||
public final fun <get-onAnyVar>(): dynamic
|
||||
public final fun <set-onAnyVar>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var onAnyVar: dynamic
|
||||
public final fun <get-onAnyVar>(): dynamic
|
||||
public final fun <set-onAnyVar>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var onAnyVar: dynamic
|
||||
public final fun <get-onAnyVar>(): dynamic
|
||||
public final fun <set-onAnyVar>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var onNullableAnyVar: dynamic
|
||||
public final fun <get-onNullableAnyVar>(): dynamic
|
||||
public final fun <set-onNullableAnyVar>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var onStringVar: dynamic
|
||||
public final fun <get-onStringVar>(): dynamic
|
||||
public final fun <set-onStringVar>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var memberVar: dynamic
|
||||
public final fun <get-memberVar>(): dynamic
|
||||
public final fun <set-memberVar>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var memberExtensionVar: dynamic
|
||||
public final fun <get-memberExtensionVar>(): dynamic
|
||||
public final fun <set-memberExtensionVar>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var memberVar: dynamic
|
||||
public final fun <get-memberVar>(): dynamic
|
||||
public final fun <set-memberVar>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final var memberExtensionVar: dynamic
|
||||
public final fun <get-memberExtensionVar>(): dynamic
|
||||
public final fun <set-memberExtensionVar>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
@@ -0,0 +1,8 @@
|
||||
public final fun onAny(): dynamic
|
||||
public final fun onAny(): dynamic
|
||||
public final fun onAny(): dynamic
|
||||
public final fun onAny(/*0*/ p0: dynamic): dynamic
|
||||
public final fun onNullableAny(): dynamic
|
||||
public final fun onString(): dynamic
|
||||
public final fun member(): dynamic
|
||||
public final fun memberExtension(): dynamic
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
public final fun foo(): dynamic
|
||||
public final fun isDynamic(): dynamic
|
||||
public final fun foo(/*0*/ p0: dynamic): dynamic
|
||||
public final fun isDynamic(): dynamic
|
||||
public final fun foo(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
|
||||
public final fun isDynamic(): dynamic
|
||||
public final fun </*0*/ T0> foo(): dynamic
|
||||
public final fun isDynamic(): dynamic
|
||||
public final var foo: dynamic
|
||||
public final fun <get-foo>(): dynamic
|
||||
public final fun <set-foo>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final fun isDynamic(): dynamic
|
||||
public final var foo: dynamic
|
||||
public final fun <get-foo>(): dynamic
|
||||
public final fun <set-foo>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
@@ -0,0 +1,4 @@
|
||||
public final fun foo(): dynamic
|
||||
public final fun foo(): dynamic
|
||||
public final fun doo(): dynamic
|
||||
public final fun doo(): dynamic
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
public final fun foo(/*0*/ name: dynamic): dynamic
|
||||
public final fun foo(/*0*/ p0: dynamic, /*1*/ name: dynamic): dynamic
|
||||
public final fun foo(/*0*/ p0: dynamic, /*1*/ duplicate: dynamic, /*2*/ duplicate: dynamic): dynamic
|
||||
@@ -0,0 +1,9 @@
|
||||
public final fun foo(): dynamic
|
||||
public final fun isDynamic(): dynamic
|
||||
public final fun foo(): dynamic
|
||||
public final fun isDynamic(): dynamic
|
||||
public final fun foo(): dynamic
|
||||
public final fun isDynamic(): dynamic
|
||||
public final fun foo(): dynamic
|
||||
public final fun foo(): dynamic
|
||||
public final fun foo(): dynamic
|
||||
+1
@@ -0,0 +1 @@
|
||||
public final fun foo(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
|
||||
@@ -0,0 +1 @@
|
||||
public final fun baz(): dynamic
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
public final fun foo(/*0*/ vararg p0: dynamic /*kotlin.Array<out dynamic>*/): dynamic
|
||||
public final fun foo(/*0*/ vararg p0: dynamic /*kotlin.Array<out dynamic>*/): dynamic
|
||||
public final fun foo(/*0*/ p0: dynamic, /*1*/ p1: dynamic, /*2*/ vararg p2: dynamic /*kotlin.Array<out dynamic>*/): dynamic
|
||||
public final fun foo(/*0*/ p0: dynamic, /*1*/ vararg p1: dynamic /*kotlin.Array<out dynamic>*/, /*2*/ p2: () -> dynamic): dynamic
|
||||
public final fun foo(/*0*/ vararg p0: dynamic /*kotlin.Array<out dynamic>*/, /*1*/ p1: () -> dynamic): dynamic
|
||||
public final fun foo(/*0*/ vararg p0: dynamic /*kotlin.Array<out dynamic>*/): dynamic
|
||||
public final fun foo(/*0*/ vararg p0: dynamic /*kotlin.Array<out dynamic>*/, /*1*/ p1: () -> dynamic): dynamic
|
||||
public final fun foo(/*0*/ vararg p0: dynamic /*kotlin.Array<out dynamic>*/): dynamic
|
||||
public final fun foo(/*0*/ vararg p0: dynamic /*kotlin.Array<out dynamic>*/): dynamic
|
||||
public final fun foo(/*0*/ vararg p0: dynamic /*kotlin.Array<out dynamic>*/): dynamic
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
public final fun foo(): dynamic
|
||||
public final fun ext(): dynamic
|
||||
public final fun bar(): dynamic
|
||||
public final var baz: dynamic
|
||||
public final fun <get-baz>(): dynamic
|
||||
public final fun <set-baz>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final fun ext(): dynamic
|
||||
public final fun extValFun(): dynamic
|
||||
public final var extVal: dynamic
|
||||
public final fun <get-extVal>(): dynamic
|
||||
public final fun <set-extVal>(/*0*/ <set-?>: dynamic): kotlin.Unit
|
||||
public final fun extExtVal(): dynamic
|
||||
public final fun invoke(): dynamic
|
||||
public final fun plus(/*0*/ p0: dynamic): dynamic
|
||||
public final fun invoke(): dynamic
|
||||
public final fun foo(): dynamic
|
||||
@@ -0,0 +1 @@
|
||||
public final fun bar(): dynamic
|
||||
@@ -0,0 +1 @@
|
||||
public final fun foo(): dynamic
|
||||
@@ -61,6 +61,7 @@ import java.util.*;
|
||||
|
||||
import static org.jetbrains.jet.lang.diagnostics.Errors.*;
|
||||
import static org.jetbrains.jet.test.util.RecursiveDescriptorComparator.RECURSIVE;
|
||||
import static org.jetbrains.jet.test.util.RecursiveDescriptorComparator.RECURSIVE_ALL;
|
||||
|
||||
public abstract class AbstractJetDiagnosticsTest extends BaseDiagnosticsTest {
|
||||
|
||||
@@ -146,6 +147,15 @@ public abstract class AbstractJetDiagnosticsTest extends BaseDiagnosticsTest {
|
||||
ok &= testFile.getActualText(moduleBindings.get(testFile.getModule()), actualText, shouldSkipJvmSignatureDiagnostics(groupedByModule));
|
||||
}
|
||||
|
||||
Throwable exceptionFromDynamicCallDescriptorsValidation = null;
|
||||
try {
|
||||
File expectedFile = new File(FileUtil.getNameWithoutExtension(testDataFile.getAbsolutePath()) + ".dynamic.txt");
|
||||
checkDynamicCallDescriptors(expectedFile, testFiles);
|
||||
}
|
||||
catch (Throwable e) {
|
||||
exceptionFromDynamicCallDescriptorsValidation = e;
|
||||
}
|
||||
|
||||
JetTestUtils.assertEqualsToFile(testDataFile, actualText.toString());
|
||||
|
||||
assertTrue("Diagnostics mismatch. See the output above", ok);
|
||||
@@ -157,6 +167,28 @@ public abstract class AbstractJetDiagnosticsTest extends BaseDiagnosticsTest {
|
||||
if (exceptionFromLazyResolveLogValidation != null) {
|
||||
throw UtilsPackage.rethrow(exceptionFromLazyResolveLogValidation);
|
||||
}
|
||||
if (exceptionFromDynamicCallDescriptorsValidation != null) {
|
||||
throw UtilsPackage.rethrow(exceptionFromDynamicCallDescriptorsValidation);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkDynamicCallDescriptors(File expectedFile, List<TestFile> testFiles) {
|
||||
RecursiveDescriptorComparator serializer = new RecursiveDescriptorComparator(RECURSIVE_ALL);
|
||||
|
||||
StringBuilder actualText = new StringBuilder();
|
||||
|
||||
for (TestFile testFile : testFiles) {
|
||||
List<DeclarationDescriptor> dynamicCallDescriptors = testFile.getDynamicCallDescriptors();
|
||||
|
||||
for (DeclarationDescriptor descriptor : dynamicCallDescriptors) {
|
||||
String actualSerialized = serializer.serializeRecursively(descriptor);
|
||||
actualText.append(actualSerialized);
|
||||
}
|
||||
}
|
||||
|
||||
if (actualText.length() != 0 || expectedFile.exists()) {
|
||||
JetTestUtils.assertEqualsToFile(expectedFile, actualText.toString());
|
||||
}
|
||||
}
|
||||
|
||||
public boolean shouldSkipJvmSignatureDiagnostics(Map<TestModule, List<TestFile>> groupedByModule) {
|
||||
|
||||
@@ -33,6 +33,7 @@ import kotlin.KotlinPackage;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.asJava.AsJavaPackage;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.diagnostics.*;
|
||||
import org.jetbrains.jet.lang.psi.JetDeclaration;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
@@ -243,6 +244,7 @@ public abstract class BaseDiagnosticsTest extends
|
||||
private final boolean declareFlexibleType;
|
||||
public final boolean checkLazyLog;
|
||||
private final boolean markDynamicCalls;
|
||||
private final List<DeclarationDescriptor> dynamicCallDescriptors = new ArrayList<DeclarationDescriptor>();
|
||||
|
||||
public TestFile(
|
||||
@Nullable TestModule module,
|
||||
@@ -325,6 +327,11 @@ public abstract class BaseDiagnosticsTest extends
|
||||
return jetFile;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public List<DeclarationDescriptor> getDynamicCallDescriptors() {
|
||||
return dynamicCallDescriptors;
|
||||
}
|
||||
|
||||
public boolean getActualText(BindingContext bindingContext, StringBuilder actualText, boolean skipJvmSignatureDiagnostics) {
|
||||
if (this.jetFile == null) {
|
||||
// TODO: check java files too
|
||||
@@ -338,7 +345,7 @@ public abstract class BaseDiagnosticsTest extends
|
||||
|
||||
final boolean[] ok = { true };
|
||||
List<Diagnostic> diagnostics = ContainerUtil.filter(
|
||||
KotlinPackage.plus(CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, jetFile, markDynamicCalls),
|
||||
KotlinPackage.plus(CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, jetFile, markDynamicCalls, dynamicCallDescriptors),
|
||||
jvmSignatureDiagnostics),
|
||||
whatDiagnosticsToConsider
|
||||
);
|
||||
|
||||
@@ -147,7 +147,7 @@ public class CheckerTestUtilTest extends JetLiteFixture {
|
||||
(JetFile) psiFile)
|
||||
.getBindingContext();
|
||||
|
||||
String expectedText = CheckerTestUtil.addDiagnosticMarkersToText(psiFile, CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, psiFile, false)).toString();
|
||||
String expectedText = CheckerTestUtil.addDiagnosticMarkersToText(psiFile, CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, psiFile, false, null)).toString();
|
||||
|
||||
List<DiagnosedRange> diagnosedRanges = Lists.newArrayList();
|
||||
CheckerTestUtil.parseDiagnosedRanges(expectedText, diagnosedRanges);
|
||||
@@ -155,7 +155,7 @@ public class CheckerTestUtilTest extends JetLiteFixture {
|
||||
diagnosedRange.setFile(psiFile);
|
||||
}
|
||||
|
||||
List<Diagnostic> diagnostics = CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, psiFile, false);
|
||||
List<Diagnostic> diagnostics = CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, psiFile, false, null);
|
||||
Collections.sort(diagnostics, CheckerTestUtil.DIAGNOSTIC_COMPARATOR);
|
||||
|
||||
makeTestData(diagnostics, diagnosedRanges);
|
||||
|
||||
@@ -42,7 +42,7 @@ public class CopyAsDiagnosticTestAction extends AnAction {
|
||||
|
||||
BindingContext bindingContext = ResolvePackage.analyzeFully((JetFile) psiFile);
|
||||
|
||||
List<Diagnostic> diagnostics = CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, psiFile, false);
|
||||
List<Diagnostic> diagnostics = CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, psiFile, false, null);
|
||||
String result = CheckerTestUtil.addDiagnosticMarkersToText(psiFile, diagnostics).toString();
|
||||
|
||||
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
|
||||
|
||||
Reference in New Issue
Block a user