diff --git a/compiler/cli/src/org/jetbrains/jet/cli/common/messages/AnalyzerWithCompilerReport.java b/compiler/cli/src/org/jetbrains/jet/cli/common/messages/AnalyzerWithCompilerReport.java index 6ec5b9678bd..1a912f62614 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/common/messages/AnalyzerWithCompilerReport.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/common/messages/AnalyzerWithCompilerReport.java @@ -17,7 +17,6 @@ package org.jetbrains.jet.cli.common.messages; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiErrorElement; @@ -90,8 +89,6 @@ public final class AnalyzerWithCompilerReport { private static boolean reportDiagnostic(@NotNull Diagnostic diagnostic, @NotNull MessageCollector messageCollector) { if (!diagnostic.isValid()) return false; DiagnosticUtils.LineAndColumn lineAndColumn = DiagnosticUtils.getLineAndColumn(diagnostic); - VirtualFile virtualFile = diagnostic.getPsiFile().getVirtualFile(); - String path = virtualFile == null ? null : virtualFile.getPath(); String render; if (diagnostic instanceof MyDiagnostic) { render = ((MyDiagnostic)diagnostic).message; @@ -100,7 +97,7 @@ public final class AnalyzerWithCompilerReport { render = DefaultErrorMessages.RENDERER.render(diagnostic); } messageCollector.report(convertSeverity(diagnostic.getSeverity()), render, - CompilerMessageLocation.create(path, lineAndColumn.getLine(), lineAndColumn.getColumn())); + MessageUtil.psiFileToMessageLocation(diagnostic.getPsiFile(), null, lineAndColumn.getLine(), lineAndColumn.getColumn())); return diagnostic.getSeverity() == Severity.ERROR; } diff --git a/compiler/cli/src/org/jetbrains/jet/cli/common/messages/MessageUtil.java b/compiler/cli/src/org/jetbrains/jet/cli/common/messages/MessageUtil.java index 8d26b145c0b..99c0281162e 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/common/messages/MessageUtil.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/common/messages/MessageUtil.java @@ -17,11 +17,16 @@ package org.jetbrains.jet.cli.common.messages; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.vfs.impl.jar.CoreJarVirtualFile; +import com.intellij.openapi.vfs.local.CoreLocalVirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils; +import static com.intellij.openapi.util.io.FileUtil.toSystemDependentName; + public class MessageUtil { private MessageUtil() {} @@ -29,8 +34,23 @@ public class MessageUtil { public static CompilerMessageLocation psiElementToMessageLocation(@NotNull PsiElement element) { PsiFile file = element.getContainingFile(); DiagnosticUtils.LineAndColumn lineAndColumn = DiagnosticUtils.getLineAndColumnInPsiFile(file, element.getTextRange()); + return psiFileToMessageLocation(file, "", lineAndColumn.getLine(), lineAndColumn.getColumn()); + } + + @NotNull + public static CompilerMessageLocation psiFileToMessageLocation(@NotNull PsiFile file, @Nullable String defaultValue, int line, int column) { + String path; VirtualFile virtualFile = file.getVirtualFile(); - String path = virtualFile == null ? "" : virtualFile.getPath(); - return CompilerMessageLocation.create(path, lineAndColumn.getLine(), lineAndColumn.getColumn()); + if (virtualFile == null) { + path = defaultValue; + } + else { + path = virtualFile.getPath(); + // Convert path to platform-dependent format when virtualFile is local file. + if (virtualFile instanceof CoreLocalVirtualFile || virtualFile instanceof CoreJarVirtualFile) { + path = toSystemDependentName(path); + } + } + return CompilerMessageLocation.create(path, line, column); } }