From 7be6fe84beac9cde4b354d3197afa27374762db2 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 12 Apr 2012 18:27:29 +0400 Subject: [PATCH] Made single parameter of Renderer.render() @NotNull, because argument was almost never @Nullable on call-sites. --- .../compiler/DefaultDiagnosticRenderer.java | 12 ++++------- .../AmbiguousDescriptorDiagnosticFactory.java | 2 +- .../lang/diagnostics/DiagnosticRenderer.java | 3 +-- .../jet/lang/diagnostics/Errors.java | 20 +++++++++---------- .../jet/lang/diagnostics/Renderer.java | 7 ++----- .../jet/lang/diagnostics/Renderers.java | 17 ++++++---------- .../jet/resolve/DescriptorRenderer.java | 3 +-- .../jet/resolve/ExpectedResolveData.java | 15 ++++++++++---- .../highlighter/JetLineMarkerProvider.java | 6 +++++- .../libraries/DecompiledDataFactory.java | 2 +- 10 files changed, 41 insertions(+), 46 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/jet/compiler/DefaultDiagnosticRenderer.java b/compiler/cli/src/org/jetbrains/jet/compiler/DefaultDiagnosticRenderer.java index c66171df830..16f97836827 100644 --- a/compiler/cli/src/org/jetbrains/jet/compiler/DefaultDiagnosticRenderer.java +++ b/compiler/cli/src/org/jetbrains/jet/compiler/DefaultDiagnosticRenderer.java @@ -18,7 +18,6 @@ package org.jetbrains.jet.compiler; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.diagnostics.*; import org.jetbrains.jet.lang.psi.JetFile; @@ -41,7 +40,7 @@ public class DefaultDiagnosticRenderer implements DiagnosticRenderer factoryToRenderer.put(EXCEPTION_WHILE_ANALYZING, new DiagnosticWithParameters1Renderer("{0}", new Renderer() { @NotNull @Override - public String render(@Nullable Throwable e) { + public String render(@NotNull Throwable e) { return e.getClass().getSimpleName() + ": " + e.getMessage(); } })); @@ -49,10 +48,7 @@ public class DefaultDiagnosticRenderer implements DiagnosticRenderer @NotNull @Override - public String render(@Nullable Diagnostic diagnostic) { - if (diagnostic == null) { - throw new IllegalArgumentException("Diagnostic passed to diagnostic renderer cannot be null"); - } + public String render(@NotNull Diagnostic diagnostic) { DiagnosticRenderer renderer = factoryToRenderer.get(diagnostic.getFactory()); if (renderer == null) { return diagnostic.getMessage(); // TODO throw IllegalArgumentException instead @@ -72,8 +68,8 @@ public class DefaultDiagnosticRenderer implements DiagnosticRenderer @NotNull @Override - public String render(@Nullable DiagnosticWithParameters1 diagnostic) { - return diagnostic == null ? "null" : messageFormat.format(new Object[]{rendererForA.render(diagnostic.getA())}); + public String render(@NotNull DiagnosticWithParameters1 diagnostic) { + return messageFormat.format(new Object[]{rendererForA.render(diagnostic.getA())}); } } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AmbiguousDescriptorDiagnosticFactory.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AmbiguousDescriptorDiagnosticFactory.java index 57cf016fdb4..4e69661a707 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AmbiguousDescriptorDiagnosticFactory.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AmbiguousDescriptorDiagnosticFactory.java @@ -41,7 +41,7 @@ public class AmbiguousDescriptorDiagnosticFactory extends DiagnosticFactory1>>() { @NotNull @Override - public String render(@Nullable Collection> argument) { + public String render(@NotNull Collection> argument) { StringBuilder stringBuilder = new StringBuilder("\n"); for (ResolvedCall call : argument) { stringBuilder.append(DescriptorRenderer.TEXT.render(call.getResultingDescriptor())).append("\n"); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticRenderer.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticRenderer.java index 8e0d505740e..c71d686fc0f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticRenderer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticRenderer.java @@ -17,7 +17,6 @@ package org.jetbrains.jet.lang.diagnostics; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * @author Evgeny Gerashchenko @@ -26,5 +25,5 @@ import org.jetbrains.annotations.Nullable; public interface DiagnosticRenderer extends Renderer { @NotNull @Override - String render(@Nullable D diagnostic); + String render(@NotNull D diagnostic); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java index 991f03e296c..d50b57581bf 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java @@ -49,7 +49,7 @@ public interface Errors { DiagnosticFactory1 EXCEPTION_WHILE_ANALYZING = DiagnosticFactory1.create(ERROR, "{0}", new Renderer() { @NotNull @Override - public String render(@Nullable Throwable e) { + public String render(@NotNull Throwable e) { return e.getClass().getSimpleName() + ": " + e.getMessage(); } }); @@ -70,8 +70,7 @@ public interface Errors { new Renderer>() { @NotNull @Override - public String render(@Nullable Collection element) { - assert element != null; + public String render(@NotNull Collection element) { StringBuilder sb = new StringBuilder(); for (Iterator iterator = element.iterator(); iterator.hasNext(); ) { JetKeywordToken modifier = iterator.next(); @@ -337,8 +336,7 @@ public interface Errors { DiagnosticFactory1 EXPRESSION_EXPECTED = DiagnosticFactory1.create(ERROR, "{0} is not an expression, and only expression are allowed here", new Renderer() { @NotNull @Override - public String render(@Nullable JetExpression expression) { - assert expression != null; + public String render(@NotNull JetExpression expression) { String expressionType = expression.toString(); return expressionType.substring(0, 1) + expressionType.substring(1).toLowerCase(); } @@ -424,8 +422,8 @@ public interface Errors { DiagnosticFactory2 NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER = DiagnosticFactory2.create(ERROR, "{0} does not refer to a type parameter of {1}", new Renderer() { @NotNull @Override - public String render(@Nullable JetTypeConstraint typeConstraint) { - assert typeConstraint != null; + public String render(@NotNull JetTypeConstraint typeConstraint) { + //noinspection ConstantConditions return typeConstraint.getSubjectTypeParameterName().getReferencedName(); } }, NAME); @@ -446,7 +444,7 @@ public interface Errors { DiagnosticFactory3.create(ERROR, "Type parameter {0} of {1} has inconsistent values: {2}", NAME, DescriptorRenderer.TEXT, new Renderer>() { @NotNull @Override - public String render(@Nullable Collection types) { + public String render(@NotNull Collection types) { StringBuilder builder = new StringBuilder(); for (Iterator iterator = types.iterator(); iterator.hasNext(); ) { JetType jetType = iterator.next(); @@ -462,7 +460,8 @@ public interface Errors { DiagnosticFactory3 EQUALITY_NOT_APPLICABLE = DiagnosticFactory3.create(ERROR, "Operator {0} cannot be applied to {1} and {2}", new Renderer() { @NotNull @Override - public String render(@Nullable JetSimpleNameExpression nameExpression) { + public String render(@NotNull JetSimpleNameExpression nameExpression) { + //noinspection ConstantConditions return nameExpression.getReferencedName(); } }, TO_STRING, TO_STRING); @@ -537,8 +536,7 @@ public interface Errors { DiagnosticFactory1 WRONG_NUMBER_OF_TYPE_ARGUMENTS = DiagnosticFactory1.create(ERROR, "{0} type arguments expected", new Renderer() { @NotNull @Override - public String render(@Nullable Integer argument) { - assert argument != null; + public String render(@NotNull Integer argument) { return argument == 0 ? "No" : argument.toString(); } }); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Renderer.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Renderer.java index 3d427e03be6..5884b97e3ff 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Renderer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Renderer.java @@ -16,15 +16,12 @@ package org.jetbrains.jet.lang.diagnostics; -import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * @author abreslav */ -public interface Renderer

{ - +public interface Renderer { @NotNull - String render(@Nullable P element); + String render(@NotNull O object); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Renderers.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Renderers.java index dcccc2d4f69..7136502cfe9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Renderers.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Renderers.java @@ -18,7 +18,6 @@ package org.jetbrains.jet.lang.diagnostics; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.Named; import org.jetbrains.jet.lang.psi.JetClass; import org.jetbrains.jet.lang.psi.JetClassOrObject; @@ -32,8 +31,8 @@ public class Renderers { public static final Renderer TO_STRING = new Renderer() { @NotNull @Override - public String render(@Nullable Object element) { - return element == null ? "null" : element.toString(); + public String render(@NotNull Object element) { + return element.toString(); } @Override @@ -45,8 +44,7 @@ public class Renderers { public static final Renderer NAME = new Renderer() { @NotNull @Override - public String render(@Nullable Object element) { - if (element == null) return "null"; + public String render(@NotNull Object element) { if (element instanceof Named) { return ((Named) element).getName(); } @@ -57,8 +55,7 @@ public class Renderers { public static final Renderer ELEMENT_TEXT = new Renderer() { @NotNull @Override - public String render(@Nullable PsiElement element) { - if (element == null) return "null"; + public String render(@NotNull PsiElement element) { return element.getText(); } }; @@ -66,8 +63,7 @@ public class Renderers { public static final Renderer RENDER_CLASS_OR_OBJECT = new Renderer() { @NotNull @Override - public String render(@Nullable JetClassOrObject classOrObject) { - assert classOrObject != null; + public String render(@NotNull JetClassOrObject classOrObject) { String name = classOrObject.getName() != null ? " '" + classOrObject.getName() + "'" : ""; if (classOrObject instanceof JetClass) { return "Class" + name; @@ -80,8 +76,7 @@ public class Renderers { public static final Renderer RENDER_TYPE = new Renderer() { @NotNull @Override - public String render(@Nullable JetType type) { - assert type != null; + public String render(@NotNull JetType type) { return DescriptorRenderer.TEXT.renderType(type); } }; diff --git a/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java b/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java index ab314670626..aa98f28b710 100644 --- a/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java +++ b/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java @@ -209,8 +209,7 @@ public class DescriptorRenderer implements Renderer { @NotNull @Override - public String render(DeclarationDescriptor declarationDescriptor) { - if (declarationDescriptor == null) return lt() + "null>"; + public String render(@NotNull DeclarationDescriptor declarationDescriptor) { StringBuilder stringBuilder = new StringBuilder(); declarationDescriptor.accept(rootVisitor, stringBuilder); if (shouldRenderDefinedIn()) { diff --git a/compiler/tests/org/jetbrains/jet/resolve/ExpectedResolveData.java b/compiler/tests/org/jetbrains/jet/resolve/ExpectedResolveData.java index 2be4be17768..4ff2c59ebfb 100644 --- a/compiler/tests/org/jetbrains/jet/resolve/ExpectedResolveData.java +++ b/compiler/tests/org/jetbrains/jet/resolve/ExpectedResolveData.java @@ -23,6 +23,8 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiTreeUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.CompileCompilerDependenciesTest; import org.jetbrains.jet.analyzer.AnalyzeExhaust; import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory; @@ -185,7 +187,7 @@ public abstract class ExpectedResolveData { assertTrue( "Must have been unresolved: " + renderReferenceInContext(referenceExpression) + - " but was resolved to " + DescriptorRenderer.TEXT.render(bindingContext.get(REFERENCE_TARGET, referenceExpression)), + " but was resolved to " + renderNullableDescriptor(bindingContext.get(REFERENCE_TARGET, referenceExpression)), unresolvedReferences.contains(referenceExpression)); continue; } @@ -193,7 +195,7 @@ public abstract class ExpectedResolveData { assertTrue( "Must have been resolved to multiple descriptors: " + renderReferenceInContext(referenceExpression) + - " but was resolved to " + DescriptorRenderer.TEXT.render(bindingContext.get(REFERENCE_TARGET, referenceExpression)), + " but was resolved to " + renderNullableDescriptor(bindingContext.get(REFERENCE_TARGET, referenceExpression)), bindingContext.get(AMBIGUOUS_REFERENCE_TARGET, referenceExpression) != null); continue; } @@ -201,7 +203,7 @@ public abstract class ExpectedResolveData { assertTrue( "Must have been resolved to null: " + renderReferenceInContext(referenceExpression) + - " but was resolved to " + DescriptorRenderer.TEXT.render(bindingContext.get(REFERENCE_TARGET, referenceExpression)), + " but was resolved to " + renderNullableDescriptor(bindingContext.get(REFERENCE_TARGET, referenceExpression)), bindingContext.get(REFERENCE_TARGET, referenceExpression) == null ); continue; @@ -210,7 +212,7 @@ public abstract class ExpectedResolveData { assertTrue( "Must have been resolved to error: " + renderReferenceInContext(referenceExpression) + - " but was resolved to " + DescriptorRenderer.TEXT.render(bindingContext.get(REFERENCE_TARGET, referenceExpression)), + " but was resolved to " + renderNullableDescriptor(bindingContext.get(REFERENCE_TARGET, referenceExpression)), ErrorUtils.isError(bindingContext.get(REFERENCE_TARGET, referenceExpression)) ); continue; @@ -355,4 +357,9 @@ public abstract class ExpectedResolveData { T result = (T) element; return result; } + + @NotNull + private static String renderNullableDescriptor(@Nullable DeclarationDescriptor d) { + return d == null ? "" : DescriptorRenderer.TEXT.render(d); + } } diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java b/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java index bd9577948c6..aac93f48e64 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java @@ -35,6 +35,7 @@ import com.intellij.util.PsiNavigateUtil; import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.Modality; +import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetNamedFunction; import org.jetbrains.jet.lang.psi.JetProperty; @@ -132,7 +133,10 @@ public class JetLineMarkerProvider implements LineMarkerProvider { public String getElementText(PsiElement element) { if (element instanceof JetNamedFunction) { JetNamedFunction function = (JetNamedFunction) element; - return DescriptorRenderer.HTML.render(bindingContext.get(BindingContext.FUNCTION, function)); + SimpleFunctionDescriptor fd = + bindingContext.get(BindingContext.FUNCTION, function); + assert fd != null; + return DescriptorRenderer.HTML.render(fd); } return super.getElementText(element); } diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java b/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java index 4b499419098..f7c27060938 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java +++ b/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java @@ -125,7 +125,7 @@ class DecompiledDataFactory { return r; } - private void appendDescriptor(DeclarationDescriptor descriptor, String indent) { + private void appendDescriptor(@NotNull DeclarationDescriptor descriptor, String indent) { int startOffset = myBuilder.length(); String renderedDescriptor = DescriptorRenderer.COMPACT.render(descriptor); renderedDescriptor = renderedDescriptor.replace("= ...", "= " + DECOMPILED_COMMENT);