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> {
|
public abstract class AbstractDiagnostic<E extends PsiElement> implements ParametrizedDiagnostic<E> {
|
||||||
private final E psiElement;
|
private final E psiElement;
|
||||||
private final String message;
|
|
||||||
private final AbstractDiagnosticFactory factory;
|
private final AbstractDiagnosticFactory factory;
|
||||||
private final Severity severity;
|
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.psiElement = psiElement;
|
||||||
this.factory = factory;
|
this.factory = factory;
|
||||||
this.severity = severity;
|
this.severity = severity;
|
||||||
this.message = message;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -48,12 +48,6 @@ public abstract class AbstractDiagnostic<E extends PsiElement> implements Parame
|
|||||||
return psiElement.getContainingFile();
|
return psiElement.getContainingFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
public String getMessage() {
|
|
||||||
return message;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public Severity getSeverity() {
|
public Severity getSeverity() {
|
||||||
|
|||||||
@@ -38,8 +38,12 @@ public class DiagnosticFactory<E extends PsiElement> extends DiagnosticFactoryWi
|
|||||||
return new DiagnosticFactory<T>(severity, message, positioningStrategy);
|
return new DiagnosticFactory<T>(severity, message, positioningStrategy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String getMessage() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public ParametrizedDiagnostic<E> on(@NotNull E element) {
|
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
|
@NotNull
|
||||||
public ParametrizedDiagnostic<E> on(@NotNull E element, @NotNull A argument) {
|
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) {
|
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 A> rendererForA;
|
||||||
private final Renderer<? super B> rendererForB;
|
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)});
|
return messageFormat.format(new Object[] {makeMessageForA(a), makeMessageForB(b)});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ public class DiagnosticFactory2<E extends PsiElement, A, B> extends DiagnosticFa
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public ParametrizedDiagnostic<E> on(@NotNull E element, @NotNull A a, @NotNull B b) {
|
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);
|
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)});
|
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
|
@NotNull
|
||||||
public ParametrizedDiagnostic<E> on(@NotNull E element, @NotNull A a, @NotNull B b, @NotNull C c) {
|
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,
|
public DiagnosticWithParameters1(@NotNull E psiElement,
|
||||||
@NotNull A a,
|
@NotNull A a,
|
||||||
@NotNull DiagnosticFactory1<E, A> factory,
|
@NotNull DiagnosticFactory1<E, A> factory,
|
||||||
@NotNull Severity severity,
|
@NotNull Severity severity) {
|
||||||
@NotNull String message) {
|
super(psiElement, factory, severity);
|
||||||
super(psiElement, factory, severity, message);
|
|
||||||
this.a = a;
|
this.a = a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,6 +43,12 @@ public class DiagnosticWithParameters1<E extends PsiElement, A> extends Abstract
|
|||||||
return (DiagnosticFactory1<E, A>)super.getFactory();
|
return (DiagnosticFactory1<E, A>)super.getFactory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public String getMessage() {
|
||||||
|
return getFactory().makeMessage(a);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public List<TextRange> getTextRanges() {
|
public List<TextRange> getTextRanges() {
|
||||||
|
|||||||
+8
-3
@@ -34,9 +34,8 @@ public class DiagnosticWithParameters2<E extends PsiElement, A, B> extends Abstr
|
|||||||
@NotNull A a,
|
@NotNull A a,
|
||||||
@NotNull B b,
|
@NotNull B b,
|
||||||
@NotNull DiagnosticFactory2<E, A, B> factory,
|
@NotNull DiagnosticFactory2<E, A, B> factory,
|
||||||
@NotNull Severity severity,
|
@NotNull Severity severity) {
|
||||||
@NotNull String message) {
|
super(psiElement, factory, severity);
|
||||||
super(psiElement, factory, severity, message);
|
|
||||||
this.a = a;
|
this.a = a;
|
||||||
this.b = b;
|
this.b = b;
|
||||||
}
|
}
|
||||||
@@ -47,6 +46,12 @@ public class DiagnosticWithParameters2<E extends PsiElement, A, B> extends Abstr
|
|||||||
return (DiagnosticFactory2<E, A, B>)super.getFactory();
|
return (DiagnosticFactory2<E, A, B>)super.getFactory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public String getMessage() {
|
||||||
|
return getFactory().makeMessage(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public List<TextRange> getTextRanges() {
|
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 B b,
|
||||||
@NotNull C c,
|
@NotNull C c,
|
||||||
@NotNull DiagnosticFactory3<E, A, B, C> factory,
|
@NotNull DiagnosticFactory3<E, A, B, C> factory,
|
||||||
@NotNull Severity severity,
|
@NotNull Severity severity) {
|
||||||
@NotNull String message) {
|
super(psiElement, factory, severity);
|
||||||
super(psiElement, factory, severity, message);
|
|
||||||
this.a = a;
|
this.a = a;
|
||||||
this.b = b;
|
this.b = b;
|
||||||
this.c = c;
|
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();
|
return (DiagnosticFactory3<E, A, B, C>)super.getFactory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public String getMessage() {
|
||||||
|
return getFactory().makeMessage(a, b, c);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public List<TextRange> getTextRanges() {
|
public List<TextRange> getTextRanges() {
|
||||||
|
|||||||
+12
-4
@@ -26,14 +26,22 @@ import java.util.List;
|
|||||||
* @author svtk
|
* @author svtk
|
||||||
*/
|
*/
|
||||||
public class DiagnosticWithPsiElement<E extends PsiElement> extends AbstractDiagnostic<E> {
|
public class DiagnosticWithPsiElement<E extends PsiElement> extends AbstractDiagnostic<E> {
|
||||||
public DiagnosticWithPsiElement(@NotNull E psiElement, @NotNull DiagnosticFactoryWithPsiElement<E> factory, @NotNull Severity severity, @NotNull String message) {
|
public DiagnosticWithPsiElement(@NotNull E psiElement,
|
||||||
super(psiElement, factory, severity, message);
|
@NotNull DiagnosticFactory<E> factory,
|
||||||
|
@NotNull Severity severity) {
|
||||||
|
super(psiElement, factory, severity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public DiagnosticFactoryWithPsiElement<E> getFactory() {
|
public DiagnosticFactory<E> getFactory() {
|
||||||
return (DiagnosticFactoryWithPsiElement<E>)super.getFactory();
|
return (DiagnosticFactory<E>)super.getFactory();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public String getMessage() {
|
||||||
|
return getFactory().getMessage();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+15
-1
@@ -33,9 +33,23 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public interface RedeclarationDiagnostic extends Diagnostic {
|
public interface RedeclarationDiagnostic extends Diagnostic {
|
||||||
class SimpleRedeclarationDiagnostic extends AbstractDiagnostic<PsiElement> implements RedeclarationDiagnostic {
|
class SimpleRedeclarationDiagnostic extends AbstractDiagnostic<PsiElement> implements RedeclarationDiagnostic {
|
||||||
|
private String name;
|
||||||
|
|
||||||
public SimpleRedeclarationDiagnostic(@NotNull PsiElement psiElement, @NotNull String name, RedeclarationDiagnosticFactory factory) {
|
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
|
@NotNull
|
||||||
|
|||||||
+9
-3
@@ -30,15 +30,21 @@ import static org.jetbrains.jet.lang.diagnostics.Severity.ERROR;
|
|||||||
* @author abreslav
|
* @author abreslav
|
||||||
*/
|
*/
|
||||||
public class UnresolvedReferenceDiagnostic extends AbstractDiagnostic<JetReferenceExpression> {
|
public class UnresolvedReferenceDiagnostic extends AbstractDiagnostic<JetReferenceExpression> {
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public UnresolvedReferenceDiagnosticFactory getFactory() {
|
||||||
|
return (UnresolvedReferenceDiagnosticFactory)super.getFactory();
|
||||||
|
}
|
||||||
|
|
||||||
public UnresolvedReferenceDiagnostic(JetReferenceExpression referenceExpression, String message) {
|
public UnresolvedReferenceDiagnostic(@NotNull JetReferenceExpression referenceExpression,
|
||||||
super(referenceExpression, Errors.UNRESOLVED_REFERENCE, ERROR, message);
|
@NotNull UnresolvedReferenceDiagnosticFactory factory) {
|
||||||
|
super(referenceExpression, factory, ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public String getMessage() {
|
public String getMessage() {
|
||||||
return super.getMessage() + ": " + getPsiElement().getText();
|
return getFactory().getMessage() + ": " + getPsiElement().getText();
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
+5
-8
@@ -16,28 +16,25 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.lang.diagnostics;
|
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.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.psi.JetArrayAccessExpression;
|
|
||||||
import org.jetbrains.jet.lang.psi.JetReferenceExpression;
|
import org.jetbrains.jet.lang.psi.JetReferenceExpression;
|
||||||
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author abreslav
|
* @author abreslav
|
||||||
*/
|
*/
|
||||||
public class UnresolvedReferenceDiagnosticFactory extends AbstractDiagnosticFactory {
|
public class UnresolvedReferenceDiagnosticFactory extends AbstractDiagnosticFactory {
|
||||||
|
|
||||||
private final String message;
|
private final String message;
|
||||||
|
|
||||||
private UnresolvedReferenceDiagnosticFactory(String message) {
|
private UnresolvedReferenceDiagnosticFactory(String message) {
|
||||||
this.message = message;
|
this.message = message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String getMessage() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
public UnresolvedReferenceDiagnostic on(@NotNull JetReferenceExpression reference) {
|
public UnresolvedReferenceDiagnostic on(@NotNull JetReferenceExpression reference) {
|
||||||
return new UnresolvedReferenceDiagnostic(reference, message);
|
return new UnresolvedReferenceDiagnostic(reference, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static UnresolvedReferenceDiagnosticFactory create(String message) {
|
public static UnresolvedReferenceDiagnosticFactory create(String message) {
|
||||||
|
|||||||
@@ -19,5 +19,5 @@ fun test() {
|
|||||||
bar(1, 1, "")
|
bar(1, 1, "")
|
||||||
bar(1, 1, "")
|
bar(1, 1, "")
|
||||||
bar(1, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>z<!> = "")
|
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