blob: 8e28664d664e50840617eac9f6930eca80e571cb [file] [log] [blame]
/*******************************************************************************
* 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;
}
}