From 077fc528d17e8fce9acc4386f97edcb5fecb6062 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 19 May 2016 18:03:05 +0300 Subject: [PATCH] Minor. Change CompilationException parameter to @Nullable A lot of call sites actally pass null as an element, so it's better to fail with original stack-trace instead of NPE caused by nullability check --- .../kotlin/codegen/CompilationException.java | 16 +++++++++++----- .../kotlin/cli/common/messages/MessageUtil.java | 3 ++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/CompilationException.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/CompilationException.java index a9200eb6d8b..25445136fee 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/CompilationException.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/CompilationException.java @@ -26,12 +26,12 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticUtils; public class CompilationException extends RuntimeException { private final PsiElement element; - public CompilationException(@NotNull String message, @Nullable Throwable cause, @NotNull PsiElement element) { + public CompilationException(@NotNull String message, @Nullable Throwable cause, @Nullable PsiElement element) { super(getMessage(message, cause, element), cause); this.element = element; } - @NotNull + @Nullable public PsiElement getElement() { return element; } @@ -45,7 +45,7 @@ public class CompilationException extends RuntimeException { return "unknown"; } - public static String getMessage(@NotNull final String message, @Nullable final Throwable cause, @NotNull final PsiElement element) { + public static String getMessage(@NotNull final String message, @Nullable final Throwable cause, @Nullable final PsiElement element) { return ApplicationManager.getApplication().runReadAction(new Computable() { @Override public String compute() { @@ -55,8 +55,14 @@ public class CompilationException extends RuntimeException { String causeMessage = cause.getMessage(); result.append("Cause: ").append(causeMessage == null ? cause.toString() : causeMessage).append("\n"); } - result.append("File being compiled and position: ").append(DiagnosticUtils.atLocation(element)).append("\n"); - result.append("PsiElement: ").append(element.getText()).append("\n"); + if (element != null) { + result.append("File being compiled and position: ").append(DiagnosticUtils.atLocation(element)).append("\n"); + result.append("PsiElement: ").append(element.getText()).append("\n"); + } + else { + result.append("Element is unknown"); + } + if (cause != null) { result.append("The root cause was thrown at: ").append(where(cause)); } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/MessageUtil.java b/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/MessageUtil.java index 10ffb209deb..012a885a214 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/MessageUtil.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/MessageUtil.java @@ -31,7 +31,8 @@ public class MessageUtil { private MessageUtil() {} @NotNull - public static CompilerMessageLocation psiElementToMessageLocation(@NotNull PsiElement element) { + public static CompilerMessageLocation psiElementToMessageLocation(@Nullable PsiElement element) { + if (element == null) return CompilerMessageLocation.NO_LOCATION; PsiFile file = element.getContainingFile(); return psiFileToMessageLocation(file, "", DiagnosticUtils.getLineAndColumnInPsiFile(file, element.getTextRange())); }