diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AbstractDiagnosticFactory.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AbstractDiagnosticFactory.java index d6e4605feee..5b6e97783a1 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AbstractDiagnosticFactory.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AbstractDiagnosticFactory.java @@ -8,6 +8,18 @@ import org.jetbrains.annotations.NotNull; * @author abreslav */ public class AbstractDiagnosticFactory implements DiagnosticFactory { + + private String name = null; + + /*package*/ void setName(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } + @NotNull @Override public TextRange getTextRange(@NotNull Diagnostic diagnostic) { @@ -18,6 +30,10 @@ public class AbstractDiagnosticFactory implements DiagnosticFactory { @Override public PsiFile getPsiFile(@NotNull Diagnostic diagnostic) { return ((DiagnosticWithTextRange) diagnostic).getPsiFile(); + } + @Override + public String toString() { + return getName(); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory.java index 98d7ced7aed..42621e20bfc 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory.java @@ -13,4 +13,7 @@ public interface DiagnosticFactory { @NotNull PsiFile getPsiFile(@NotNull Diagnostic diagnostic); + + @NotNull + String getName(); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java index 6821cd5e0c2..e61b3fe4fd2 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java @@ -6,6 +6,8 @@ import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.resolve.DescriptorRenderer; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; import java.util.Collection; import java.util.Iterator; @@ -282,5 +284,27 @@ public interface Errors { }; - + // This field is needed to make the Initializer class load (interfaces cannot have static initializers) + @SuppressWarnings("UnusedDeclaration") + Initializer __initializer = Initializer.INSTANCE; + class Initializer { + static { + for (Field field : Errors.class.getFields()) { + if ((field.getModifiers() & Modifier.STATIC) != 0) { + try { + Object value = field.get(null); + if (value instanceof AbstractDiagnosticFactory) { + AbstractDiagnosticFactory factory = (AbstractDiagnosticFactory) value; + factory.setName(field.getName()); + } + } + catch (IllegalAccessException e) { + throw new IllegalStateException(e); + } + } + } + } + private static final Initializer INSTANCE = new Initializer(); + private Initializer() {}; + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/RedeclarationDiagnosticFactory.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/RedeclarationDiagnosticFactory.java index b17bdbc43bf..5ebd2be9fb5 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/RedeclarationDiagnosticFactory.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/RedeclarationDiagnosticFactory.java @@ -29,4 +29,15 @@ public class RedeclarationDiagnosticFactory implements DiagnosticFactory { public PsiFile getPsiFile(@NotNull Diagnostic diagnostic) { throw new UnsupportedOperationException(); // TODO } + + @NotNull + @Override + public String getName() { + return "REDECLARATION"; + } + + @Override + public String toString() { + return getName(); + } } diff --git a/idea/src/org/jetbrains/jet/plugin/annotations/JetPsiChecker.java b/idea/src/org/jetbrains/jet/plugin/annotations/JetPsiChecker.java index 41d8319ebf9..175370d4059 100644 --- a/idea/src/org/jetbrains/jet/plugin/annotations/JetPsiChecker.java +++ b/idea/src/org/jetbrains/jet/plugin/annotations/JetPsiChecker.java @@ -45,61 +45,7 @@ public class JetPsiChecker implements Annotator { try { final BindingContext bindingContext = AnalyzerFacade.analyzeFileWithCache(file); -// ErrorHandler errorHandler = new ErrorHandler() { -// private final Set redeclarations = new HashSet(); -// -// @Override -// public void unresolvedReference(@NotNull JetReferenceExpression referenceExpression) { -// PsiReference reference = referenceExpression.getReference(); -// if (reference instanceof MultiRangeReference) { -// MultiRangeReference mrr = (MultiRangeReference) reference; -// for (TextRange range : mrr.getRanges()) { -// holder.createErrorAnnotation(range.shiftRight(referenceExpression.getTextOffset()), "Unresolved").setHighlightType(ProblemHighlightType.LIKE_UNKNOWN_SYMBOL); -// } -// } -// else { -// holder.createErrorAnnotation(referenceExpression, "Unresolved").setHighlightType(ProblemHighlightType.LIKE_UNKNOWN_SYMBOL); -// } -// } -// -// @Override -// public void typeMismatch(@NotNull JetExpression expression, @NotNull JetType expectedType, @NotNull JetType actualType) { -// holder.createErrorAnnotation(expression, "Type mismatch: inferred type is " + actualType + " but " + expectedType + " was expected"); -// } -// -// @Override -// public void redeclaration(@NotNull DeclarationDescriptor existingDescriptor, @NotNull DeclarationDescriptor redeclaredDescriptor) { -// markRedeclaration(existingDescriptor); -// markRedeclaration(redeclaredDescriptor); -// } -// -// private void markRedeclaration(DeclarationDescriptor redeclaration) { -// if (!redeclarations.add(redeclaration)) return; -// PsiElement declarationPsiElement = bindingContext.get(BindingContext.DESCRIPTOR_TO_DECLARATION, redeclaration); -// if (declarationPsiElement instanceof JetNamedDeclaration) { -// PsiElement nameIdentifier = ((JetNamedDeclaration) declarationPsiElement).getNameIdentifier(); -// if (nameIdentifier != null) { -// holder.createErrorAnnotation(nameIdentifier, "Redeclaration"); -// } -// } -// else if (declarationPsiElement != null) { -// holder.createErrorAnnotation(declarationPsiElement, "Redeclaration"); -// } -// } -// -// @Override -// public void genericError(@NotNull ASTNode node, @NotNull String errorMessage) { -// holder.createErrorAnnotation(node, errorMessage); -// } -// -// @Override -// public void genericWarning(@NotNull ASTNode node, @NotNull String message) { -// holder.createWarningAnnotation(node, message); -// } -// }; - if (errorReportingEnabled) { -// ErrorHandler.applyHandler(errorHandler, bindingContext); Collection diagnostics = bindingContext.getDiagnostics(); Set redeclarations = new HashSet(); for (Diagnostic diagnostic : diagnostics) {