Got rid of storing diagnostic messages inside them: now they are generated on demand.
This commit is contained in:
@@ -25,15 +25,15 @@ import org.jetbrains.annotations.NotNull;
|
||||
*/
|
||||
public abstract class AbstractDiagnostic<E extends PsiElement> implements ParametrizedDiagnostic<E> {
|
||||
private final E psiElement;
|
||||
private final String message;
|
||||
private final AbstractDiagnosticFactory factory;
|
||||
private final Severity severity;
|
||||
|
||||
public AbstractDiagnostic(@NotNull E psiElement, @NotNull AbstractDiagnosticFactory factory, @NotNull Severity severity, @NotNull String message) {
|
||||
public AbstractDiagnostic(@NotNull E psiElement,
|
||||
@NotNull AbstractDiagnosticFactory factory,
|
||||
@NotNull Severity severity) {
|
||||
this.psiElement = psiElement;
|
||||
this.factory = factory;
|
||||
this.severity = severity;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -48,12 +48,6 @@ public abstract class AbstractDiagnostic<E extends PsiElement> implements Parame
|
||||
return psiElement.getContainingFile();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Severity getSeverity() {
|
||||
|
||||
@@ -38,8 +38,12 @@ public class DiagnosticFactory<E extends PsiElement> extends DiagnosticFactoryWi
|
||||
return new DiagnosticFactory<T>(severity, message, positioningStrategy);
|
||||
}
|
||||
|
||||
String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public ParametrizedDiagnostic<E> on(@NotNull E element) {
|
||||
return new DiagnosticWithPsiElement<E>(element, this, severity, message);
|
||||
return new DiagnosticWithPsiElement<E>(element, this, severity);
|
||||
}
|
||||
}
|
||||
@@ -35,7 +35,7 @@ public class DiagnosticFactory1<E extends PsiElement, A> extends DiagnosticFacto
|
||||
|
||||
@NotNull
|
||||
public ParametrizedDiagnostic<E> on(@NotNull E element, @NotNull A argument) {
|
||||
return new DiagnosticWithParameters1<E, A>(element, argument, this, severity, makeMessage(argument));
|
||||
return new DiagnosticWithParameters1<E, A>(element, argument, this, severity);
|
||||
}
|
||||
|
||||
protected DiagnosticFactory1(Severity severity, String message, PositioningStrategy<? super E> positioningStrategy, Renderer<? super A> renderer) {
|
||||
|
||||
@@ -26,7 +26,7 @@ public class DiagnosticFactory2<E extends PsiElement, A, B> extends DiagnosticFa
|
||||
private final Renderer<? super A> rendererForA;
|
||||
private final Renderer<? super B> rendererForB;
|
||||
|
||||
private String makeMessage(@NotNull A a, @NotNull B b) {
|
||||
protected String makeMessage(@NotNull A a, @NotNull B b) {
|
||||
return messageFormat.format(new Object[] {makeMessageForA(a), makeMessageForB(b)});
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ public class DiagnosticFactory2<E extends PsiElement, A, B> extends DiagnosticFa
|
||||
|
||||
@NotNull
|
||||
public ParametrizedDiagnostic<E> on(@NotNull E element, @NotNull A a, @NotNull B b) {
|
||||
return new DiagnosticWithParameters2<E, A, B>(element, a, b, this, severity, makeMessage(a, b));
|
||||
return new DiagnosticWithParameters2<E, A, B>(element, a, b, this, severity);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ public class DiagnosticFactory3<E extends PsiElement, A, B, C> extends Diagnosti
|
||||
return new DiagnosticFactory3<T, A, B, C>(severity, messageStub, positioningStrategy, rendererForA, rendererForB, rendererForC);
|
||||
}
|
||||
|
||||
private String makeMessage(@NotNull A a, @NotNull B b, @NotNull C c) {
|
||||
protected String makeMessage(@NotNull A a, @NotNull B b, @NotNull C c) {
|
||||
return messageFormat.format(new Object[]{makeMessageForA(a), makeMessageForB(b), makeMessageForC(c)});
|
||||
}
|
||||
|
||||
@@ -67,6 +67,6 @@ public class DiagnosticFactory3<E extends PsiElement, A, B, C> extends Diagnosti
|
||||
}
|
||||
@NotNull
|
||||
public ParametrizedDiagnostic<E> on(@NotNull E element, @NotNull A a, @NotNull B b, @NotNull C c) {
|
||||
return new DiagnosticWithParameters3<E, A, B, C>(element, a, b, c, this, severity, makeMessage(a, b, c));
|
||||
return new DiagnosticWithParameters3<E, A, B, C>(element, a, b, c, this, severity);
|
||||
}
|
||||
}
|
||||
|
||||
+8
-3
@@ -32,9 +32,8 @@ public class DiagnosticWithParameters1<E extends PsiElement, A> extends Abstract
|
||||
public DiagnosticWithParameters1(@NotNull E psiElement,
|
||||
@NotNull A a,
|
||||
@NotNull DiagnosticFactory1<E, A> factory,
|
||||
@NotNull Severity severity,
|
||||
@NotNull String message) {
|
||||
super(psiElement, factory, severity, message);
|
||||
@NotNull Severity severity) {
|
||||
super(psiElement, factory, severity);
|
||||
this.a = a;
|
||||
}
|
||||
|
||||
@@ -44,6 +43,12 @@ public class DiagnosticWithParameters1<E extends PsiElement, A> extends Abstract
|
||||
return (DiagnosticFactory1<E, A>)super.getFactory();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return getFactory().makeMessage(a);
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public List<TextRange> getTextRanges() {
|
||||
|
||||
+8
-3
@@ -34,9 +34,8 @@ public class DiagnosticWithParameters2<E extends PsiElement, A, B> extends Abstr
|
||||
@NotNull A a,
|
||||
@NotNull B b,
|
||||
@NotNull DiagnosticFactory2<E, A, B> factory,
|
||||
@NotNull Severity severity,
|
||||
@NotNull String message) {
|
||||
super(psiElement, factory, severity, message);
|
||||
@NotNull Severity severity) {
|
||||
super(psiElement, factory, severity);
|
||||
this.a = a;
|
||||
this.b = b;
|
||||
}
|
||||
@@ -47,6 +46,12 @@ public class DiagnosticWithParameters2<E extends PsiElement, A, B> extends Abstr
|
||||
return (DiagnosticFactory2<E, A, B>)super.getFactory();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return getFactory().makeMessage(a, b);
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public List<TextRange> getTextRanges() {
|
||||
|
||||
+8
-3
@@ -36,9 +36,8 @@ public class DiagnosticWithParameters3<E extends PsiElement, A, B, C> extends Ab
|
||||
@NotNull B b,
|
||||
@NotNull C c,
|
||||
@NotNull DiagnosticFactory3<E, A, B, C> factory,
|
||||
@NotNull Severity severity,
|
||||
@NotNull String message) {
|
||||
super(psiElement, factory, severity, message);
|
||||
@NotNull Severity severity) {
|
||||
super(psiElement, factory, severity);
|
||||
this.a = a;
|
||||
this.b = b;
|
||||
this.c = c;
|
||||
@@ -50,6 +49,12 @@ public class DiagnosticWithParameters3<E extends PsiElement, A, B, C> extends Ab
|
||||
return (DiagnosticFactory3<E, A, B, C>)super.getFactory();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return getFactory().makeMessage(a, b, c);
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public List<TextRange> getTextRanges() {
|
||||
|
||||
+12
-4
@@ -26,14 +26,22 @@ import java.util.List;
|
||||
* @author svtk
|
||||
*/
|
||||
public class DiagnosticWithPsiElement<E extends PsiElement> extends AbstractDiagnostic<E> {
|
||||
public DiagnosticWithPsiElement(@NotNull E psiElement, @NotNull DiagnosticFactoryWithPsiElement<E> factory, @NotNull Severity severity, @NotNull String message) {
|
||||
super(psiElement, factory, severity, message);
|
||||
public DiagnosticWithPsiElement(@NotNull E psiElement,
|
||||
@NotNull DiagnosticFactory<E> factory,
|
||||
@NotNull Severity severity) {
|
||||
super(psiElement, factory, severity);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public DiagnosticFactoryWithPsiElement<E> getFactory() {
|
||||
return (DiagnosticFactoryWithPsiElement<E>)super.getFactory();
|
||||
public DiagnosticFactory<E> getFactory() {
|
||||
return (DiagnosticFactory<E>)super.getFactory();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return getFactory().getMessage();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+15
-1
@@ -33,9 +33,23 @@ import java.util.List;
|
||||
*/
|
||||
public interface RedeclarationDiagnostic extends Diagnostic {
|
||||
class SimpleRedeclarationDiagnostic extends AbstractDiagnostic<PsiElement> implements RedeclarationDiagnostic {
|
||||
private String name;
|
||||
|
||||
public SimpleRedeclarationDiagnostic(@NotNull PsiElement psiElement, @NotNull String name, RedeclarationDiagnosticFactory factory) {
|
||||
super(psiElement, factory, factory.severity, factory.makeMessage(name));
|
||||
super(psiElement, factory, factory.severity);
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public RedeclarationDiagnosticFactory getFactory() {
|
||||
return (RedeclarationDiagnosticFactory)super.getFactory();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return getFactory().makeMessage(name);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+9
-3
@@ -30,15 +30,21 @@ import static org.jetbrains.jet.lang.diagnostics.Severity.ERROR;
|
||||
* @author abreslav
|
||||
*/
|
||||
public class UnresolvedReferenceDiagnostic extends AbstractDiagnostic<JetReferenceExpression> {
|
||||
@NotNull
|
||||
@Override
|
||||
public UnresolvedReferenceDiagnosticFactory getFactory() {
|
||||
return (UnresolvedReferenceDiagnosticFactory)super.getFactory();
|
||||
}
|
||||
|
||||
public UnresolvedReferenceDiagnostic(JetReferenceExpression referenceExpression, String message) {
|
||||
super(referenceExpression, Errors.UNRESOLVED_REFERENCE, ERROR, message);
|
||||
public UnresolvedReferenceDiagnostic(@NotNull JetReferenceExpression referenceExpression,
|
||||
@NotNull UnresolvedReferenceDiagnosticFactory factory) {
|
||||
super(referenceExpression, factory, ERROR);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return super.getMessage() + ": " + getPsiElement().getText();
|
||||
return getFactory().getMessage() + ": " + getPsiElement().getText();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+5
-8
@@ -16,28 +16,25 @@
|
||||
|
||||
package org.jetbrains.jet.lang.diagnostics;
|
||||
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.psi.JetArrayAccessExpression;
|
||||
import org.jetbrains.jet.lang.psi.JetReferenceExpression;
|
||||
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author abreslav
|
||||
*/
|
||||
public class UnresolvedReferenceDiagnosticFactory extends AbstractDiagnosticFactory {
|
||||
|
||||
private final String message;
|
||||
|
||||
private UnresolvedReferenceDiagnosticFactory(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public UnresolvedReferenceDiagnostic on(@NotNull JetReferenceExpression reference) {
|
||||
return new UnresolvedReferenceDiagnostic(reference, message);
|
||||
return new UnresolvedReferenceDiagnostic(reference, this);
|
||||
}
|
||||
|
||||
public static UnresolvedReferenceDiagnosticFactory create(String message) {
|
||||
|
||||
@@ -19,5 +19,5 @@ fun test() {
|
||||
bar(1, 1, "")
|
||||
bar(1, 1, "")
|
||||
bar(1, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>z<!> = "")
|
||||
bar<!NO_VALUE_FOR_PARAMETER!>(1, <!UNRESOLVED_REFERENCE, MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>zz<!> = "", <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!><!UNRESOLVED_REFERENCE!>zz<!>.foo<!>)<!>
|
||||
bar<!NO_VALUE_FOR_PARAMETER!>(1, <!NAMED_PARAMETER_NOT_FOUND, MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>zz<!> = "", <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!><!UNRESOLVED_REFERENCE!>zz<!>.foo<!>)<!>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user