package ru.naumen.gintonic.context.quickfix.modules;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.contentassist.IContextInformation;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import ru.naumen.gintonic.plugin.icons.Icons;
import ru.naumen.gintonic.project.files.SelectAndReveal;
import ru.naumen.gintonic.templates.GuiceModuleTemplate;
import ru.naumen.gintonic.utils.ICompilationUnitUtils;
public class ProposalCreateGuiceModule implements IJavaCompletionProposal {
/**
* The package where we create the new guice module.
*/
private IPackageFragment packageFragment;
private String guiceModuleClassName;
public ProposalCreateGuiceModule(IPackageFragment packageFragment,
String guiceModuleName) {
this.packageFragment = packageFragment;
this.guiceModuleClassName = guiceModuleName;
}
@Override
public Point getSelection(IDocument document) {
return null;
}
@Override
public Image getImage() {
return Icons.ginTonicIconCreate;
}
/**
* Brief description of the action appears in the QuickfixProposal selection!
*/
@Override
public String getDisplayString() {
return "Create Guice module '" + guiceModuleClassName + "'";
}
/**
* Detailed description of the action, immersed in a window on the right
* Next to the QuickfixProposal selection on!
*/
@Override
public String getAdditionalProposalInfo() {
return null;
}
@Override
public IContextInformation getContextInformation() {
return null;
}
@Override
public void apply(IDocument document) {
GuiceModuleTemplate guiceModule = new GuiceModuleTemplate();
String generatedCode = guiceModule.generate(guiceModuleClassName);
String source = generatedCode;
ICompilationUnit iCompilationUnit = ICompilationUnitUtils.createJavaCompilationUnit(
packageFragment,
guiceModuleClassName,
source);
SelectAndReveal.selectAndRevealPrimaryType(iCompilationUnit);
}
@Override
public int getRelevance() {
return 0;
}
}