/*******************************************************************************
* Copyright (c) 2016 Bruno Medeiros and other Contributors.
* 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:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package com.googlecode.goclipse.tooling.tools;
import static melnorme.utilbox.core.Assert.AssertNamespace.assertNotNull;
import com.googlecode.goclipse.tooling.oracle.GoDocParser;
import melnorme.lang.tooling.common.ops.IOperationMonitor;
import melnorme.lang.tooling.toolchain.ops.AbstractToolOperation;
import melnorme.lang.tooling.toolchain.ops.OperationSoftFailure;
import melnorme.lang.tooling.toolchain.ops.SourceLocation;
import melnorme.lang.tooling.toolchain.ops.SourceOpContext;
import melnorme.utilbox.concurrency.OperationCancellation;
import melnorme.utilbox.core.CommonException;
public class GoFindDocOperation implements AbstractToolOperation<String> {
protected final GoFindDefinitionOperation findDefOp;
public GoFindDocOperation(GoFindDefinitionOperation findDefOp) {
this.findDefOp = assertNotNull(findDefOp);
}
@Override
public String executeToolOperation(IOperationMonitor om) throws CommonException, OperationCancellation {
SourceLocation findDefResult;
try {
findDefResult = findDefOp.getValidResult(om);
} catch(OperationSoftFailure e) {
return null; // No documentation will be available
}
SourceOpContext opContext = findDefOp.getGoOpContext().getOpContext();
String fileContents = opContext.getSourceFor(findDefResult.getFileLocation());
int offset = opContext.getOffsetFor(findDefResult);
return new GoDocParser().parseDocForDefinitionAt(fileContents, offset);
}
}