/*=============================================================================#
# Copyright (c) 2009-2016 Stephan Wahlbrink (WalWare.de) and others.
# 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:
# Stephan Wahlbrink - initial API and implementation
#=============================================================================*/
package de.walware.statet.r.internal.rdata;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import de.walware.ecommons.ltk.AstInfo;
import de.walware.ecommons.text.core.input.StringParserInput;
import de.walware.rj.data.RFunction;
import de.walware.rj.data.RJIO;
import de.walware.rj.data.RObjectFactory;
import de.walware.rj.data.RStore;
import de.walware.statet.r.core.model.ArgsDefinition;
import de.walware.statet.r.core.model.IRElement;
import de.walware.statet.r.core.model.IRLangElement;
import de.walware.statet.r.core.model.IRMethod;
import de.walware.statet.r.core.model.RElementName;
import de.walware.statet.r.core.rsource.ast.FDef;
import de.walware.statet.r.core.rsource.ast.RScanner;
import de.walware.statet.r.internal.core.sourcemodel.SourceAnalyzer;
public final class RFunction2 extends CombinedElement
implements IRMethod, RFunction {
private ArgsDefinition fArgs;
public RFunction2(final ArgsDefinition args,
final CombinedElement parent, final RElementName name) {
super(parent, name);
fArgs = args;
}
public RFunction2(final RJIO io, final RObjectFactory factory,
final CombinedElement parent, final RElementName name) throws IOException {
super(parent, name);
/*final int options =*/ io.readInt();
final String headerSource = io.readString();
if (headerSource != null && headerSource.length() > 0) {
final RScanner scanner= new RScanner(AstInfo.LEVEL_MODEL_DEFAULT);
final FDef fDef= scanner.scanFDef(new StringParserInput(headerSource).init());
if (fDef != null) {
fArgs = SourceAnalyzer.createMethodArgDef(fDef, null);
}
}
}
@Override
public byte getRObjectType() {
return TYPE_FUNCTION;
}
@Override
public String getRClassName() {
return "function";
}
@Override
public long getLength() {
return 0;
}
@Override
public String getHeaderSource() {
return null;
}
@Override
public String getBodySource() {
return null;
}
@Override
public RStore getData() {
return null;
}
@Override
public int getElementType() {
return IRElement.R_COMMON_FUNCTION;
}
@Override
public ArgsDefinition getArgsDefinition() {
return fArgs;
}
@Override
public boolean hasModelChildren(final Filter filter) {
return false;
}
@Override
public List<? extends IRLangElement> getModelChildren(final Filter filter) {
return Collections.emptyList();
}
}