/******************************************************************************* * Copyright (c) 2009, 2017 xored software, Inc. 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: * xored software, Inc. - initial API and Implementation (Alex Panchenko) *******************************************************************************/ package org.eclipse.dltk.itcl.internal.core.parser.structure; import org.eclipse.dltk.compiler.IElementRequestor.FieldInfo; import org.eclipse.dltk.itcl.internal.core.IIncrTclModifiers; import org.eclipse.dltk.itcl.internal.core.parser.structure.model.IClass; import org.eclipse.dltk.tcl.ast.TclArgument; import org.eclipse.dltk.tcl.ast.TclCommand; import org.eclipse.dltk.tcl.structure.AbstractTclCommandModelBuilder; import org.eclipse.dltk.tcl.structure.ITclModelBuildContext; import org.eclipse.dltk.tcl.structure.ITclTypeHandler; import org.eclipse.dltk.tcl.structure.ITclTypeResolver; import org.eclipse.dltk.tcl.structure.TclModelProblem; public class IncrTclNewInstance extends AbstractTclCommandModelBuilder { @Override public boolean process(TclCommand command, ITclModelBuildContext context) throws TclModelProblem { if (command.getArguments().isEmpty()) { return false; } IClass type = IncrTclNames.getType(context); if (type == null) { return false; } TclArgument varName = command.getArguments().get(0); if (isSymbol(varName)) { FieldInfo fi = new FieldInfo(); fi.declarationStart = command.getStart(); fi.nameSourceStart = varName.getStart(); fi.nameSourceEnd = varName.getEnd() - 1; fi.name = asSymbol(varName); fi.modifiers = IIncrTclModifiers.AccIncrTcl; ITclTypeHandler typeHandler = context.get(ITclTypeResolver.class).resolveMemberType(fi, command.getEnd(), fi.name); if (context.getRequestor().enterFieldCheckDuplicates(fi)) { context.getRequestor().exitField(command.getEnd()); } typeHandler.leave(context.getRequestor()); } return false; } }