/* Copyright (C) 2009 Versant Inc. http://www.db4o.com */ package sharpen.core.internal; import java.util.*; import org.eclipse.jdt.core.dom.*; import sharpen.core.*; import static sharpen.core.framework.Environments.*; public class NameScopeImpl implements NameScope { public boolean contains(String name) { return _mappedMethodDeclarations.contains(name); } public void enterTypeDeclaration(AbstractTypeDeclaration node) { _currentType.push(node); _mappedMethodDeclarations.clear(); for (MethodDeclaration meth : getMethods(node)) { if (SharpenAnnotations.hasIgnoreAnnotation(meth)) continue; _mappedMethodDeclarations.add(my(Mappings.class).mappedMethodName(meth.resolveBinding())); } } public void leaveTypeDeclaration(AbstractTypeDeclaration node) { _currentType.pop(); } public AbstractTypeDeclaration currentType() { return _currentType.peek(); } private static MethodDeclaration[] getMethods(AbstractTypeDeclaration node) { if (node instanceof TypeDeclaration) { return ((TypeDeclaration)node).getMethods(); } else if (node instanceof EnumDeclaration) { List<MethodDeclaration> methodsList = new ArrayList<MethodDeclaration>(); for (Object declaration : node.bodyDeclarations()) { if (declaration instanceof MethodDeclaration) { methodsList.add((MethodDeclaration)declaration); } } return methodsList.toArray(new MethodDeclaration[methodsList.size()]); } else { throw new UnsupportedOperationException("not implemented"); } } private Stack<AbstractTypeDeclaration> _currentType = new Stack(); private List<String> _mappedMethodDeclarations = new ArrayList<String>(); }