package com.jetbrains.lang.dart.ide.annotator;
import com.intellij.lang.annotation.AnnotationHolder;
import com.intellij.lang.annotation.Annotator;
import com.intellij.psi.PsiElement;
import com.jetbrains.lang.dart.DartBundle;
import com.jetbrains.lang.dart.psi.DartReferenceExpression;
import com.jetbrains.lang.dart.psi.DartVisitor;
import org.jetbrains.annotations.NotNull;
public class DartUnresolvedReferenceVisitor extends DartVisitor implements Annotator {
private AnnotationHolder myHolder = null;
@Override
public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) {
assert myHolder == null;
myHolder = holder;
try {
element.accept(this);
}
finally {
myHolder = null;
}
}
@Override
public void visitReferenceExpression(@NotNull DartReferenceExpression reference) {
final String referenceText = reference.getText();
final boolean isSimpleReference = referenceText != null && !"void".equals(referenceText) && !referenceText.contains(".");
//final boolean isPrefix = referenceText != null &&
// !DartResolveUtil.getImportedFilesByImportPrefix(reference.getContainingFile(), referenceText).isEmpty();
if (isSimpleReference && /*!isPrefix && */reference.resolve() == null) {
myHolder.createErrorAnnotation(reference, DartBundle.message("cannot.resolve.reference"));
}
super.visitReferenceExpression(reference);
}
}