diff --git a/codan/org.eclipse.cdt.codan.checkers/plugin.xml b/codan/org.eclipse.cdt.codan.checkers/plugin.xml index 63b999eeb98..cef76bf850c 100644 --- a/codan/org.eclipse.cdt.codan.checkers/plugin.xml +++ b/codan/org.eclipse.cdt.codan.checkers/plugin.xml @@ -62,6 +62,17 @@ id="org.eclipse.cdt.codan.checkers.sample.SuggestedParenthesisProblem" name="Suggested parenthesis around expression"> + + + + diff --git a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/checkers/sample/NamingConventionFunctionChecker.java b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/checkers/sample/NamingConventionFunctionChecker.java new file mode 100644 index 00000000000..147d0ca1108 --- /dev/null +++ b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/checkers/sample/NamingConventionFunctionChecker.java @@ -0,0 +1,97 @@ +/******************************************************************************* + * Copyright (c) 2009 Alena Laskavaia + * 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: + * Alena Laskavaia - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.codan.checkers.sample; + +import java.util.regex.Pattern; +import org.eclipse.cdt.codan.core.model.AbstractCIndexChecker; +import org.eclipse.cdt.codan.core.model.ICheckerWithParameters; +import org.eclipse.cdt.codan.core.model.IProblem; +import org.eclipse.cdt.codan.core.model.IProblemParameterInfo; +import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy; +import org.eclipse.cdt.core.model.ICElement; +import org.eclipse.cdt.core.model.ICElementVisitor; +import org.eclipse.cdt.core.model.ITranslationUnit; +import org.eclipse.core.runtime.CoreException; + +/** + * @author Alena + * + */ +public class NamingConventionFunctionChecker extends AbstractCIndexChecker + implements ICheckerWithParameters { + public static final String PARAM_KEY = "pattern"; + private static final String ER_ID = "org.eclipse.cdt.codan.checkers.sample.NamingConventionFunctionProblem"; + + /* + * (non-Javadoc) + * + * @see + * org.eclipse.cdt.codan.core.model.ICIndexChecker#processUnit(org.eclipse + * .cdt.core.model.ITranslationUnit) + */ + public void processUnit(ITranslationUnit unit) { + final IProblem pt = getProblemById(ER_ID, getFile()); + try { + unit.accept(new ICElementVisitor() { + public boolean visit(ICElement element) throws CoreException { + if (element.getElementType() == ICElement.C_FUNCTION) { + String parameter = (String) pt.getParameter(PARAM_KEY); + Pattern pattern = Pattern.compile(parameter); + String name = element.getElementName(); + if (!pattern.matcher(name).find()) { + + reportProblem(ER_ID, getFile(), 1, // TODO: line number + "Bad function name: " + name); + } + return false; + } + return true; + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /* + * (non-Javadoc) + * + * @see + * org.eclipse.cdt.codan.core.model.ICheckerWithParameters#initParameters + * (org.eclipse.cdt.codan.core.model.IProblemWorkingCopy) + */ + public void initParameters(IProblemWorkingCopy problem) { + IProblemParameterInfo info = new IProblemParameterInfo() { + public String getUiInfo() { + return null; + } + + public String getType() { + return "string"; + } + + public String getLabel() { + return "Name Pattern"; + } + + public String getKey() { + return PARAM_KEY; + } + + public IProblemParameterInfo getElement(String key) { + return null; + } + }; + problem.setParameterInfo(info); + problem.setParameter(PARAM_KEY, "^[a-z]"); // name starts with english + // lower case letter + } +}