Made single parameter of Renderer.render() @NotNull, because argument was almost never @Nullable on call-sites.

This commit is contained in:
Evgeny Gerashchenko
2012-04-12 18:27:29 +04:00
parent 46d929efa1
commit 7be6fe84be
10 changed files with 41 additions and 46 deletions
@@ -18,7 +18,6 @@ package org.jetbrains.jet.compiler;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.diagnostics.*; import org.jetbrains.jet.lang.diagnostics.*;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
@@ -41,7 +40,7 @@ public class DefaultDiagnosticRenderer implements DiagnosticRenderer<Diagnostic>
factoryToRenderer.put(EXCEPTION_WHILE_ANALYZING, new DiagnosticWithParameters1Renderer<JetFile, Throwable>("{0}", new Renderer<Throwable>() { factoryToRenderer.put(EXCEPTION_WHILE_ANALYZING, new DiagnosticWithParameters1Renderer<JetFile, Throwable>("{0}", new Renderer<Throwable>() {
@NotNull @NotNull
@Override @Override
public String render(@Nullable Throwable e) { public String render(@NotNull Throwable e) {
return e.getClass().getSimpleName() + ": " + e.getMessage(); return e.getClass().getSimpleName() + ": " + e.getMessage();
} }
})); }));
@@ -49,10 +48,7 @@ public class DefaultDiagnosticRenderer implements DiagnosticRenderer<Diagnostic>
@NotNull @NotNull
@Override @Override
public String render(@Nullable Diagnostic diagnostic) { public String render(@NotNull Diagnostic diagnostic) {
if (diagnostic == null) {
throw new IllegalArgumentException("Diagnostic passed to diagnostic renderer cannot be null");
}
DiagnosticRenderer renderer = factoryToRenderer.get(diagnostic.getFactory()); DiagnosticRenderer renderer = factoryToRenderer.get(diagnostic.getFactory());
if (renderer == null) { if (renderer == null) {
return diagnostic.getMessage(); // TODO throw IllegalArgumentException instead return diagnostic.getMessage(); // TODO throw IllegalArgumentException instead
@@ -72,8 +68,8 @@ public class DefaultDiagnosticRenderer implements DiagnosticRenderer<Diagnostic>
@NotNull @NotNull
@Override @Override
public String render(@Nullable DiagnosticWithParameters1<E, A> diagnostic) { public String render(@NotNull DiagnosticWithParameters1<E, A> diagnostic) {
return diagnostic == null ? "null" : messageFormat.format(new Object[]{rendererForA.render(diagnostic.getA())}); return messageFormat.format(new Object[]{rendererForA.render(diagnostic.getA())});
} }
} }
} }
@@ -41,7 +41,7 @@ public class AmbiguousDescriptorDiagnosticFactory extends DiagnosticFactory1<Psi
new Renderer<Collection<? extends ResolvedCall<? extends CallableDescriptor>>>() { new Renderer<Collection<? extends ResolvedCall<? extends CallableDescriptor>>>() {
@NotNull @NotNull
@Override @Override
public String render(@Nullable Collection<? extends ResolvedCall<? extends CallableDescriptor>> argument) { public String render(@NotNull Collection<? extends ResolvedCall<? extends CallableDescriptor>> argument) {
StringBuilder stringBuilder = new StringBuilder("\n"); StringBuilder stringBuilder = new StringBuilder("\n");
for (ResolvedCall<? extends CallableDescriptor> call : argument) { for (ResolvedCall<? extends CallableDescriptor> call : argument) {
stringBuilder.append(DescriptorRenderer.TEXT.render(call.getResultingDescriptor())).append("\n"); stringBuilder.append(DescriptorRenderer.TEXT.render(call.getResultingDescriptor())).append("\n");
@@ -17,7 +17,6 @@
package org.jetbrains.jet.lang.diagnostics; package org.jetbrains.jet.lang.diagnostics;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/** /**
* @author Evgeny Gerashchenko * @author Evgeny Gerashchenko
@@ -26,5 +25,5 @@ import org.jetbrains.annotations.Nullable;
public interface DiagnosticRenderer<D extends Diagnostic> extends Renderer<D> { public interface DiagnosticRenderer<D extends Diagnostic> extends Renderer<D> {
@NotNull @NotNull
@Override @Override
String render(@Nullable D diagnostic); String render(@NotNull D diagnostic);
} }
@@ -49,7 +49,7 @@ public interface Errors {
DiagnosticFactory1<JetFile, Throwable> EXCEPTION_WHILE_ANALYZING = DiagnosticFactory1.create(ERROR, "{0}", new Renderer<Throwable>() { DiagnosticFactory1<JetFile, Throwable> EXCEPTION_WHILE_ANALYZING = DiagnosticFactory1.create(ERROR, "{0}", new Renderer<Throwable>() {
@NotNull @NotNull
@Override @Override
public String render(@Nullable Throwable e) { public String render(@NotNull Throwable e) {
return e.getClass().getSimpleName() + ": " + e.getMessage(); return e.getClass().getSimpleName() + ": " + e.getMessage();
} }
}); });
@@ -70,8 +70,7 @@ public interface Errors {
new Renderer<Collection<JetKeywordToken>>() { new Renderer<Collection<JetKeywordToken>>() {
@NotNull @NotNull
@Override @Override
public String render(@Nullable Collection<JetKeywordToken> element) { public String render(@NotNull Collection<JetKeywordToken> element) {
assert element != null;
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (Iterator<JetKeywordToken> iterator = element.iterator(); iterator.hasNext(); ) { for (Iterator<JetKeywordToken> iterator = element.iterator(); iterator.hasNext(); ) {
JetKeywordToken modifier = iterator.next(); JetKeywordToken modifier = iterator.next();
@@ -337,8 +336,7 @@ public interface Errors {
DiagnosticFactory1<JetExpression, JetExpression> EXPRESSION_EXPECTED = DiagnosticFactory1.create(ERROR, "{0} is not an expression, and only expression are allowed here", new Renderer<JetExpression>() { DiagnosticFactory1<JetExpression, JetExpression> EXPRESSION_EXPECTED = DiagnosticFactory1.create(ERROR, "{0} is not an expression, and only expression are allowed here", new Renderer<JetExpression>() {
@NotNull @NotNull
@Override @Override
public String render(@Nullable JetExpression expression) { public String render(@NotNull JetExpression expression) {
assert expression != null;
String expressionType = expression.toString(); String expressionType = expression.toString();
return expressionType.substring(0, 1) + expressionType.substring(1).toLowerCase(); return expressionType.substring(0, 1) + expressionType.substring(1).toLowerCase();
} }
@@ -424,8 +422,8 @@ public interface Errors {
DiagnosticFactory2<JetSimpleNameExpression, JetTypeConstraint, JetTypeParameterListOwner> NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER = DiagnosticFactory2.create(ERROR, "{0} does not refer to a type parameter of {1}", new Renderer<JetTypeConstraint>() { DiagnosticFactory2<JetSimpleNameExpression, JetTypeConstraint, JetTypeParameterListOwner> NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER = DiagnosticFactory2.create(ERROR, "{0} does not refer to a type parameter of {1}", new Renderer<JetTypeConstraint>() {
@NotNull @NotNull
@Override @Override
public String render(@Nullable JetTypeConstraint typeConstraint) { public String render(@NotNull JetTypeConstraint typeConstraint) {
assert typeConstraint != null; //noinspection ConstantConditions
return typeConstraint.getSubjectTypeParameterName().getReferencedName(); return typeConstraint.getSubjectTypeParameterName().getReferencedName();
} }
}, NAME); }, 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<Collection<JetType>>() { DiagnosticFactory3.create(ERROR, "Type parameter {0} of {1} has inconsistent values: {2}", NAME, DescriptorRenderer.TEXT, new Renderer<Collection<JetType>>() {
@NotNull @NotNull
@Override @Override
public String render(@Nullable Collection<JetType> types) { public String render(@NotNull Collection<JetType> types) {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
for (Iterator<JetType> iterator = types.iterator(); iterator.hasNext(); ) { for (Iterator<JetType> iterator = types.iterator(); iterator.hasNext(); ) {
JetType jetType = iterator.next(); JetType jetType = iterator.next();
@@ -462,7 +460,8 @@ public interface Errors {
DiagnosticFactory3<JetBinaryExpression, JetSimpleNameExpression, JetType, JetType> EQUALITY_NOT_APPLICABLE = DiagnosticFactory3.create(ERROR, "Operator {0} cannot be applied to {1} and {2}", new Renderer<JetSimpleNameExpression>() { DiagnosticFactory3<JetBinaryExpression, JetSimpleNameExpression, JetType, JetType> EQUALITY_NOT_APPLICABLE = DiagnosticFactory3.create(ERROR, "Operator {0} cannot be applied to {1} and {2}", new Renderer<JetSimpleNameExpression>() {
@NotNull @NotNull
@Override @Override
public String render(@Nullable JetSimpleNameExpression nameExpression) { public String render(@NotNull JetSimpleNameExpression nameExpression) {
//noinspection ConstantConditions
return nameExpression.getReferencedName(); return nameExpression.getReferencedName();
} }
}, TO_STRING, TO_STRING); }, TO_STRING, TO_STRING);
@@ -537,8 +536,7 @@ public interface Errors {
DiagnosticFactory1<JetElement, Integer> WRONG_NUMBER_OF_TYPE_ARGUMENTS = DiagnosticFactory1.create(ERROR, "{0} type arguments expected", new Renderer<Integer>() { DiagnosticFactory1<JetElement, Integer> WRONG_NUMBER_OF_TYPE_ARGUMENTS = DiagnosticFactory1.create(ERROR, "{0} type arguments expected", new Renderer<Integer>() {
@NotNull @NotNull
@Override @Override
public String render(@Nullable Integer argument) { public String render(@NotNull Integer argument) {
assert argument != null;
return argument == 0 ? "No" : argument.toString(); return argument == 0 ? "No" : argument.toString();
} }
}); });
@@ -16,15 +16,12 @@
package org.jetbrains.jet.lang.diagnostics; package org.jetbrains.jet.lang.diagnostics;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/** /**
* @author abreslav * @author abreslav
*/ */
public interface Renderer<P> { public interface Renderer<O> {
@NotNull @NotNull
String render(@Nullable P element); String render(@NotNull O object);
} }
@@ -18,7 +18,6 @@ package org.jetbrains.jet.lang.diagnostics;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.Named; import org.jetbrains.jet.lang.descriptors.Named;
import org.jetbrains.jet.lang.psi.JetClass; import org.jetbrains.jet.lang.psi.JetClass;
import org.jetbrains.jet.lang.psi.JetClassOrObject; import org.jetbrains.jet.lang.psi.JetClassOrObject;
@@ -32,8 +31,8 @@ public class Renderers {
public static final Renderer<Object> TO_STRING = new Renderer<Object>() { public static final Renderer<Object> TO_STRING = new Renderer<Object>() {
@NotNull @NotNull
@Override @Override
public String render(@Nullable Object element) { public String render(@NotNull Object element) {
return element == null ? "null" : element.toString(); return element.toString();
} }
@Override @Override
@@ -45,8 +44,7 @@ public class Renderers {
public static final Renderer<Object> NAME = new Renderer<Object>() { public static final Renderer<Object> NAME = new Renderer<Object>() {
@NotNull @NotNull
@Override @Override
public String render(@Nullable Object element) { public String render(@NotNull Object element) {
if (element == null) return "null";
if (element instanceof Named) { if (element instanceof Named) {
return ((Named) element).getName(); return ((Named) element).getName();
} }
@@ -57,8 +55,7 @@ public class Renderers {
public static final Renderer<PsiElement> ELEMENT_TEXT = new Renderer<PsiElement>() { public static final Renderer<PsiElement> ELEMENT_TEXT = new Renderer<PsiElement>() {
@NotNull @NotNull
@Override @Override
public String render(@Nullable PsiElement element) { public String render(@NotNull PsiElement element) {
if (element == null) return "null";
return element.getText(); return element.getText();
} }
}; };
@@ -66,8 +63,7 @@ public class Renderers {
public static final Renderer<JetClassOrObject> RENDER_CLASS_OR_OBJECT = new Renderer<JetClassOrObject>() { public static final Renderer<JetClassOrObject> RENDER_CLASS_OR_OBJECT = new Renderer<JetClassOrObject>() {
@NotNull @NotNull
@Override @Override
public String render(@Nullable JetClassOrObject classOrObject) { public String render(@NotNull JetClassOrObject classOrObject) {
assert classOrObject != null;
String name = classOrObject.getName() != null ? " '" + classOrObject.getName() + "'" : ""; String name = classOrObject.getName() != null ? " '" + classOrObject.getName() + "'" : "";
if (classOrObject instanceof JetClass) { if (classOrObject instanceof JetClass) {
return "Class" + name; return "Class" + name;
@@ -80,8 +76,7 @@ public class Renderers {
public static final Renderer<JetType> RENDER_TYPE = new Renderer<JetType>() { public static final Renderer<JetType> RENDER_TYPE = new Renderer<JetType>() {
@NotNull @NotNull
@Override @Override
public String render(@Nullable JetType type) { public String render(@NotNull JetType type) {
assert type != null;
return DescriptorRenderer.TEXT.renderType(type); return DescriptorRenderer.TEXT.renderType(type);
} }
}; };
@@ -209,8 +209,7 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
@NotNull @NotNull
@Override @Override
public String render(DeclarationDescriptor declarationDescriptor) { public String render(@NotNull DeclarationDescriptor declarationDescriptor) {
if (declarationDescriptor == null) return lt() + "null>";
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
declarationDescriptor.accept(rootVisitor, stringBuilder); declarationDescriptor.accept(rootVisitor, stringBuilder);
if (shouldRenderDefinedIn()) { if (shouldRenderDefinedIn()) {
@@ -23,6 +23,8 @@ import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFile;
import com.intellij.psi.util.PsiTreeUtil; 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.CompileCompilerDependenciesTest;
import org.jetbrains.jet.analyzer.AnalyzeExhaust; import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory; import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
@@ -185,7 +187,7 @@ public abstract class ExpectedResolveData {
assertTrue( assertTrue(
"Must have been unresolved: " + "Must have been unresolved: " +
renderReferenceInContext(referenceExpression) + 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)); unresolvedReferences.contains(referenceExpression));
continue; continue;
} }
@@ -193,7 +195,7 @@ public abstract class ExpectedResolveData {
assertTrue( assertTrue(
"Must have been resolved to multiple descriptors: " + "Must have been resolved to multiple descriptors: " +
renderReferenceInContext(referenceExpression) + 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); bindingContext.get(AMBIGUOUS_REFERENCE_TARGET, referenceExpression) != null);
continue; continue;
} }
@@ -201,7 +203,7 @@ public abstract class ExpectedResolveData {
assertTrue( assertTrue(
"Must have been resolved to null: " + "Must have been resolved to null: " +
renderReferenceInContext(referenceExpression) + 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 bindingContext.get(REFERENCE_TARGET, referenceExpression) == null
); );
continue; continue;
@@ -210,7 +212,7 @@ public abstract class ExpectedResolveData {
assertTrue( assertTrue(
"Must have been resolved to error: " + "Must have been resolved to error: " +
renderReferenceInContext(referenceExpression) + 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)) ErrorUtils.isError(bindingContext.get(REFERENCE_TARGET, referenceExpression))
); );
continue; continue;
@@ -355,4 +357,9 @@ public abstract class ExpectedResolveData {
T result = (T) element; T result = (T) element;
return result; return result;
} }
@NotNull
private static String renderNullableDescriptor(@Nullable DeclarationDescriptor d) {
return d == null ? "<null>" : DescriptorRenderer.TEXT.render(d);
}
} }
@@ -35,6 +35,7 @@ import com.intellij.util.PsiNavigateUtil;
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.Modality; 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.JetFile;
import org.jetbrains.jet.lang.psi.JetNamedFunction; import org.jetbrains.jet.lang.psi.JetNamedFunction;
import org.jetbrains.jet.lang.psi.JetProperty; import org.jetbrains.jet.lang.psi.JetProperty;
@@ -132,7 +133,10 @@ public class JetLineMarkerProvider implements LineMarkerProvider {
public String getElementText(PsiElement element) { public String getElementText(PsiElement element) {
if (element instanceof JetNamedFunction) { if (element instanceof JetNamedFunction) {
JetNamedFunction function = (JetNamedFunction) element; 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); return super.getElementText(element);
} }
@@ -125,7 +125,7 @@ class DecompiledDataFactory {
return r; return r;
} }
private void appendDescriptor(DeclarationDescriptor descriptor, String indent) { private void appendDescriptor(@NotNull DeclarationDescriptor descriptor, String indent) {
int startOffset = myBuilder.length(); int startOffset = myBuilder.length();
String renderedDescriptor = DescriptorRenderer.COMPACT.render(descriptor); String renderedDescriptor = DescriptorRenderer.COMPACT.render(descriptor);
renderedDescriptor = renderedDescriptor.replace("= ...", "= " + DECOMPILED_COMMENT); renderedDescriptor = renderedDescriptor.replace("= ...", "= " + DECOMPILED_COMMENT);