@Override protected String getInitialFileContent(final IFile newFileHandle, final SubMonitor m) { final String lineDelimiter = TextUtil.getLineDelimiter(newFileHandle.getProject()); final IRSourceUnit su = (IRSourceUnit) LTK.getSourceUnitManager() .getSourceUnit( LTK.PERSISTENCE_CONTEXT, newFileHandle, getContentType(newFileHandle), true, m); try { final EvaluatedTemplate data = CodeGeneration.getNewRFileContent(su, lineDelimiter); if (data != null) { fInitialSelection = data.getRegionToSelect(); return data.getContent(); } } catch (final CoreException e) { RUIPlugin.logError( ICommonStatusConstants.INTERNAL_TEMPLATE, "An error occured when applying template to new R script file.", e); //$NON-NLS-1$ } finally { if (su != null) { su.disconnect(m); } } return null; }
/** * Generates content for the Roxygen comment for the given method definition * * @param rMethod function element * @param lineDelimiter the line delimiter to be used * @return * @throws CoreException thrown when the evaluation of the code template fails */ public static EvaluatedTemplate getMethodRoxygenComment( final IRMethod rMethod, final String lineDelimiter) throws CoreException { final Template template = RUIPlugin.getDefault() .getRCodeGenerationTemplateStore() .findTemplate(RCodeTemplatesContextType.ROXYGEN_S4METHOD_TEMPLATE); if (template == null) { return null; } final ISourceUnit su = rMethod.getSourceUnit(); final RCodeTemplatesContext context = new RCodeTemplatesContext( RCodeTemplatesContextType.ROXYGEN_METHOD_CONTEXTTYPE, su, lineDelimiter); context.setRElement(rMethod); try { final TemplateBuffer buffer = context.evaluate(template); if (buffer == null) { return null; } final EvaluatedTemplate data = new EvaluatedTemplate(buffer, lineDelimiter); final AbstractDocument content = data.startPostEdit(); final StringBuilder sb = new StringBuilder(64); final Position[] sigPositions; String sigText = null; { final TemplateVariable variable = TemplatesUtil.findVariable(buffer, RCodeTemplatesContextType.ROXYGEN_SIG_LIST_VARIABLE); sigPositions = new Position[(variable != null) ? variable.getOffsets().length : 0]; for (int i = 0; i < sigPositions.length; i++) { sigPositions[i] = new Position(variable.getOffsets()[i], variable.getLength()); content.addPosition(sigPositions[i]); } if (sigPositions.length > 0) { final ArgsDefinition args = rMethod.getArgsDefinition(); if (args != null) { final int count = args.size(); for (int i = 0; i < count; i++) { final Arg arg = args.get(i); if (arg.className == null || arg.className.equals("ANY")) { // $NON-NLS-1$ break; } sb.append(arg.className); sb.append(","); // $NON-NLS-1$ } if (sb.length() > 0) { sigText = sb.substring(0, sb.length() - 1); sb.setLength(0); } } } } final Position[] paramPositions; String[] paramTags = null; { final TemplateVariable variable = TemplatesUtil.findVariable( buffer, RCodeTemplatesContextType.ROXYGEN_PARAM_TAGS_VARIABLE); paramPositions = new Position[(variable != null) ? variable.getOffsets().length : 0]; for (int i = 0; i < paramPositions.length; i++) { paramPositions[i] = new Position(variable.getOffsets()[i], variable.getLength()); content.addPosition(paramPositions[i]); } if (paramPositions.length > 0) { String list = null; final ArgsDefinition args = rMethod.getArgsDefinition(); if (args != null) { final int count = args.size(); paramTags = new String[count]; for (int i = 0; i < count; i++) { sb.append("@param "); // $NON-NLS-1$ sb.append(args.get(i).name); sb.append(" "); // $NON-NLS-1$ paramTags[i] = sb.toString(); sb.setLength(0); } } } } if (sigPositions != null) { for (final Position pos : sigPositions) { insertRoxygen(content, pos, sigText); } } if (paramPositions != null) { for (final Position pos : paramPositions) { insertRoxygen(content, pos, paramTags); } } data.finishPostEdit(); return data; } catch (final Exception e) { throw new CoreException( new Status( IStatus.ERROR, RUI.PLUGIN_ID, NLS.bind( TemplateMessages.TemplateEvaluation_error_description, template.getDescription()), e)); } }
/** * Generates content for the Roxygen comment for the given function definition * * @param rMethod function element * @param lineDelimiter the line delimiter to be used * @return * @throws CoreException thrown when the evaluation of the code template fails */ public static EvaluatedTemplate getCommonFunctionRoxygenComment( final IRMethod rMethod, final String lineDelimiter) throws CoreException { final Template template = RUIPlugin.getDefault() .getRCodeGenerationTemplateStore() .findTemplate(RCodeTemplatesContextType.ROXYGEN_COMMONFUNCTION_TEMPLATE); if (template == null) { return null; } final ISourceUnit su = rMethod.getSourceUnit(); final RCodeTemplatesContext context = new RCodeTemplatesContext( RCodeTemplatesContextType.ROXYGEN_COMMONFUNCTION_CONTEXTTYPE, su, lineDelimiter); context.setRElement(rMethod); try { final TemplateBuffer buffer = context.evaluate(template); if (buffer == null) { return null; } final EvaluatedTemplate data = new EvaluatedTemplate(buffer, lineDelimiter); final AbstractDocument content = data.startPostEdit(); final StringBuilder tagBuffer = new StringBuilder(64); final TemplateVariable paramVariable = TemplatesUtil.findVariable(buffer, RCodeTemplatesContextType.ROXYGEN_PARAM_TAGS_VARIABLE); final Position[] paramPositions = new Position[(paramVariable != null) ? paramVariable.getOffsets().length : 0]; for (int i = 0; i < paramPositions.length; i++) { paramPositions[i] = new Position(paramVariable.getOffsets()[i], paramVariable.getLength()); content.addPosition(paramPositions[i]); } if (paramPositions.length > 0) { String[] tags = null; final ArgsDefinition args = rMethod.getArgsDefinition(); if (args != null) { final int count = args.size(); tags = new String[count]; for (int i = 0; i < count; i++) { tagBuffer.append("@param "); // $NON-NLS-1$ tagBuffer.append(args.get(i).name); tagBuffer.append(" "); // $NON-NLS-1$ tags[i] = tagBuffer.toString(); tagBuffer.setLength(0); } } for (final Position pos : paramPositions) { insertRoxygen(content, pos, tags); } } data.finishPostEdit(); return data; } catch (final Exception e) { throw new CoreException( new Status( IStatus.ERROR, RUI.PLUGIN_ID, NLS.bind( TemplateMessages.TemplateEvaluation_error_description, template.getDescription()), e)); } }
/** * Generates content for the Roxygen comment for the given class definition * * @param rClass class element * @param lineDelimiter the line delimiter to be used * @return * @throws CoreException thrown when the evaluation of the code template fails */ public static EvaluatedTemplate getClassRoxygenComment( final IRClass rClass, final String lineDelimiter) throws CoreException { final Template template = RUIPlugin.getDefault() .getRCodeGenerationTemplateStore() .findTemplate(RCodeTemplatesContextType.ROXYGEN_S4CLASS_TEMPLATE); if (template == null) { return null; } final ISourceUnit su = rClass.getSourceUnit(); final RCodeTemplatesContext context = new RCodeTemplatesContext( RCodeTemplatesContextType.ROXYGEN_CLASS_CONTEXTTYPE, su, lineDelimiter); context.setRElement(rClass); try { final TemplateBuffer buffer = context.evaluate(template); if (buffer == null) { return null; } final EvaluatedTemplate data = new EvaluatedTemplate(buffer, lineDelimiter); final AbstractDocument content = data.startPostEdit(); final StringBuilder tagBuffer = new StringBuilder(64); final TemplateVariable slotVariable = TemplatesUtil.findVariable(buffer, RCodeTemplatesContextType.ROXYGEN_SLOT_TAGS_VARIABLE); final Position[] slotPositions = new Position[(slotVariable != null) ? slotVariable.getOffsets().length : 0]; for (int i = 0; i < slotPositions.length; i++) { slotPositions[i] = new Position(slotVariable.getOffsets()[i], slotVariable.getLength()); content.addPosition(slotPositions[i]); } if (slotPositions.length > 0) { String[] tags = null; final List<? extends IModelElement> slots = rClass.getModelChildren(IRElement.R_S4SLOT_FILTER); final int count = slots.size(); tags = new String[count]; for (int i = 0; i < count; i++) { final IRSlot slot = (IRSlot) slots.get(i); tagBuffer.append("@slot "); // $NON-NLS-1$ tagBuffer.append(slot.getElementName().getDisplayName()); tagBuffer.append(" "); // $NON-NLS-1$ tags[i] = tagBuffer.toString(); tagBuffer.setLength(0); } for (final Position pos : slotPositions) { insertRoxygen(content, pos, tags); } } data.finishPostEdit(); return data; } catch (final Exception e) { throw new CoreException( new Status( IStatus.ERROR, RUI.PLUGIN_ID, NLS.bind( TemplateMessages.TemplateEvaluation_error_description, template.getDescription()), e)); } }