blob: 0af22aeaa9173101caf0da4878ceee42f24e861c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 NumberFour AG
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* NumberFour AG - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.javascript.internal.ui.text;
import static org.eclipse.dltk.javascript.internal.ui.text.JavascriptColorConstants.JS_DEPRECATED;
import java.util.Collection;
import java.util.EnumSet;
import java.util.Set;
import org.eclipse.dltk.compiler.problem.IProblem;
import org.eclipse.dltk.compiler.problem.IProblemIdentifier;
import org.eclipse.dltk.internal.javascript.ti.ITypeInferenceContext;
import org.eclipse.dltk.internal.javascript.ti.JSMethod;
import org.eclipse.dltk.internal.javascript.validation.TypeInfoValidator.ValidationVisitor;
import org.eclipse.dltk.javascript.ast.BinaryOperation;
import org.eclipse.dltk.javascript.ast.Expression;
import org.eclipse.dltk.javascript.ast.FunctionStatement;
import org.eclipse.dltk.javascript.ast.PropertyExpression;
import org.eclipse.dltk.javascript.ast.PropertyInitializer;
import org.eclipse.dltk.javascript.core.JavaScriptProblems;
import org.eclipse.dltk.javascript.parser.ISuppressWarningsState;
import org.eclipse.dltk.javascript.parser.JSProblemReporter;
import org.eclipse.dltk.ui.editor.highlighting.ISemanticHighlightingRequestor;
@SuppressWarnings("restriction")
public class JavaScriptDeprecationHighlightVisitor extends ValidationVisitor
implements JSProblemReporter {
private final ISemanticHighlightingRequestor requestor;
public JavaScriptDeprecationHighlightVisitor(ITypeInferenceContext context,
ISemanticHighlightingRequestor requestor) {
super(context, null, null);
reporter = this;
this.requestor = requestor;
}
private static final Set<JavaScriptProblems> DEPRECATION = EnumSet.of(
JavaScriptProblems.DEPRECATED_FUNCTION,
JavaScriptProblems.DEPRECATED_METHOD,
JavaScriptProblems.DEPRECATED_PROPERTY,
JavaScriptProblems.DEPRECATED_TYPE,
JavaScriptProblems.DEPRECATED_VARIABLE);
public void reportProblem(IProblem problem) {
}
@Override
protected JSMethod createMethod(FunctionStatement node) {
JSMethod method = super.createMethod(node);
if (method != null && method.isDeprecated()) {
if (node.getName() != null) {
requestor.addPosition(node.getName().sourceStart(), node
.getName()
.sourceEnd(), JS_DEPRECATED);
} else if (node.getParent() instanceof BinaryOperation
&& ((BinaryOperation) node.getParent()).getLeftExpression() instanceof PropertyExpression) {
PropertyExpression exp = (PropertyExpression) ((BinaryOperation) node
.getParent()).getLeftExpression();
requestor.addPosition(exp.getProperty().sourceStart(), exp
.getProperty().sourceEnd(), JS_DEPRECATED);
} else if (node.getParent() instanceof PropertyInitializer) {
Expression name = ((PropertyInitializer) node.getParent())
.getName();
requestor.addPosition(name.sourceStart(), name.sourceEnd(),
JS_DEPRECATED);
}
}
return method;
}
public void reportProblem(IProblemIdentifier identifier, String message,
int start, int end) {
if (DEPRECATION.contains(identifier)) {
requestor.addPosition(start, end, JS_DEPRECATED);
}
}
public void pushSuppressWarnings(Collection<IProblemIdentifier> suppressed) {
}
public void popSuppressWarnings() {
}
public ISuppressWarningsState getSuppressWarnings() {
return null;
}
public void restoreSuppressWarnings(ISuppressWarningsState state) {
}
}