Skip to content

Commit

Permalink
Added kotlin templates
Browse files Browse the repository at this point in the history
  • Loading branch information
rendecano authored and AttwellBrian committed Jan 24, 2018
1 parent cde2240 commit f45179a
Show file tree
Hide file tree
Showing 42 changed files with 913 additions and 422 deletions.
Binary file not shown.
296 changes: 148 additions & 148 deletions ...lij-plugin/src/main/java/com/uber/presidio/intellij_plugin/action/rib/GenerateAction.java
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.uber.presidio.intellij_plugin.action.rib;

import android.support.annotation.Nullable;
package com.uber.presidio.intellij_plugin.action.rib;

import com.google.common.base.Preconditions;
import com.intellij.ide.IdeView;
Expand Down Expand Up @@ -46,7 +44,6 @@
import com.intellij.psi.PsiNameHelper;
import com.intellij.psi.PsiPackage;
import com.intellij.refactoring.PackageWrapper;
import com.intellij.refactoring.util.RefactoringUtil;
import com.uber.presidio.intellij_plugin.generator.Generator;

import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes;
Expand All @@ -56,170 +53,173 @@

import javax.swing.JOptionPane;

/** Base action to generate Java source and test source files with {@link Generator}. */
/**
* Base action to generate Java source and test source files with {@link Generator}.
*/
public abstract class GenerateAction extends AnAction {

private DataContext dataContext;
private DataContext dataContext;

@Override
public final void update(AnActionEvent e) {
this.dataContext = e.getDataContext();
final Presentation presentation = e.getPresentation();
@Override
public final void update(AnActionEvent e) {
this.dataContext = e.getDataContext();
final Presentation presentation = e.getPresentation();

final boolean enabled = isAvailable(dataContext);
final boolean enabled = isAvailable(dataContext);

presentation.setVisible(enabled);
presentation.setEnabled(enabled);
}
presentation.setVisible(enabled);
presentation.setEnabled(enabled);
}

/**
* Generates source with given generators.
*
* @param mainSourceGenerators generators to use to genertae source in the main source directory.
*/
protected void generate(
final List<Generator> mainSourceGenerators, final List<Generator> testSourceGenerators) {
/**
* Preconditions have been validated by {@link GenerateRibAction#isAvailable(DataContext)}.
* Generates source with given generators.
*
* @param mainSourceGenerators generators to use to genertae source in the main source directory.
*/
final Project project = Preconditions.checkNotNull(CommonDataKeys.PROJECT.getData(dataContext));
final IdeView view = Preconditions.checkNotNull(LangDataKeys.IDE_VIEW.getData(dataContext));
final PsiDirectory directory = Preconditions.checkNotNull(view.getOrChooseDirectory());
final Module currentModule =
Preconditions.checkNotNull(ModuleUtilCore.findModuleForPsiElement(directory));
final SourceFolder testSourceFolder = suitableTestSourceFolders(project, currentModule);
if (null == testSourceFolder) {
JOptionPane.showMessageDialog(
null, "Cannot create a RIB in a module without a test source set.");
return;
}
protected void generate(
final List<Generator> mainSourceGenerators, final List<Generator> testSourceGenerators) {
/**
* Preconditions have been validated by {@link GenerateRibAction#isAvailable(DataContext)}.
*/
final Project project = Preconditions.checkNotNull(CommonDataKeys.PROJECT.getData(dataContext));
final IdeView view = Preconditions.checkNotNull(LangDataKeys.IDE_VIEW.getData(dataContext));
final PsiDirectory directory = Preconditions.checkNotNull(view.getOrChooseDirectory());
final Module currentModule =
Preconditions.checkNotNull(ModuleUtilCore.findModuleForPsiElement(directory));
final SourceFolder testSourceFolder = suitableTestSourceFolders(project, currentModule);
if (null == testSourceFolder) {
JOptionPane.showMessageDialog(
null, "Cannot create a RIB in a module without a test source set.");
return;
}

final PackageWrapper targetPackage =
new PackageWrapper(PsiManager.getInstance(project), getPackageName());

ApplicationManager.getApplication()
.runWriteAction(
new Runnable() {
@Override
public void run() {
CommandProcessor.getInstance()
.executeCommand(
project,
new Runnable() {
@Override
public void run() {
for (Generator generator : mainSourceGenerators) {
createSourceFile(project, generator, directory);
}
final PackageWrapper targetPackage =
new PackageWrapper(PsiManager.getInstance(project), getPackageName());

PsiDirectory testDirectory =
RefactoringUtil.createPackageDirectoryInSourceRoot(
targetPackage, testSourceFolder.getFile());
for (Generator generator : testSourceGenerators) {
createSourceFile(project, generator, testDirectory);
ApplicationManager.getApplication()
.runWriteAction(
new Runnable() {
@Override
public void run() {
CommandProcessor.getInstance()
.executeCommand(
project,
new Runnable() {
@Override
public void run() {
for (Generator generator : mainSourceGenerators) {
createSourceFile(project, generator, directory);
}

PsiDirectory testDirectory =
RefactoringUtil.createPackageDirectoryInSourceRoot(
targetPackage, testSourceFolder.getFile());
for (Generator generator : testSourceGenerators) {
createSourceFile(project, generator, testDirectory);
}
}
},
"Generate new RIB",
null);
}
}
},
"Generate new RIB",
null);
}
});
}

/** @return gets the current package name for an executing action. */
protected final String getPackageName() {
/** Preconditions have been validated by {@link GenerateAction#isAvailable(DataContext)}. */
final Project project = Preconditions.checkNotNull(CommonDataKeys.PROJECT.getData(dataContext));
final IdeView view = Preconditions.checkNotNull(LangDataKeys.IDE_VIEW.getData(dataContext));
final PsiDirectory directory = Preconditions.checkNotNull(view.getOrChooseDirectory());
final PsiPackage psiPackage =
Preconditions.checkNotNull(JavaDirectoryService.getInstance().getPackage(directory));

return psiPackage.getQualifiedName();
}

/**
* Checked whether or not this action can be enabled.
*
* <p>Requirements to be enabled: * User must be in a Java source folder.
*
* @param dataContext to figure out where the user is.
* @return {@code true} when the action is available, {@code false} when the action is not
* available.
*/
private boolean isAvailable(DataContext dataContext) {
final Project project = CommonDataKeys.PROJECT.getData(dataContext);
if (project == null) {
return false;
});
}

final IdeView view = LangDataKeys.IDE_VIEW.getData(dataContext);
if (view == null || view.getDirectories().length == 0) {
return false;
/**
* @return gets the current package name for an executing action.
*/
protected final String getPackageName() {
/** Preconditions have been validated by {@link GenerateAction#isAvailable(DataContext)}. */
final Project project = Preconditions.checkNotNull(CommonDataKeys.PROJECT.getData(dataContext));
final IdeView view = Preconditions.checkNotNull(LangDataKeys.IDE_VIEW.getData(dataContext));
final PsiDirectory directory = Preconditions.checkNotNull(view.getOrChooseDirectory());
final PsiPackage psiPackage =
Preconditions.checkNotNull(JavaDirectoryService.getInstance().getPackage(directory));

return psiPackage.getQualifiedName();
}

ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(project).getFileIndex();
for (PsiDirectory dir : view.getDirectories()) {
if (projectFileIndex.isUnderSourceRootOfType(
dir.getVirtualFile(), JavaModuleSourceRootTypes.SOURCES)
&& checkPackageExists(dir)) {
return true;
}
/**
* Checked whether or not this action can be enabled.
* <p>
* <p>Requirements to be enabled: * User must be in a Java source folder.
*
* @param dataContext to figure out where the user is.
* @return {@code true} when the action is available, {@code false} when the action is not
* available.
*/
private boolean isAvailable(DataContext dataContext) {
final Project project = CommonDataKeys.PROJECT.getData(dataContext);
if (project == null) {
return false;
}

final IdeView view = LangDataKeys.IDE_VIEW.getData(dataContext);
if (view == null || view.getDirectories().length == 0) {
return false;
}

ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(project).getFileIndex();
for (PsiDirectory dir : view.getDirectories()) {
if (projectFileIndex.isUnderSourceRootOfType(
dir.getVirtualFile(), JavaModuleSourceRootTypes.SOURCES)
&& checkPackageExists(dir)) {
return true;
}
}

return false;
}

return false;
}

/**
* Checks if a Java package exists for a directory.
*
* @param directory to check.
* @return {@code true} when a package exists, {@code false} when it does not.
*/
private boolean checkPackageExists(PsiDirectory directory) {
PsiPackage pkg = JavaDirectoryService.getInstance().getPackage(directory);
if (pkg == null) {
return false;
/**
* Checks if a Java package exists for a directory.
*
* @param directory to check.
* @return {@code true} when a package exists, {@code false} when it does not.
*/
private boolean checkPackageExists(PsiDirectory directory) {
PsiPackage pkg = JavaDirectoryService.getInstance().getPackage(directory);
if (pkg == null) {
return false;
}

String name = pkg.getQualifiedName();
return StringUtil.isEmpty(name)
|| PsiNameHelper.getInstance(directory.getProject()).isQualifiedName(name);
}

String name = pkg.getQualifiedName();
return StringUtil.isEmpty(name)
|| PsiNameHelper.getInstance(directory.getProject()).isQualifiedName(name);
}

@Nullable
private static SourceFolder suitableTestSourceFolders(Project project, Module module) {
ContentEntry[] contentEntries = ModuleRootManager.getInstance(module).getContentEntries();
for (ContentEntry contentEntry : contentEntries) {
List<SourceFolder> testSourceFolders =
contentEntry.getSourceFolders(JavaSourceRootType.TEST_SOURCE);
for (SourceFolder testSourceFolder : testSourceFolders) {
if (testSourceFolder.getFile() != null) {
if (!JavaProjectRootsUtil.isInGeneratedCode(testSourceFolder.getFile(), project)) {
return testSourceFolder;
}
private static SourceFolder suitableTestSourceFolders(Project project, Module module) {
ContentEntry[] contentEntries = ModuleRootManager.getInstance(module).getContentEntries();
for (ContentEntry contentEntry : contentEntries) {
List<SourceFolder> testSourceFolders =
contentEntry.getSourceFolders(JavaSourceRootType.TEST_SOURCE);
for (SourceFolder testSourceFolder : testSourceFolders) {
if (testSourceFolder.getFile() != null) {
if (!JavaProjectRootsUtil.isInGeneratedCode(testSourceFolder.getFile(), project)) {
return testSourceFolder;
}
}
}
}
}

return null;
}

return null;
}

/**
* Writes a source file generated by a {@link Generator} to disk.
*
* @param project to write file in.
* @param generator to generate file with.
* @param directory to write file to.
*/
private static void createSourceFile(
Project project, Generator generator, PsiDirectory directory) {
PsiFile file =
PsiFileFactory.getInstance(project)
.createFileFromText(
String.format("%s.java", generator.getClassName()),
JavaLanguage.INSTANCE,
generator.generate());
directory.add(file);
}
/**
* Writes a source file generated by a {@link Generator} to disk.
*
* @param project to write file in.
* @param generator to generate file with.
* @param directory to write file to.
*/
private static void createSourceFile(
Project project, Generator generator, PsiDirectory directory) {
PsiFile file =
PsiFileFactory.getInstance(project)
.createFileFromText(
String.format("%s" + generator.getFileExtension(), generator.getClassName()),
JavaLanguage.INSTANCE,
generator.generate());
directory.add(file);
}
}
30 changes: 15 additions & 15 deletions ...-plugin/src/main/java/com/uber/presidio/intellij_plugin/action/rib/GenerateRibAction.java
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.uber.presidio.intellij_plugin.action.rib;
package com.uber.presidio.intellij_plugin.action.rib;

import com.intellij.openapi.actionSystem.AnActionEvent;
import com.uber.presidio.intellij_plugin.generator.GeneratorPair;
Expand All @@ -24,19 +24,19 @@
*/
public class GenerateRibAction extends GenerateAction implements GenerateRibDialog.Listener {

@Override
public void actionPerformed(AnActionEvent anActionEvent) {
GenerateRibDialog dialog = new GenerateRibDialog(this);
dialog.show();
}
@Override
public void actionPerformed(AnActionEvent anActionEvent) {
GenerateRibDialog dialog = new GenerateRibDialog(this);
dialog.show();
}

@Override
public void onGenerateClicked(String ribName, boolean createPresenterAndView) {
final GeneratorPair generators =
createPresenterAndView
? Generators.getGeneratorsForRibWithPresenterAndView(getPackageName(), ribName)
: Generators.getGeneratorsForRibWithoutPresenterAndView(
getPackageName(), ribName);
generate(generators.getMainSourceSetGenerators(), generators.getTestSourceSetGenerators());
}
@Override
public void onGenerateClicked(String ribName, boolean createPresenterAndView, boolean isKotlinSelected) {
final GeneratorPair generators =
createPresenterAndView
? Generators.getGeneratorsForRibWithPresenterAndView(getPackageName(), ribName, isKotlinSelected)
: Generators.getGeneratorsForRibWithoutPresenterAndView(
getPackageName(), ribName, isKotlinSelected);
generate(generators.getMainSourceSetGenerators(), generators.getTestSourceSetGenerators());
}
}
Loading

0 comments on commit f45179a

Please sign in to comment.