From 7536dadb652d8c4a7be67800bd6425c4017d866f Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Wed, 8 Sep 2021 17:37:33 +0300 Subject: [PATCH] [FE] Introduce diagnostic markers This is needed to move diagnostic renderers and positioning strategies to common modules for both frontends --- .../kotlin/diagnostics/DiagnosticMarker.kt | 35 +++++++++++++++++++ .../kotlin/diagnostics/Diagnostic.kt | 9 +++-- .../DiagnosticWithParameters1.java | 3 +- .../DiagnosticWithParameters2.java | 4 ++- .../DiagnosticWithParameters3.java | 15 ++++---- .../DiagnosticWithParameters4.java | 6 +++- .../diagnostics/ParametrizedDiagnostic.java | 6 ++++ 7 files changed, 66 insertions(+), 12 deletions(-) create mode 100644 compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/DiagnosticMarker.kt diff --git a/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/DiagnosticMarker.kt b/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/DiagnosticMarker.kt new file mode 100644 index 00000000000..b8b50252b9c --- /dev/null +++ b/compiler/frontend.common-psi/src/org/jetbrains/kotlin/diagnostics/DiagnosticMarker.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.diagnostics + +import com.intellij.psi.PsiElement + +interface DiagnosticMarker { + val psiElement: PsiElement + val factoryName: String +} + +interface DiagnosticWithParameters1Marker : DiagnosticMarker { + val a: A +} + +interface DiagnosticWithParameters2Marker : DiagnosticMarker { + val a: A + val b: B +} + +interface DiagnosticWithParameters3Marker : DiagnosticMarker { + val a: A + val b: B + val c: C +} + +interface DiagnosticWithParameters4Marker : DiagnosticMarker { + val a: A + val b: B + val c: C + val d: D +} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Diagnostic.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Diagnostic.kt index 59de0365151..fc7981a22c6 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Diagnostic.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Diagnostic.kt @@ -18,7 +18,10 @@ package org.jetbrains.kotlin.diagnostics import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile -interface Diagnostic : UnboundDiagnostic { - val psiElement: PsiElement +interface Diagnostic : UnboundDiagnostic, DiagnosticMarker { + override val psiElement: PsiElement val psiFile: PsiFile -} \ No newline at end of file + + override val factoryName: String + get() = factory.name +} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/DiagnosticWithParameters1.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/DiagnosticWithParameters1.java index 2bdea063b8f..f578ec5674f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/DiagnosticWithParameters1.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/DiagnosticWithParameters1.java @@ -21,7 +21,7 @@ import org.jetbrains.annotations.NotNull; import java.util.Objects; -public class DiagnosticWithParameters1 extends AbstractDiagnostic { +public class DiagnosticWithParameters1 extends AbstractDiagnostic implements DiagnosticWithParameters1Marker { private final A a; public DiagnosticWithParameters1( @@ -42,6 +42,7 @@ public class DiagnosticWithParameters1 extends Abstract } @NotNull + @Override public A getA() { return a; } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/DiagnosticWithParameters2.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/DiagnosticWithParameters2.java index bb4c4713e5f..166a25a8e27 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/DiagnosticWithParameters2.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/DiagnosticWithParameters2.java @@ -21,7 +21,7 @@ import org.jetbrains.annotations.NotNull; import java.util.Objects; -public class DiagnosticWithParameters2 extends AbstractDiagnostic { +public class DiagnosticWithParameters2 extends AbstractDiagnostic implements DiagnosticWithParameters2Marker{ private final A a; private final B b; @@ -45,11 +45,13 @@ public class DiagnosticWithParameters2 extends Abstr } @NotNull + @Override public A getA() { return a; } @NotNull + @Override public B getB() { return b; } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/DiagnosticWithParameters3.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/DiagnosticWithParameters3.java index 021da0e06bf..f2f180118bb 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/DiagnosticWithParameters3.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/DiagnosticWithParameters3.java @@ -21,7 +21,7 @@ import org.jetbrains.annotations.NotNull; import java.util.Objects; -public class DiagnosticWithParameters3 extends AbstractDiagnostic { +public class DiagnosticWithParameters3 extends AbstractDiagnostic implements DiagnosticWithParameters3Marker { private final A a; private final B b; private final C c; @@ -48,16 +48,19 @@ public class DiagnosticWithParameters3 extends Ab } @NotNull - public A getA() { - return a; - } - - @NotNull + @Override public B getB() { return b; } @NotNull + @Override + public A getA() { + return a; + } + + @NotNull + @Override public C getC() { return c; } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/DiagnosticWithParameters4.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/DiagnosticWithParameters4.java index 94e12775690..4a6e6009fa1 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/DiagnosticWithParameters4.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/DiagnosticWithParameters4.java @@ -21,7 +21,7 @@ import org.jetbrains.annotations.NotNull; import java.util.Objects; -public class DiagnosticWithParameters4 extends AbstractDiagnostic { +public class DiagnosticWithParameters4 extends AbstractDiagnostic implements DiagnosticWithParameters4Marker { private final A a; private final B b; private final C c; @@ -51,21 +51,25 @@ public class DiagnosticWithParameters4 extends } @NotNull + @Override public A getA() { return a; } @NotNull + @Override public B getB() { return b; } @NotNull + @Override public C getC() { return c; } @NotNull + @Override public D getD() { return d; } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/ParametrizedDiagnostic.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/ParametrizedDiagnostic.java index f07148e955c..c13f9c12593 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/ParametrizedDiagnostic.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/ParametrizedDiagnostic.java @@ -23,4 +23,10 @@ public interface ParametrizedDiagnostic extends Diagnostic @NotNull @Override E getPsiElement(); + + @NotNull + @Override + default String getFactoryName() { + return getFactory().getName(); + } }