/**
 *                                                                            
 *  Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) 
 *                                                                            
 *  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:                                                      
 * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
 * 
 * 
 *  This copyright notice shows up in the generated Java code
 *
 */
package org.eclipse.osbp.xtext.functionlibrarydsl.ui.quickfix

import org.eclipse.osbp.xtext.oxtype.ui.quickfix.OXtypeQuickfixProvider

//import org.eclipse.xtext.ui.editor.quickfix.Fix
//import org.eclipse.xtext.ui.editor.quickfix.IssueResolutionAcceptor
//import org.eclipse.xtext.validation.Issue
/**
 * Custom quickfixes.
 *
 * see http://www.eclipse.org/Xtext/documentation.html#quickfixes
 */
class FunctionLibraryDslQuickfixProvider extends OXtypeQuickfixProvider {
	//	@Fix(MyDslValidator::INVALID_NAME)
	//	def capitalizeName(Issue issue, IssueResolutionAcceptor acceptor) {
	//		acceptor.accept(issue, 'Capitalize name', 'Capitalize the name.', 'upcase.png') [
	//			context |
	//			val xtextDocument = context.xtextDocument
	//			val firstLetter = xtextDocument.get(issue.offset, 1)
	//			xtextDocument.replace(issue.offset, 1, firstLetter.toUpperCase)
	//		]
	//	}
}
