Fix MutableDiagnosticsTest#testCaching()
Sadly relying on implementation details
This commit is contained in:
@@ -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<Diagnostic> getDiagnostics() {
|
||||
return diagnostics;
|
||||
}
|
||||
}
|
||||
|
||||
+3
-1
@@ -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()
|
||||
}
|
||||
|
||||
}
|
||||
TestOnly public fun getReadonlyView(): DiagnosticsWithSuppression = readonlyView()
|
||||
}
|
||||
|
||||
@@ -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<Diagnostic> {
|
||||
return (this as MutableDiagnosticsWithSuppression).getReadonlyView().getDiagnostics()
|
||||
}
|
||||
|
||||
private inner class DummyDiagnostic : Diagnostic {
|
||||
val dummyElement = JetPsiFactory(getEnvironment().getProject()).createType("Int")
|
||||
|
||||
Reference in New Issue
Block a user