CLI: improve diagnostic message format
- render the whole line where the error/warning points to, if any, and another line with '^', like other compilers do - lowercase diagnostic severity - decapitalize the message if it doesn't start with a proper name
This commit is contained in:
+10
-4
@@ -21,15 +21,21 @@ import kotlin.platform.platformStatic
|
||||
public data class CompilerMessageLocation private constructor(
|
||||
public val path: String?,
|
||||
public val line: Int,
|
||||
public val column: Int
|
||||
public val column: Int,
|
||||
public val lineContent: String?
|
||||
) {
|
||||
override fun toString(): String =
|
||||
path + (if (line != -1 || column != -1) " (" + line + ":" + column + ")" else "")
|
||||
|
||||
companion object {
|
||||
public platformStatic val NO_LOCATION: CompilerMessageLocation = CompilerMessageLocation(null, -1, -1)
|
||||
public platformStatic val NO_LOCATION: CompilerMessageLocation = CompilerMessageLocation(null, -1, -1, null)
|
||||
|
||||
public platformStatic fun create(path: String?, line: Int, column: Int): CompilerMessageLocation =
|
||||
if (path == null) NO_LOCATION else CompilerMessageLocation(path, line, column)
|
||||
public platformStatic fun create(
|
||||
path: String?,
|
||||
line: Int,
|
||||
column: Int,
|
||||
lineContent: String?
|
||||
): CompilerMessageLocation =
|
||||
if (path == null) NO_LOCATION else CompilerMessageLocation(path, line, column, lineContent)
|
||||
}
|
||||
}
|
||||
|
||||
+43
-7
@@ -17,6 +17,8 @@
|
||||
package org.jetbrains.kotlin.cli.common.messages;
|
||||
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.util.LineSeparator;
|
||||
import kotlin.KotlinPackage;
|
||||
import kotlin.io.IoPackage;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -78,6 +80,8 @@ public interface MessageRenderer {
|
||||
};
|
||||
|
||||
abstract class PlainText implements MessageRenderer {
|
||||
private static final String LINE_SEPARATOR = LineSeparator.getSystemLineSeparator().getSeparatorString();
|
||||
|
||||
@Override
|
||||
public String renderPreamble() {
|
||||
return "";
|
||||
@@ -88,24 +92,56 @@ public interface MessageRenderer {
|
||||
@NotNull CompilerMessageSeverity severity, @NotNull String message, @NotNull CompilerMessageLocation location
|
||||
) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
result.append(severity).append(": ");
|
||||
|
||||
int line = location.getLine();
|
||||
int column = location.getColumn();
|
||||
String lineContent = location.getLineContent();
|
||||
|
||||
String path = getPath(location);
|
||||
if (path != null) {
|
||||
result.append(path);
|
||||
result.append(": ");
|
||||
if (location.getLine() > 0 && location.getColumn() > 0) {
|
||||
result.append("(");
|
||||
result.append(location.getLine()).append(", ").append(location.getColumn());
|
||||
result.append(") ");
|
||||
result.append(":");
|
||||
if (line > 0) {
|
||||
result.append(line).append(":");
|
||||
if (column > 0) {
|
||||
result.append(column).append(":");
|
||||
}
|
||||
}
|
||||
result.append(" ");
|
||||
}
|
||||
|
||||
result.append(message);
|
||||
result.append(severity.name().toLowerCase());
|
||||
result.append(": ");
|
||||
|
||||
result.append(decapitalizeIfNeeded(message));
|
||||
|
||||
if (lineContent != null && 1 <= column && column <= lineContent.length() + 1) {
|
||||
result.append(LINE_SEPARATOR);
|
||||
result.append(lineContent);
|
||||
result.append(LINE_SEPARATOR);
|
||||
result.append(KotlinPackage.repeat(" ", column - 1));
|
||||
result.append("^");
|
||||
}
|
||||
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static String decapitalizeIfNeeded(@NotNull String message) {
|
||||
// TODO: invent something more clever
|
||||
// An ad-hoc heuristic to prevent decapitalization of some names
|
||||
if (message.startsWith("Java") || message.startsWith("Kotlin")) {
|
||||
return message;
|
||||
}
|
||||
|
||||
// For abbreviations and capitalized text
|
||||
if (message.length() >= 2 && Character.isUpperCase(message.charAt(0)) && Character.isUpperCase(message.charAt(1))) {
|
||||
return message;
|
||||
}
|
||||
|
||||
return KotlinPackage.decapitalize(message);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
protected abstract String getPath(@NotNull CompilerMessageLocation location);
|
||||
|
||||
|
||||
+10
-5
@@ -73,17 +73,22 @@ 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);
|
||||
|
||||
String render;
|
||||
if (diagnostic instanceof MyDiagnostic) {
|
||||
render = ((MyDiagnostic)diagnostic).message;
|
||||
render = ((MyDiagnostic) diagnostic).message;
|
||||
}
|
||||
else {
|
||||
render = DefaultErrorMessages.render(diagnostic);
|
||||
}
|
||||
|
||||
PsiFile file = diagnostic.getPsiFile();
|
||||
messageCollector.report(convertSeverity(diagnostic.getSeverity()), render,
|
||||
MessageUtil.psiFileToMessageLocation(file, file.getName(), lineAndColumn.getLine(), lineAndColumn.getColumn()));
|
||||
messageCollector.report(
|
||||
convertSeverity(diagnostic.getSeverity()),
|
||||
render,
|
||||
MessageUtil.psiFileToMessageLocation(file, file.getName(), DiagnosticUtils.getLineAndColumn(diagnostic))
|
||||
);
|
||||
|
||||
return diagnostic.getSeverity() == Severity.ERROR;
|
||||
}
|
||||
|
||||
@@ -141,7 +146,7 @@ public final class AnalyzerWithCompilerReport {
|
||||
CompilerMessageSeverity.ERROR,
|
||||
"Class '" + JvmClassName.byClassId(data.getClassId()) + "' was compiled with an incompatible version of Kotlin. " +
|
||||
"Its ABI version is " + data.getActualVersion() + ", expected ABI version is " + JvmAbi.VERSION,
|
||||
CompilerMessageLocation.create(path, -1, -1)
|
||||
CompilerMessageLocation.create(path, -1, -1, null)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,12 +33,15 @@ public class MessageUtil {
|
||||
@NotNull
|
||||
public static CompilerMessageLocation psiElementToMessageLocation(@NotNull PsiElement element) {
|
||||
PsiFile file = element.getContainingFile();
|
||||
DiagnosticUtils.LineAndColumn lineAndColumn = DiagnosticUtils.getLineAndColumnInPsiFile(file, element.getTextRange());
|
||||
return psiFileToMessageLocation(file, "<no path>", lineAndColumn.getLine(), lineAndColumn.getColumn());
|
||||
return psiFileToMessageLocation(file, "<no path>", DiagnosticUtils.getLineAndColumnInPsiFile(file, element.getTextRange()));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static CompilerMessageLocation psiFileToMessageLocation(@NotNull PsiFile file, @Nullable String defaultValue, int line, int column) {
|
||||
public static CompilerMessageLocation psiFileToMessageLocation(
|
||||
@NotNull PsiFile file,
|
||||
@Nullable String defaultValue,
|
||||
@NotNull DiagnosticUtils.LineAndColumn lineAndColumn
|
||||
) {
|
||||
String path;
|
||||
VirtualFile virtualFile = file.getVirtualFile();
|
||||
if (virtualFile == null) {
|
||||
@@ -51,6 +54,6 @@ public class MessageUtil {
|
||||
path = toSystemDependentName(path);
|
||||
}
|
||||
}
|
||||
return CompilerMessageLocation.create(path, line, column);
|
||||
return CompilerMessageLocation.create(path, lineAndColumn.getLine(), lineAndColumn.getColumn(), lineAndColumn.getLineContent());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,16 +128,19 @@ public class DiagnosticUtils {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static LineAndColumn offsetToLineAndColumn(Document document, int offset) {
|
||||
public static LineAndColumn offsetToLineAndColumn(@Nullable Document document, int offset) {
|
||||
if (document == null) {
|
||||
return new LineAndColumn(-1, offset);
|
||||
return new LineAndColumn(-1, offset, null);
|
||||
}
|
||||
|
||||
int lineNumber = document.getLineNumber(offset);
|
||||
int lineStartOffset = document.getLineStartOffset(lineNumber);
|
||||
int column = offset - lineStartOffset;
|
||||
|
||||
return new LineAndColumn(lineNumber + 1, column + 1);
|
||||
int lineEndOffset = document.getLineEndOffset(lineNumber);
|
||||
CharSequence lineContent = document.getCharsSequence().subSequence(lineStartOffset, lineEndOffset);
|
||||
|
||||
return new LineAndColumn(lineNumber + 1, column + 1, lineContent.toString());
|
||||
}
|
||||
|
||||
public static void throwIfRunningOnServer(Throwable e) {
|
||||
@@ -184,14 +187,16 @@ public class DiagnosticUtils {
|
||||
|
||||
public static final class LineAndColumn {
|
||||
|
||||
public static final LineAndColumn NONE = new LineAndColumn(-1, -1);
|
||||
public static final LineAndColumn NONE = new LineAndColumn(-1, -1, null);
|
||||
|
||||
private final int line;
|
||||
private final int column;
|
||||
private final String lineContent;
|
||||
|
||||
public LineAndColumn(int line, int column) {
|
||||
public LineAndColumn(int line, int column, @Nullable String lineContent) {
|
||||
this.line = line;
|
||||
this.column = column;
|
||||
this.lineContent = lineContent;
|
||||
}
|
||||
|
||||
public int getLine() {
|
||||
@@ -202,6 +207,11 @@ public class DiagnosticUtils {
|
||||
return column;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getLineContent() {
|
||||
return lineContent;
|
||||
}
|
||||
|
||||
// NOTE: This method is used for presenting positions to the user
|
||||
@Override
|
||||
public String toString() {
|
||||
|
||||
+3
-1
@@ -1,2 +1,4 @@
|
||||
ERROR: compiler/testData/cli/js/diagnosticForClassLiteral.kt: (6, 5) Cannot translate (not supported yet): 'A::class'
|
||||
compiler/testData/cli/js/diagnosticForClassLiteral.kt:6:5: error: cannot translate (not supported yet): 'A::class'
|
||||
A::class
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
ERROR: compiler/testData/cli/js/diagnosticForUnhandledElements.kt: (9, 17) Cannot translate (not supported yet): '@fancy 1'
|
||||
COMPILATION_ERROR
|
||||
compiler/testData/cli/js/diagnosticForUnhandledElements.kt:9:17: error: cannot translate (not supported yet): '@fancy 1'
|
||||
return (@fancy 1)
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
ERROR: compiler/testData/cli/js/diagnosticWhenReferenceToBuiltinsMember.kt: (4, 5) Callable references for builtin members are not supported yet: 'Int::toByte'
|
||||
ERROR: compiler/testData/cli/js/diagnosticWhenReferenceToBuiltinsMember.kt: (5, 5) Callable references for builtin members are not supported yet: 'String::length'
|
||||
compiler/testData/cli/js/diagnosticWhenReferenceToBuiltinsMember.kt:4:5: error: callable references for builtin members are not supported yet: 'Int::toByte'
|
||||
Int::toByte
|
||||
^
|
||||
compiler/testData/cli/js/diagnosticWhenReferenceToBuiltinsMember.kt:5:5: error: callable references for builtin members are not supported yet: 'String::length'
|
||||
String::length
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
|
||||
+2
-2
@@ -1,2 +1,2 @@
|
||||
ERROR: No source files
|
||||
COMPILATION_ERROR
|
||||
error: no source files
|
||||
COMPILATION_ERROR
|
||||
|
||||
+7
-3
@@ -1,3 +1,7 @@
|
||||
ERROR: compiler/testData/cli/js/inlineCycle.kt: (2, 5) The 'b' invocation is a part of inline cycle
|
||||
ERROR: compiler/testData/cli/js/inlineCycle.kt: (15, 5) The 'a' invocation is a part of inline cycle
|
||||
COMPILATION_ERROR
|
||||
compiler/testData/cli/js/inlineCycle.kt:2:5: error: the 'b' invocation is a part of inline cycle
|
||||
b(l)
|
||||
^
|
||||
compiler/testData/cli/js/inlineCycle.kt:15:5: error: the 'a' invocation is a part of inline cycle
|
||||
a(p)
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
ERROR: Path 'not/existing/path' does not exist
|
||||
error: path 'not/existing/path' does not exist
|
||||
COMPILATION_ERROR
|
||||
|
||||
+2
-2
@@ -1,2 +1,2 @@
|
||||
ERROR: Source file or directory not found: not/existing/path
|
||||
COMPILATION_ERROR
|
||||
error: source file or directory not found: not/existing/path
|
||||
COMPILATION_ERROR
|
||||
|
||||
+2
-2
@@ -1,2 +1,2 @@
|
||||
ERROR: 'compiler/testData/integration/ant/js/simpleWithStdlibAndFolderAsAnotherLib' is not a valid Kotlin Javascript library
|
||||
COMPILATION_ERROR
|
||||
error: 'compiler/testData/integration/ant/js/simpleWithStdlibAndFolderAsAnotherLib' is not a valid Kotlin Javascript library
|
||||
COMPILATION_ERROR
|
||||
|
||||
+2
-2
@@ -1,2 +1,2 @@
|
||||
ERROR: Cannot open output file 'compiler/testData/cli/js': is a directory
|
||||
COMPILATION_ERROR
|
||||
error: cannot open output file 'compiler/testData/cli/js': is a directory
|
||||
COMPILATION_ERROR
|
||||
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
ERROR: Output postfix file 'not/existing/path' not found
|
||||
error: output postfix file 'not/existing/path' not found
|
||||
COMPILATION_ERROR
|
||||
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
ERROR: Output prefix file 'not/existing/path' not found
|
||||
error: output prefix file 'not/existing/path' not found
|
||||
COMPILATION_ERROR
|
||||
|
||||
+2
-2
@@ -1,2 +1,2 @@
|
||||
ERROR: File 'compiler/testData/cli/js/wrongAbiVersionLib/wrongAbiLib.meta.js' was compiled with an incompatible version of Kotlin. Its ABI version is 0, expected ABI version is 3
|
||||
COMPILATION_ERROR
|
||||
error: file 'compiler/testData/cli/js/wrongAbiVersionLib/wrongAbiLib.meta.js' was compiled with an incompatible version of Kotlin. Its ABI version is 0, expected ABI version is 3
|
||||
COMPILATION_ERROR
|
||||
|
||||
+16
-6
@@ -1,6 +1,16 @@
|
||||
WARNING: compiler/testData/cli/jvm/classpath.kt: (8, 9) Variable 'a' is never used
|
||||
WARNING: compiler/testData/cli/jvm/classpath.kt: (9, 9) Variable 'c' is never used
|
||||
WARNING: compiler/testData/cli/jvm/classpath.kt: (10, 9) Variable 'e' is never used
|
||||
WARNING: compiler/testData/cli/jvm/classpath.kt: (11, 9) Variable 'f' is never used
|
||||
WARNING: compiler/testData/cli/jvm/classpath.kt: (12, 9) Variable 'j' is never used
|
||||
OK
|
||||
compiler/testData/cli/jvm/classpath.kt:8:9: warning: variable 'a' is never used
|
||||
val a = Big5() // charsets.jar
|
||||
^
|
||||
compiler/testData/cli/jvm/classpath.kt:9:9: warning: variable 'c' is never used
|
||||
val c = DNSNameService() // dnsns.ajr
|
||||
^
|
||||
compiler/testData/cli/jvm/classpath.kt:10:9: warning: variable 'e' is never used
|
||||
val e : Cipher? = null // jce.jar
|
||||
^
|
||||
compiler/testData/cli/jvm/classpath.kt:11:9: warning: variable 'f' is never used
|
||||
val f : SunJCE? = null // sunjce_provider.jar
|
||||
^
|
||||
compiler/testData/cli/jvm/classpath.kt:12:9: warning: variable 'j' is never used
|
||||
val j : ByteBuffered? = null // rt.jar
|
||||
^
|
||||
OK
|
||||
|
||||
+7
-3
@@ -1,3 +1,7 @@
|
||||
ERROR: compiler/testData/cli/jvm/conflictingOverloads.kt: (1, 1) 'internal fun a(): kotlin.List<kotlin.Int>' is already defined in root package
|
||||
ERROR: compiler/testData/cli/jvm/conflictingOverloads.kt: (2, 1) 'internal fun a(): kotlin.List<kotlin.String>' is already defined in root package
|
||||
COMPILATION_ERROR
|
||||
compiler/testData/cli/jvm/conflictingOverloads.kt:1:1: error: 'internal fun a(): kotlin.List<kotlin.Int>' is already defined in root package
|
||||
fun a(): List<Int> = null!!
|
||||
^
|
||||
compiler/testData/cli/jvm/conflictingOverloads.kt:2:1: error: 'internal fun a(): kotlin.List<kotlin.String>' is already defined in root package
|
||||
fun a(): List<String> = null!!
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
|
||||
+27
-9
@@ -1,10 +1,28 @@
|
||||
ERROR: compiler/testData/cli/jvm/diagnosticsOrder1.kt: (1, 5) Redeclaration: x
|
||||
ERROR: compiler/testData/cli/jvm/diagnosticsOrder1.kt: (2, 5) Redeclaration: x
|
||||
ERROR: compiler/testData/cli/jvm/diagnosticsOrder1.kt: (3, 5) Redeclaration: x
|
||||
ERROR: compiler/testData/cli/jvm/diagnosticsOrder1.kt: (4, 5) Redeclaration: x
|
||||
ERROR: compiler/testData/cli/jvm/diagnosticsOrder1.kt: (5, 5) Redeclaration: x
|
||||
ERROR: compiler/testData/cli/jvm/diagnosticsOrder1.kt: (6, 5) Redeclaration: x
|
||||
ERROR: compiler/testData/cli/jvm/diagnosticsOrder1.kt: (7, 5) Redeclaration: x
|
||||
ERROR: compiler/testData/cli/jvm/diagnosticsOrder2.kt: (1, 5) Redeclaration: y
|
||||
ERROR: compiler/testData/cli/jvm/diagnosticsOrder2.kt: (2, 5) Redeclaration: y
|
||||
compiler/testData/cli/jvm/diagnosticsOrder1.kt:1:5: error: redeclaration: x
|
||||
val x = 5
|
||||
^
|
||||
compiler/testData/cli/jvm/diagnosticsOrder1.kt:2:5: error: redeclaration: x
|
||||
val x = 5
|
||||
^
|
||||
compiler/testData/cli/jvm/diagnosticsOrder1.kt:3:5: error: redeclaration: x
|
||||
val x = 5
|
||||
^
|
||||
compiler/testData/cli/jvm/diagnosticsOrder1.kt:4:5: error: redeclaration: x
|
||||
val x = 5
|
||||
^
|
||||
compiler/testData/cli/jvm/diagnosticsOrder1.kt:5:5: error: redeclaration: x
|
||||
val x = 5
|
||||
^
|
||||
compiler/testData/cli/jvm/diagnosticsOrder1.kt:6:5: error: redeclaration: x
|
||||
val x = 5
|
||||
^
|
||||
compiler/testData/cli/jvm/diagnosticsOrder1.kt:7:5: error: redeclaration: x
|
||||
val x = 5
|
||||
^
|
||||
compiler/testData/cli/jvm/diagnosticsOrder2.kt:1:5: error: redeclaration: y
|
||||
val y = 5
|
||||
^
|
||||
compiler/testData/cli/jvm/diagnosticsOrder2.kt:2:5: error: redeclaration: y
|
||||
val y = 5
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
|
||||
+2
-2
@@ -1,2 +1,2 @@
|
||||
WARNING: Duplicate source root: compiler/testData/cli/jvm/simple.kt
|
||||
OK
|
||||
warning: duplicate source root: compiler/testData/cli/jvm/simple.kt
|
||||
OK
|
||||
|
||||
+2
-2
@@ -1,2 +1,2 @@
|
||||
WARNING: Duplicate source root: $TESTDATA_DIR$/duplicateSourcesInModule.kt
|
||||
OK
|
||||
warning: duplicate source root: $TESTDATA_DIR$/duplicateSourcesInModule.kt
|
||||
OK
|
||||
|
||||
+2
-2
@@ -1,2 +1,2 @@
|
||||
ERROR: No source files
|
||||
COMPILATION_ERROR
|
||||
error: no source files
|
||||
COMPILATION_ERROR
|
||||
|
||||
+7
-3
@@ -1,3 +1,7 @@
|
||||
ERROR: compiler/testData/cli/jvm/inlineCycle.kt: (2, 5) The 'b' invocation is a part of inline cycle
|
||||
ERROR: compiler/testData/cli/jvm/inlineCycle.kt: (15, 5) The 'a' invocation is a part of inline cycle
|
||||
COMPILATION_ERROR
|
||||
compiler/testData/cli/jvm/inlineCycle.kt:2:5: error: the 'b' invocation is a part of inline cycle
|
||||
b(l)
|
||||
^
|
||||
compiler/testData/cli/jvm/inlineCycle.kt:15:5: error: the 'a' invocation is a part of inline cycle
|
||||
a(p)
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
ERROR: compiler/testData/cli/jvm/multipleTextRangesInDiagnosticsOrder.kt: (6, 14) Cannot weaken access privilege 'public' for 'c' in 'A'
|
||||
ERROR: compiler/testData/cli/jvm/multipleTextRangesInDiagnosticsOrder.kt: (6, 14) Incompatible modifiers: 'private protected'
|
||||
ERROR: compiler/testData/cli/jvm/multipleTextRangesInDiagnosticsOrder.kt: (6, 24) Incompatible modifiers: 'private protected'
|
||||
compiler/testData/cli/jvm/multipleTextRangesInDiagnosticsOrder.kt:6:14: error: cannot weaken access privilege 'public' for 'c' in 'A'
|
||||
override protected private val c: Int
|
||||
^
|
||||
compiler/testData/cli/jvm/multipleTextRangesInDiagnosticsOrder.kt:6:14: error: incompatible modifiers: 'private protected'
|
||||
override protected private val c: Int
|
||||
^
|
||||
compiler/testData/cli/jvm/multipleTextRangesInDiagnosticsOrder.kt:6:24: error: incompatible modifiers: 'private protected'
|
||||
override protected private val c: Int
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
|
||||
+6
-2
@@ -1,3 +1,7 @@
|
||||
ERROR: compiler/testData/cli/jvm/noReflectionInClasspath.kt: (3, 12) Expression 'Foo::prop' uses reflection which is not found in compilation classpath. Make sure you have kotlin-reflect.jar in the classpath
|
||||
ERROR: compiler/testData/cli/jvm/noReflectionInClasspath.kt: (4, 12) Expression 'Foo::class' uses reflection which is not found in compilation classpath. Make sure you have kotlin-reflect.jar in the classpath
|
||||
compiler/testData/cli/jvm/noReflectionInClasspath.kt:3:12: error: expression 'Foo::prop' uses reflection which is not found in compilation classpath. Make sure you have kotlin-reflect.jar in the classpath
|
||||
fun t1() = Foo::prop
|
||||
^
|
||||
compiler/testData/cli/jvm/noReflectionInClasspath.kt:4:12: error: expression 'Foo::class' uses reflection which is not found in compilation classpath. Make sure you have kotlin-reflect.jar in the classpath
|
||||
fun t2() = Foo::class
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
WARNING: Classpath entry points to a non-existent location: not/existing/path
|
||||
WARNING: Annotations path entry points to a non-existent location: yet/another/not/existing/path
|
||||
warning: classpath entry points to a non-existent location: not/existing/path
|
||||
warning: annotations path entry points to a non-existent location: yet/another/not/existing/path
|
||||
OK
|
||||
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
ERROR: Source file or directory not found: not/existing/path
|
||||
error: source file or directory not found: not/existing/path
|
||||
COMPILATION_ERROR
|
||||
|
||||
+7
-3
@@ -1,3 +1,7 @@
|
||||
ERROR: compiler/testData/cli/jvm/nonLocalDisabled.kt: (3, 9) Non-local returns are not allowed with inlining disabled
|
||||
ERROR: compiler/testData/cli/jvm/nonLocalDisabled.kt: (7, 9) Non-local returns are not allowed with inlining disabled
|
||||
COMPILATION_ERROR
|
||||
compiler/testData/cli/jvm/nonLocalDisabled.kt:3:9: error: non-local returns are not allowed with inlining disabled
|
||||
return
|
||||
^
|
||||
compiler/testData/cli/jvm/nonLocalDisabled.kt:7:9: error: non-local returns are not allowed with inlining disabled
|
||||
return@a
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
ERROR: Required plugin option not present: org.jetbrains.kotlin.android:androidRes
|
||||
error: required plugin option not present: org.jetbrains.kotlin.android:androidRes
|
||||
|
||||
Plugin "org.jetbrains.kotlin.android" usage:
|
||||
androidRes <path> Android resources path (required, multiple)
|
||||
androidManifest <path> Android manifest file (required)
|
||||
supportV4 <path> Support android-v4 library
|
||||
|
||||
COMPILATION_ERROR
|
||||
COMPILATION_ERROR
|
||||
|
||||
+28
-10
@@ -1,28 +1,46 @@
|
||||
ERROR: compiler/testData/cli/jvm/signatureClash.kt: (6, 5) Accidental override: The following declarations have the same JVM signature (getX()I):
|
||||
compiler/testData/cli/jvm/signatureClash.kt:6:5: error: accidental override: The following declarations have the same JVM signature (getX()I):
|
||||
fun getX(): kotlin.Int
|
||||
fun <get-x>(): kotlin.Int
|
||||
ERROR: compiler/testData/cli/jvm/signatureClash.kt: (8, 5) Platform declaration clash: The following declarations have the same JVM signature (getA()I):
|
||||
fun getX() = 1
|
||||
^
|
||||
compiler/testData/cli/jvm/signatureClash.kt:8:5: error: platform declaration clash: The following declarations have the same JVM signature (getA()I):
|
||||
fun getA(): kotlin.Int
|
||||
fun <get-a>(): kotlin.Int
|
||||
ERROR: compiler/testData/cli/jvm/signatureClash.kt: (9, 5) Platform declaration clash: The following declarations have the same JVM signature (getA()I):
|
||||
fun getA(): Int = 1
|
||||
^
|
||||
compiler/testData/cli/jvm/signatureClash.kt:9:5: error: platform declaration clash: The following declarations have the same JVM signature (getA()I):
|
||||
fun getA(): kotlin.Int
|
||||
fun <get-a>(): kotlin.Int
|
||||
ERROR: compiler/testData/cli/jvm/signatureClash.kt: (12, 1) Platform declaration clash: The following declarations have the same JVM signature (getB()I):
|
||||
val a: Int = 1
|
||||
^
|
||||
compiler/testData/cli/jvm/signatureClash.kt:12:1: error: platform declaration clash: The following declarations have the same JVM signature (getB()I):
|
||||
fun <get-b>(): kotlin.Int
|
||||
fun getB(): kotlin.Int
|
||||
ERROR: compiler/testData/cli/jvm/signatureClash.kt: (13, 1) Platform declaration clash: The following declarations have the same JVM signature (getB()I):
|
||||
fun getB(): Int = 1
|
||||
^
|
||||
compiler/testData/cli/jvm/signatureClash.kt:13:1: error: platform declaration clash: The following declarations have the same JVM signature (getB()I):
|
||||
fun <get-b>(): kotlin.Int
|
||||
fun getB(): kotlin.Int
|
||||
ERROR: compiler/testData/cli/jvm/signatureClash.kt: (19, 7) Platform declaration clash: The following declarations have the same JVM signature (getTr()I):
|
||||
val b: Int = 1
|
||||
^
|
||||
compiler/testData/cli/jvm/signatureClash.kt:19:7: error: platform declaration clash: The following declarations have the same JVM signature (getTr()I):
|
||||
fun <get-tr>(): kotlin.Int
|
||||
fun getTr(): kotlin.Int
|
||||
ERROR: compiler/testData/cli/jvm/signatureClash.kt: (20, 5) Platform declaration clash: The following declarations have the same JVM signature (getTr()I):
|
||||
class SubTr : Tr {
|
||||
^
|
||||
compiler/testData/cli/jvm/signatureClash.kt:20:5: error: platform declaration clash: The following declarations have the same JVM signature (getTr()I):
|
||||
fun <get-tr>(): kotlin.Int
|
||||
fun getTr(): kotlin.Int
|
||||
ERROR: compiler/testData/cli/jvm/signatureClash.kt: (24, 7) Platform declaration clash: The following declarations have the same JVM signature (access$f$0(LC;)V):
|
||||
val tr = 1
|
||||
^
|
||||
compiler/testData/cli/jvm/signatureClash.kt:24:7: error: platform declaration clash: The following declarations have the same JVM signature (access$f$0(LC;)V):
|
||||
fun `access$f$0`(c: C): kotlin.Unit
|
||||
fun f(): kotlin.Unit
|
||||
ERROR: compiler/testData/cli/jvm/signatureClash.kt: (26, 5) Platform declaration clash: The following declarations have the same JVM signature (access$f$0(LC;)V):
|
||||
class C {
|
||||
^
|
||||
compiler/testData/cli/jvm/signatureClash.kt:26:5: error: platform declaration clash: The following declarations have the same JVM signature (access$f$0(LC;)V):
|
||||
fun `access$f$0`(c: C): kotlin.Unit
|
||||
fun f(): kotlin.Unit
|
||||
COMPILATION_ERROR
|
||||
fun `access$f$0`(c: C) {}
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
|
||||
@@ -1,19 +1,31 @@
|
||||
ERROR: compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt: (15, 5) Accidental override: The following declarations have the same JVM signature (access$foo$0(LDerived;)V):
|
||||
compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt:15:5: error: accidental override: The following declarations have the same JVM signature (access$foo$0(LDerived;)V):
|
||||
fun `access$foo$0`(d: Derived): kotlin.Unit
|
||||
fun foo(): kotlin.Unit
|
||||
ERROR: compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt: (18, 9) Accidental override: The following declarations have the same JVM signature (access$getBar$1(LDerived;)I):
|
||||
private fun foo() {}
|
||||
^
|
||||
compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt:18:9: error: accidental override: The following declarations have the same JVM signature (access$getBar$1(LDerived;)I):
|
||||
fun `access$getBar$1`(d: Derived): kotlin.Int
|
||||
fun <get-bar>(): kotlin.Int
|
||||
ERROR: compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt: (19, 9) Accidental override: The following declarations have the same JVM signature (access$setBar$1(LDerived;I)V):
|
||||
get
|
||||
^
|
||||
compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt:19:9: error: accidental override: The following declarations have the same JVM signature (access$setBar$1(LDerived;I)V):
|
||||
fun `access$setBar$1`(d: Derived, i: kotlin.Int): kotlin.Unit
|
||||
fun <set-bar>(<set-?>: kotlin.Int): kotlin.Unit
|
||||
ERROR: compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt: (21, 5) Accidental override: The following declarations have the same JVM signature (access$getBaz$2(LDerived;)I):
|
||||
set
|
||||
^
|
||||
compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt:21:5: error: accidental override: The following declarations have the same JVM signature (access$getBaz$2(LDerived;)I):
|
||||
fun `access$getBaz$2`(d: Derived): kotlin.Int
|
||||
fun <get-baz>(): kotlin.Int
|
||||
ERROR: compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt: (23, 5) Accidental override: The following declarations have the same JVM signature (access$getBoo$3(LDerived;)I):
|
||||
private var baz = 1
|
||||
^
|
||||
compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt:23:5: error: accidental override: The following declarations have the same JVM signature (access$getBoo$3(LDerived;)I):
|
||||
fun `access$getBoo$3`(d: Derived): kotlin.Int
|
||||
fun <get-boo>(): kotlin.Int
|
||||
ERROR: compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt: (27, 9) Accidental override: The following declarations have the same JVM signature (access$setBar1$4(LDerived;I)V):
|
||||
private val boo = 1
|
||||
^
|
||||
compiler/testData/cli/jvm/syntheticAccessorSignatureClash.kt:27:9: error: accidental override: The following declarations have the same JVM signature (access$setBar1$4(LDerived;I)V):
|
||||
fun `access$setBar1$4`(d: Derived, i: kotlin.Int): kotlin.Unit
|
||||
fun <set-bar1>(<set-?>: kotlin.Int): kotlin.Unit
|
||||
COMPILATION_ERROR
|
||||
set
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
|
||||
+6
-4
@@ -1,4 +1,6 @@
|
||||
ERROR: compiler/testData/cli/jvm/wrongAbiVersionLib/bin/ClassWithWrongAbiVersion.class: Class 'ClassWithWrongAbiVersion' was compiled with an incompatible version of Kotlin. Its ABI version is -1, expected ABI version is $ABI_VERSION$
|
||||
ERROR: compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/WrongPackage.class: Class 'wrong/WrongPackage' was compiled with an incompatible version of Kotlin. Its ABI version is -1, expected ABI version is $ABI_VERSION$
|
||||
ERROR: compiler/testData/cli/jvm/wrongAbiVersion.kt: (4, 3) Unresolved reference: bar
|
||||
COMPILATION_ERROR
|
||||
compiler/testData/cli/jvm/wrongAbiVersionLib/bin/ClassWithWrongAbiVersion.class: error: class 'ClassWithWrongAbiVersion' was compiled with an incompatible version of Kotlin. Its ABI version is -1, expected ABI version is $ABI_VERSION$
|
||||
compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/WrongPackage.class: error: class 'wrong/WrongPackage' was compiled with an incompatible version of Kotlin. Its ABI version is -1, expected ABI version is $ABI_VERSION$
|
||||
compiler/testData/cli/jvm/wrongAbiVersion.kt:4:3: error: unresolved reference: bar
|
||||
bar()
|
||||
^
|
||||
COMPILATION_ERROR
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
ERROR: The following Java entities have annotations with wrong Kotlin signatures:
|
||||
error: the following Java entities have annotations with wrong Kotlin signatures:
|
||||
library.ClassWithWrongKotlinSignatures java.lang.String foo():
|
||||
Function names mismatch, original: foo, alternative: bar
|
||||
library.ClassWithWrongKotlinSignatures java.lang.String bar():
|
||||
|
||||
+2
-2
@@ -1,2 +1,2 @@
|
||||
ERROR: Specify script source path to evaluate
|
||||
COMPILATION_ERROR
|
||||
error: specify script source path to evaluate
|
||||
COMPILATION_ERROR
|
||||
|
||||
+5
-3
@@ -1,5 +1,7 @@
|
||||
ERROR: compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyInJava/source.kt: (5, 22) Unresolved reference: foo
|
||||
ERROR: The following classes have incomplete hierarchies:
|
||||
compiler/testData/compileKotlinAgainstCustomBinaries/incompleteHierarchyInJava/source.kt:5:22: error: unresolved reference: foo
|
||||
fun bar() = SubSub().foo()
|
||||
^
|
||||
error: the following classes have incomplete hierarchies:
|
||||
test.Sub, unresolved: [Super]
|
||||
|
||||
COMPILATION_ERROR
|
||||
COMPILATION_ERROR
|
||||
|
||||
@@ -3,8 +3,8 @@ Buildfile: [TestData]/build.xml
|
||||
|
||||
build:
|
||||
[kotlin2js] Compiling [[TestData]/root1] => [[Temp]/out.js]
|
||||
[kotlin2js] LOGGING: Compiling source files: [TestData]/root1/foo.kt
|
||||
[kotlin2js] OUTPUT: Output:
|
||||
[kotlin2js] logging: compiling source files: [TestData]/root1/foo.kt
|
||||
[kotlin2js] output: output:
|
||||
[kotlin2js] [Temp]/out.js
|
||||
[kotlin2js] Sources:
|
||||
[kotlin2js] [TestData]/root1/foo.kt
|
||||
|
||||
@@ -3,7 +3,7 @@ Buildfile: [TestData]/build.xml
|
||||
|
||||
build:
|
||||
[kotlin2js] Compiling [[TestData]/root1] => [[Temp]/out.js]
|
||||
[kotlin2js] INFO: Kotlin Compiler version [KotlinVersion]
|
||||
[kotlin2js] info: Kotlin Compiler version [KotlinVersion]
|
||||
|
||||
BUILD SUCCESSFUL
|
||||
Total time: [time]
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ build:
|
||||
[kotlinc] Compiling [[TestData]/hello.kt] => [[Temp]/hello.jar]
|
||||
[javac] Compiling 1 source file to [Temp]
|
||||
[javac] Compiling [[TestData]] => [[Temp]]
|
||||
[javac] INFO: Kotlin Compiler version [KotlinVersion]
|
||||
[javac] info: Kotlin Compiler version [KotlinVersion]
|
||||
[javac] Running javac...
|
||||
|
||||
BUILD SUCCESSFUL
|
||||
|
||||
@@ -4,13 +4,25 @@ Buildfile: [TestData]/build.xml
|
||||
build:
|
||||
[javac] Compiling 2 source files to [Temp]
|
||||
[javac] Compiling [[TestData]] => [[Temp]]
|
||||
[javac] ERROR: [TestData]/incorrectKotlinCode.kt: (4, 1) Parameter name expected
|
||||
[javac] ERROR: [TestData]/incorrectKotlinCode.kt: (4, 1) Expecting comma or ')'
|
||||
[javac] ERROR: [TestData]/incorrectKotlinCode.kt: (4, 1) Expecting ')'
|
||||
[javac] [TestData]/incorrectKotlinCode.kt:4:1: error: parameter name expected
|
||||
[javac]
|
||||
[javac] ^
|
||||
[javac] [TestData]/incorrectKotlinCode.kt:4:1: error: expecting comma or ')'
|
||||
[javac]
|
||||
[javac] ^
|
||||
[javac] [TestData]/incorrectKotlinCode.kt:4:1: error: expecting ')'
|
||||
[javac]
|
||||
[javac] ^
|
||||
[kotlinc] Compiling [[TestData]] => [[Temp]]
|
||||
[kotlinc] ERROR: [TestData]/incorrectKotlinCode.kt: (4, 1) Parameter name expected
|
||||
[kotlinc] ERROR: [TestData]/incorrectKotlinCode.kt: (4, 1) Expecting comma or ')'
|
||||
[kotlinc] ERROR: [TestData]/incorrectKotlinCode.kt: (4, 1) Expecting ')'
|
||||
[kotlinc] [TestData]/incorrectKotlinCode.kt:4:1: error: parameter name expected
|
||||
[kotlinc]
|
||||
[kotlinc] ^
|
||||
[kotlinc] [TestData]/incorrectKotlinCode.kt:4:1: error: expecting comma or ')'
|
||||
[kotlinc]
|
||||
[kotlinc] ^
|
||||
[kotlinc] [TestData]/incorrectKotlinCode.kt:4:1: error: expecting ')'
|
||||
[kotlinc]
|
||||
[kotlinc] ^
|
||||
|
||||
BUILD SUCCESSFUL
|
||||
Total time: [time]
|
||||
|
||||
@@ -3,7 +3,9 @@ Buildfile: [TestData]/build.xml
|
||||
|
||||
build:
|
||||
[kotlinc] Compiling [[TestData]/hello.kt] => [[Temp]/hello.jar]
|
||||
[kotlinc] WARNING: [TestData]/hello.kt: (15, 9) Variable 'result' is never used
|
||||
[kotlinc] [TestData]/hello.kt:15:9: warning: variable 'result' is never used
|
||||
[kotlinc] val result = "$a$c$e$f$j"
|
||||
[kotlinc] ^
|
||||
[java] OK
|
||||
|
||||
BUILD SUCCESSFUL
|
||||
|
||||
@@ -3,8 +3,8 @@ Buildfile: [TestData]/build.xml
|
||||
|
||||
build:
|
||||
[kotlinc] Compiling [[TestData]/hello.kt] => [[Temp]/hello.jar]
|
||||
[kotlinc] LOGGING: Using Kotlin home directory [KotlinProjectHome]/dist/kotlinc
|
||||
[kotlinc] LOGGING: Configuring the compilation environment
|
||||
[kotlinc] logging: using Kotlin home directory [KotlinProjectHome]/dist/kotlinc
|
||||
[kotlinc] logging: configuring the compilation environment
|
||||
|
||||
BUILD SUCCESSFUL
|
||||
Total time: [time]
|
||||
|
||||
@@ -3,7 +3,7 @@ Buildfile: [TestData]/build.xml
|
||||
|
||||
build:
|
||||
[kotlinc] Compiling [[TestData]/hello.kt] => [[Temp]/hello.jar]
|
||||
[kotlinc] INFO: Kotlin Compiler version [KotlinVersion]
|
||||
[kotlinc] info: Kotlin Compiler version [KotlinVersion]
|
||||
|
||||
BUILD SUCCESSFUL
|
||||
Total time: [time]
|
||||
|
||||
+3
-1
@@ -1,5 +1,7 @@
|
||||
|
||||
ERR:
|
||||
ERROR: hello.kt: (4, 5) Unresolved reference: a
|
||||
hello.kt:4:5: error: unresolved reference: a
|
||||
a
|
||||
^
|
||||
|
||||
Return code: 1
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
|
||||
ERR:
|
||||
ERROR: test.kt: (4, 20) Expecting an element
|
||||
test.kt:4:20: error: expecting an element
|
||||
val s = System.in
|
||||
^
|
||||
|
||||
Return code: 1
|
||||
|
||||
+3
-1
@@ -1,5 +1,7 @@
|
||||
>>> fun foo() = 765
|
||||
>>> foo(1)
|
||||
ERROR: /line2.kts: (1, 5) Too many arguments for internal final fun foo(): kotlin.Int defined in <script>
|
||||
/line2.kts:1:5: error: too many arguments for internal final fun foo(): kotlin.Int defined in <script>
|
||||
foo(1)
|
||||
^
|
||||
>>> foo()
|
||||
765
|
||||
|
||||
+3
-1
@@ -2,4 +2,6 @@
|
||||
... object Bar {
|
||||
... }
|
||||
... }
|
||||
ERROR: /line4.kts: (2, 1) Named object 'Bar' is a singleton and cannot be local. Try to use anonymous object instead
|
||||
/line4.kts:2:1: error: named object 'Bar' is a singleton and cannot be local. Try to use anonymous object instead
|
||||
object Bar {
|
||||
^
|
||||
|
||||
+6
-2
@@ -1,6 +1,10 @@
|
||||
>>> )(
|
||||
ERROR: /line1.kts: (1, 1) Expecting an element
|
||||
ERROR: /line1.kts: (1, 3) Expecting an expression
|
||||
/line1.kts:1:1: error: expecting an element
|
||||
)(
|
||||
^
|
||||
/line1.kts:1:3: error: expecting an expression
|
||||
)(
|
||||
^
|
||||
>>> fun foo() = 98
|
||||
>>> foo()
|
||||
98
|
||||
|
||||
@@ -161,7 +161,7 @@ public class CompilerOutputParser {
|
||||
reportToCollector(text);
|
||||
}
|
||||
else {
|
||||
messageCollector.report(category, text, CompilerMessageLocation.create(path, line, column));
|
||||
messageCollector.report(category, text, CompilerMessageLocation.create(path, line, column, null));
|
||||
}
|
||||
tags.pop();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user