/** * Copyright (c) 2011 Cloudsmith Inc. and other contributors, as listed below. * 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: * Cloudsmith * */ package org.cloudsmith.geppetto.ui.editor; import java.util.List; import org.cloudsmith.geppetto.forge.util.Argument; import org.cloudsmith.geppetto.forge.util.CallSymbol; import org.cloudsmith.geppetto.forge.util.ModulefileParser; import org.jrubyparser.SourcePosition; public class LenientModulefileParser extends ModulefileParser { private final MetadataModel model; public LenientModulefileParser(MetadataModel model) { this.model = model; } @Override protected void call(CallSymbol key, SourcePosition pos, List<Argument> args) { int nargs = args.size(); switch(nargs) { case 1: switch(key) { case name: { String name = args.get(0).toStringOrNull(); if(name != null) { setFullName(createModuleName(name, false, pos)); setNameSeen(); } break; } case version: { String ver = args.get(0).toStringOrNull(); if(ver != null) { createVersion(ver, pos); setVersionSeen(); } break; } case dependency: createDependency(args.get(0).toStringOrNull(), null, pos); break; case author: case description: case license: case project_page: case source: case summary: break; default: noResponse(key.name(), pos, 1); return; } break; case 2: case 3: if(key == CallSymbol.dependency) { createDependency(args.get(0).toStringOrNull(), args.get(1).toStringOrNull(), pos); if(nargs == 3) addWarning(pos, "Ignoring third argument to dependency"); break; } // Fall through default: noResponse(key.name(), pos, nargs); return; } ArgSticker[] argStickers = new ArgSticker[nargs]; for(int idx = 0; idx < nargs; ++idx) argStickers[idx] = new ArgSticker(args.get(idx)); model.addCall( key, new CallSticker(pos.getStartOffset(), pos.getEndOffset() - pos.getStartOffset(), argStickers)); } @Override protected String getBadNameMessage(IllegalArgumentException e, boolean dependency) { return MetadataModel.getBadNameMessage(e, dependency); } }