From c1f8db5962b45d5df77469e75199821565b5cd47 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Mon, 13 Oct 2014 19:41:49 +0400 Subject: [PATCH] Fix MutableDiagnosticsTest#testCaching() Sadly relying on implementation details --- .../resolve/DiagnosticsWithSuppression.java | 7 +++ .../MutableDiagnosticsWithSuppression.kt | 4 +- .../jet/resolve/MutableDiagnosticsTest.kt | 49 ++++++++++++------- 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DiagnosticsWithSuppression.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DiagnosticsWithSuppression.java index d9a350c7698..3701bfa1e2e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DiagnosticsWithSuppression.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DiagnosticsWithSuppression.java @@ -26,6 +26,7 @@ import com.intellij.util.containers.ConcurrentWeakValueHashMap; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.FilteringIterator; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.TestOnly; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.diagnostics.Diagnostic; import org.jetbrains.jet.lang.diagnostics.DiagnosticFactory; @@ -298,4 +299,10 @@ public class DiagnosticsWithSuppression implements Diagnostics { return other instanceof EmptySuppressor; } } + + @TestOnly + @NotNull + public Collection getDiagnostics() { + return diagnostics; + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/MutableDiagnosticsWithSuppression.kt b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/MutableDiagnosticsWithSuppression.kt index 78095977374..5c83c70d24c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/MutableDiagnosticsWithSuppression.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/MutableDiagnosticsWithSuppression.kt @@ -22,6 +22,7 @@ import com.intellij.openapi.util.CompositeModificationTracker import com.intellij.util.CachedValueImpl import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.PsiElement +import org.jetbrains.annotations.TestOnly public class MutableDiagnosticsWithSuppression( private val bindingContext: BindingContext, @@ -56,4 +57,5 @@ public class MutableDiagnosticsWithSuppression( modificationTracker.incModificationCount() } -} \ No newline at end of file + TestOnly public fun getReadonlyView(): DiagnosticsWithSuppression = readonlyView() +} diff --git a/compiler/tests/org/jetbrains/jet/resolve/MutableDiagnosticsTest.kt b/compiler/tests/org/jetbrains/jet/resolve/MutableDiagnosticsTest.kt index 74f91738d07..a366136552e 100644 --- a/compiler/tests/org/jetbrains/jet/resolve/MutableDiagnosticsTest.kt +++ b/compiler/tests/org/jetbrains/jet/resolve/MutableDiagnosticsTest.kt @@ -26,6 +26,7 @@ import org.jetbrains.jet.lang.resolve.lazy.KotlinTestWithEnvironment import org.jetbrains.jet.config.CompilerConfiguration import org.jetbrains.jet.lang.resolve.BindingTrace import org.jetbrains.jet.lang.resolve.Diagnostics +import org.jetbrains.jet.lang.resolve.MutableDiagnosticsWithSuppression class MutableDiagnosticsTest : KotlinTestWithEnvironment() { override fun createEnvironment(): JetCoreEnvironment? { @@ -44,7 +45,7 @@ class MutableDiagnosticsTest : KotlinTestWithEnvironment() { Assert.assertTrue(middle.diagnostics.isEmpty()) Assert.assertTrue(derived.diagnostics.isEmpty()) - middle.report(DummyDiagnostic()) + middle.reportDiagnostic() Assert.assertTrue(base.diagnostics.isEmpty()) Assert.assertFalse(middle.diagnostics.isEmpty()) @@ -63,9 +64,9 @@ class MutableDiagnosticsTest : KotlinTestWithEnvironment() { Assert.assertTrue(middle.diagnostics.isEmpty()) Assert.assertTrue(derived.diagnostics.isEmpty()) - base.report(DummyDiagnostic()) - middle.report(DummyDiagnostic()) - derived.report(DummyDiagnostic()) + base.reportDiagnostic() + middle.reportDiagnostic() + derived.reportDiagnostic() Assert.assertEquals(1, base.diagnostics.all().size) Assert.assertEquals(2, middle.diagnostics.all().size) @@ -83,40 +84,52 @@ class MutableDiagnosticsTest : KotlinTestWithEnvironment() { val middle = DelegatingBindingTrace(base.getBindingContext(), "middle") val derived = DelegatingBindingTrace(middle.getBindingContext(), "derived") + base.reportDiagnostic() + middle.reportDiagnostic() + derived.reportDiagnostic() + val cachedBase = base.diagnostics val cachedMiddle = middle.diagnostics val cachedDerived = derived.diagnostics - val cachedListForBase = cachedBase.all() - val cachedListForMiddle = cachedMiddle.all() - val cachedListForDerived = cachedDerived.all() + val cachedListForBase = cachedBase.contents() + val cachedListForMiddle = cachedMiddle.contents() + val cachedListForDerived = cachedDerived.contents() - Assert.assertSame(cachedListForBase, base.diagnostics.all()) - Assert.assertSame(cachedListForMiddle, middle.diagnostics.all()) - Assert.assertSame(cachedListForDerived, derived.diagnostics.all()) + Assert.assertSame(cachedListForBase, base.diagnostics.contents()) + Assert.assertSame(cachedListForMiddle, middle.diagnostics.contents()) + Assert.assertSame(cachedListForDerived, derived.diagnostics.contents()) Assert.assertSame(cachedBase, base.diagnostics) Assert.assertSame(cachedMiddle, middle.diagnostics) Assert.assertSame(cachedDerived, derived.diagnostics) - derived.report(DummyDiagnostic()) + derived.reportDiagnostic() - Assert.assertSame(cachedListForBase, base.diagnostics.all()) - Assert.assertSame(cachedListForMiddle, middle.diagnostics.all()) - Assert.assertNotSame(cachedListForDerived, derived.diagnostics.all()) + Assert.assertSame(cachedListForBase, base.diagnostics.contents()) + Assert.assertSame(cachedListForMiddle, middle.diagnostics.contents()) + Assert.assertNotSame(cachedListForDerived, derived.diagnostics.contents()) Assert.assertSame(cachedBase, base.diagnostics) Assert.assertSame(cachedMiddle, middle.diagnostics) - middle.report(DummyDiagnostic()) + middle.reportDiagnostic() - Assert.assertSame(cachedListForBase, base.diagnostics.all()) - Assert.assertNotSame(cachedListForMiddle, middle.diagnostics.all()) - Assert.assertNotSame(cachedListForDerived, derived.diagnostics.all()) + Assert.assertSame(cachedListForBase, base.diagnostics.contents()) + Assert.assertNotSame(cachedListForMiddle, middle.diagnostics.contents()) + Assert.assertNotSame(cachedListForDerived, derived.diagnostics.contents()) Assert.assertSame(cachedBase, base.diagnostics) } + private fun BindingTrace.reportDiagnostic() { + report(DummyDiagnostic()) + } + + //NOTE: cannot simply call all() since it applies filter on every query and produces new collection + private fun Diagnostics.contents(): MutableCollection { + return (this as MutableDiagnosticsWithSuppression).getReadonlyView().getDiagnostics() + } private inner class DummyDiagnostic : Diagnostic { val dummyElement = JetPsiFactory(getEnvironment().getProject()).createType("Int")