Got rid of storing diagnostic messages inside them: now they are generated on demand.

This commit is contained in:
Evgeny Gerashchenko
2012-04-11 20:58:21 +04:00
parent 927fb30fd4
commit 03fac49191
13 changed files with 79 additions and 41 deletions
@@ -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);
}
}
@@ -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() {
@@ -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() {
@@ -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() {
@@ -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
@@ -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
@@ -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
@@ -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<!>)<!>
}