Refactoring: replace condition with function

This commit is contained in:
Nikolay Krasko
2015-11-25 13:09:44 +03:00
parent 7622e90438
commit 5bb141381b
3 changed files with 18 additions and 11 deletions
@@ -17,10 +17,10 @@
package org.jetbrains.kotlin.resolve.diagnostics; package org.jetbrains.kotlin.resolve.diagnostics;
import com.intellij.openapi.util.AtomicNotNullLazyValue; import com.intellij.openapi.util.AtomicNotNullLazyValue;
import com.intellij.openapi.util.Condition;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import com.intellij.util.containers.ConcurrentMultiMap; import com.intellij.util.containers.ConcurrentMultiMap;
import com.intellij.util.containers.MultiMap; import com.intellij.util.containers.MultiMap;
import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.diagnostics.Diagnostic; import org.jetbrains.kotlin.diagnostics.Diagnostic;
@@ -28,7 +28,7 @@ import java.util.Collection;
public class DiagnosticsElementsCache { public class DiagnosticsElementsCache {
private final Diagnostics diagnostics; private final Diagnostics diagnostics;
private final Condition<Diagnostic> filter; private final Function1<Diagnostic, Boolean> filter;
private final AtomicNotNullLazyValue<MultiMap<PsiElement, Diagnostic>> elementToDiagnostic = new AtomicNotNullLazyValue<MultiMap<PsiElement, Diagnostic>>() { private final AtomicNotNullLazyValue<MultiMap<PsiElement, Diagnostic>> elementToDiagnostic = new AtomicNotNullLazyValue<MultiMap<PsiElement, Diagnostic>>() {
@NotNull @NotNull
@@ -38,7 +38,7 @@ public class DiagnosticsElementsCache {
} }
}; };
public DiagnosticsElementsCache(Diagnostics diagnostics, Condition<Diagnostic> filter) { public DiagnosticsElementsCache(Diagnostics diagnostics, Function1<Diagnostic, Boolean> filter) {
this.diagnostics = diagnostics; this.diagnostics = diagnostics;
this.filter = filter; this.filter = filter;
} }
@@ -48,10 +48,10 @@ public class DiagnosticsElementsCache {
return elementToDiagnostic.getValue().get(psiElement); return elementToDiagnostic.getValue().get(psiElement);
} }
private static MultiMap<PsiElement, Diagnostic> buildElementToDiagnosticCache(Diagnostics diagnostics, Condition<Diagnostic> filter) { private static MultiMap<PsiElement, Diagnostic> buildElementToDiagnosticCache(Diagnostics diagnostics, Function1<Diagnostic, Boolean> filter) {
MultiMap<PsiElement, Diagnostic> elementToDiagnostic = new ConcurrentMultiMap<PsiElement, Diagnostic>(); MultiMap<PsiElement, Diagnostic> elementToDiagnostic = new ConcurrentMultiMap<PsiElement, Diagnostic>();
for (Diagnostic diagnostic : diagnostics) { for (Diagnostic diagnostic : diagnostics) {
if (filter.value(diagnostic)) { if (filter.invoke(diagnostic)) {
elementToDiagnostic.putValue(diagnostic.getPsiElement(), diagnostic); elementToDiagnostic.putValue(diagnostic.getPsiElement(), diagnostic);
} }
} }
@@ -24,8 +24,9 @@ import com.intellij.openapi.util.ModificationTracker;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFile;
import com.intellij.util.containers.ConcurrentWeakValueHashMap; import com.intellij.util.containers.ConcurrentWeakValueHashMap;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.FilteringIterator; import com.intellij.util.containers.FilteringIterator;
import kotlin.CollectionsKt;
import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.TestOnly; import org.jetbrains.annotations.TestOnly;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns; import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
@@ -70,12 +71,13 @@ public class DiagnosticsWithSuppression implements Diagnostics {
// The cache is weak: we're OK with losing it // The cache is weak: we're OK with losing it
private final Map<KtAnnotated, Suppressor> suppressors = new ConcurrentWeakValueHashMap<KtAnnotated, Suppressor>(); private final Map<KtAnnotated, Suppressor> suppressors = new ConcurrentWeakValueHashMap<KtAnnotated, Suppressor>();
private final Condition<Diagnostic> filter = new Condition<Diagnostic>() { private final Function1<Diagnostic, Boolean> filter = new Function1<Diagnostic, Boolean>() {
@Override @Override
public boolean value(Diagnostic diagnostic) { public Boolean invoke(Diagnostic diagnostic) {
return !isSuppressed(diagnostic); return !isSuppressed(diagnostic);
} }
}; };
private final DiagnosticsElementsCache elementsCache = new DiagnosticsElementsCache(this, filter); private final DiagnosticsElementsCache elementsCache = new DiagnosticsElementsCache(this, filter);
public DiagnosticsWithSuppression(@NotNull BindingContext context, @NotNull Collection<Diagnostic> diagnostics) { public DiagnosticsWithSuppression(@NotNull BindingContext context, @NotNull Collection<Diagnostic> diagnostics) {
@@ -92,13 +94,18 @@ public class DiagnosticsWithSuppression implements Diagnostics {
@NotNull @NotNull
@Override @Override
public Iterator<Diagnostic> iterator() { public Iterator<Diagnostic> iterator() {
return new FilteringIterator<Diagnostic, Diagnostic>(diagnostics.iterator(), filter); return new FilteringIterator<Diagnostic, Diagnostic>(diagnostics.iterator(), new Condition<Diagnostic>() {
@Override
public boolean value(Diagnostic diagnostic) {
return filter.invoke(diagnostic);
}
});
} }
@NotNull @NotNull
@Override @Override
public Collection<Diagnostic> all() { public Collection<Diagnostic> all() {
return ContainerUtil.filter(diagnostics, filter); return CollectionsKt.filter(diagnostics, filter);
} }
@NotNull @NotNull
@@ -26,7 +26,7 @@ public class SimpleDiagnostics(diagnostics: Collection<Diagnostic>) : Diagnostic
private val diagnostics = ArrayList(diagnostics) private val diagnostics = ArrayList(diagnostics)
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
private val elementsCache = DiagnosticsElementsCache(this, Condition.TRUE as Condition<Diagnostic>?) private val elementsCache = DiagnosticsElementsCache(this, { true })
override fun all() = diagnostics override fun all() = diagnostics