| /******************************************************************************* |
| * Copyright (c) 2010 xored software, Inc. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0. |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * xored software, Inc. - initial API and Implementation (Alex Panchenko) |
| *******************************************************************************/ |
| package org.eclipse.dltk.javascript.core.tests.structure; |
| |
| import java.util.Stack; |
| |
| import org.eclipse.dltk.compiler.ISourceElementRequestorExtension; |
| import org.eclipse.dltk.compiler.SourceElementRequestorAdaptor; |
| import org.eclipse.dltk.compiler.SourceElementRequestorMode; |
| |
| public class Recorder extends SourceElementRequestorAdaptor implements |
| ISourceElementRequestorExtension { |
| |
| private final Stack<Member> structure = new Stack<Member>(); |
| |
| private final Root root = new Root(); |
| |
| public Recorder() { |
| structure.push(root); |
| } |
| |
| public Root getRoot() { |
| return root; |
| } |
| |
| private Member peek() { |
| return structure.peek(); |
| } |
| |
| protected void push(Member child) { |
| structure.peek().add(child); |
| structure.push(child); |
| } |
| |
| protected Member pop() { |
| return structure.pop(); |
| } |
| |
| @Override |
| public void enterField(FieldInfo info) { |
| push(new Field(info.name)); |
| } |
| |
| @Override |
| public boolean enterFieldCheckDuplicates(FieldInfo info) { |
| Field field = new Field(info.name); |
| if (structure.contains(field)) return false; |
| push(field); |
| return true; |
| } |
| |
| @Override |
| public void exitField(int declarationEnd) { |
| pop(); |
| } |
| |
| @Override |
| public void enterMethod(MethodInfo info) { |
| push(new Method(info)); |
| } |
| |
| @Override |
| public void exitMethod(int declarationEnd) { |
| pop(); |
| } |
| |
| @Override |
| public void acceptFieldReference(String fieldName, int sourcePosition) { |
| peek().add(new FieldRef(fieldName)); |
| } |
| |
| @Override |
| public void acceptMethodReference(String methodName, int argCount, |
| int sourcePosition, int sourceEndPosition) { |
| peek().add(new MethodRef(methodName)); |
| } |
| |
| public SourceElementRequestorMode getMode() { |
| return SourceElementRequestorMode.INDEX; |
| } |
| |
| } |