Skip to content

Commit

Permalink
feat(intellij): generate sealed classes (#4104)
Browse files Browse the repository at this point in the history
  • Loading branch information
felangel committed Mar 13, 2024
1 parent 5ea6197 commit e522b22
Show file tree
Hide file tree
Showing 16 changed files with 58 additions and 56 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ class GenerateBlocAction : AnAction(), GenerateBlocDialog.Listener {
dialog.show()
}

override fun onGenerateBlocClicked(blocName: String?, blocTemplateType: BlocTemplateType) {
override fun onGenerateBlocClicked(
blocName: String?,
blocTemplateType: BlocTemplateType,
) {
blocName?.let { name ->
val generators = BlocGeneratorFactory.getBlocGenerators(name, blocTemplateType)
generate(generators)
Expand All @@ -33,18 +36,15 @@ class GenerateBlocAction : AnAction(), GenerateBlocDialog.Listener {
}
}

protected fun generate(mainSourceGenerators: List<BlocGenerator>) {
private fun generate(mainSourceGenerators: List<BlocGenerator>) {
val project = CommonDataKeys.PROJECT.getData(dataContext)
val view = LangDataKeys.IDE_VIEW.getData(dataContext)
val directory = view?.orChooseDirectory
ApplicationManager.getApplication().runWriteAction {
CommandProcessor.getInstance().executeCommand(
project,
{
mainSourceGenerators.forEach { createSourceFile(project!!, it, directory!!) }
},
"Generate a new Bloc",
null
project, {
mainSourceGenerators.forEach { createSourceFile(project!!, it, directory!!) }
}, "Generate a new Bloc", null
)
}
}
Expand All @@ -58,7 +58,7 @@ class GenerateBlocAction : AnAction(), GenerateBlocDialog.Listener {
return
}
val psiFile = PsiFileFactory.getInstance(project)
.createFileFromText(fileName, JavaLanguage.INSTANCE, generator.generate())
.createFileFromText(fileName, JavaLanguage.INSTANCE, generator.generate())
directory.add(psiFile)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import org.jetbrains.annotations.Nullable;

import javax.swing.*;
import java.util.Objects;

public class GenerateBlocDialog extends DialogWrapper {

Expand All @@ -28,10 +29,10 @@ protected JComponent createCenterPanel() {
protected void doOKAction() {
super.doOKAction();
BlocTemplateType blocTemplateType;
final String selectedStyle = style.getSelectedItem().toString();
if (selectedStyle == "Equatable") {
final String selectedStyle = Objects.requireNonNull(style.getSelectedItem()).toString();
if (Objects.equals(selectedStyle, "Equatable")) {
blocTemplateType = BlocTemplateType.EQUATABLE;
} else if (selectedStyle == "Freezed") {
} else if (Objects.equals(selectedStyle, "Freezed")) {
blocTemplateType = BlocTemplateType.FREEZED;
} else {
blocTemplateType = BlocTemplateType.BASIC;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,9 @@ class GenerateCubitAction : AnAction(), GenerateBlocDialog.Listener {
val directory = view?.orChooseDirectory
ApplicationManager.getApplication().runWriteAction {
CommandProcessor.getInstance().executeCommand(
project,
{
mainSourceGenerators.forEach { createSourceFile(project!!, it, directory!!) }
},
"Generate a new Cubit",
null
project, {
mainSourceGenerators.forEach { createSourceFile(project!!, it, directory!!) }
}, "Generate a new Cubit", null
)
}
}
Expand All @@ -58,7 +55,7 @@ class GenerateCubitAction : AnAction(), GenerateBlocDialog.Listener {
return
}
val psiFile = PsiFileFactory.getInstance(project)
.createFileFromText(fileName, JavaLanguage.INSTANCE, generator.generate())
.createFileFromText(fileName, JavaLanguage.INSTANCE, generator.generate())
directory.add(psiFile)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,11 @@ class GenerateEquatablePropsAction : AnAction() {

override fun update(event: AnActionEvent) {
super.update(event)
val action = event?.presentation;
if (action != null) {
val editor = event.getRequiredData(CommonDataKeys.EDITOR)
val project = event.project ?: return
val currentFile = PsiUtilBase.getPsiFileInEditor(editor, project)
action.isEnabledAndVisible = currentFile?.name?.endsWith(".dart") == true
}
val action = event.presentation;
val editor = event.getRequiredData(CommonDataKeys.EDITOR)
val project = event.project ?: return
val currentFile = PsiUtilBase.getPsiFileInEditor(editor, project)
action.isEnabledAndVisible = currentFile?.name?.endsWith(".dart") == true
}

override fun actionPerformed(event: AnActionEvent) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@ import com.google.common.io.CharStreams
import org.apache.commons.lang.text.StrSubstitutor
import java.io.InputStreamReader

abstract class BlocGenerator(private val name: String,
blocTemplateType: BlocTemplateType,
templateName: String) {
abstract class BlocGenerator(
private val name: String,
blocTemplateType: BlocTemplateType,
templateName: String
) {

private val TEMPLATE_BLOC_PASCAL_CASE = "bloc_pascal_case"
private val TEMPLATE_BLOC_SNAKE_CASE = "bloc_snake_case"
Expand All @@ -19,8 +21,8 @@ abstract class BlocGenerator(private val name: String,

init {
templateValues = mutableMapOf(
TEMPLATE_BLOC_PASCAL_CASE to pascalCase(),
TEMPLATE_BLOC_SNAKE_CASE to snakeCase()
TEMPLATE_BLOC_PASCAL_CASE to pascalCase(),
TEMPLATE_BLOC_SNAKE_CASE to snakeCase()
)
try {
val templateFolder = when (blocTemplateType) {
Expand All @@ -30,7 +32,7 @@ abstract class BlocGenerator(private val name: String,
}
val resource = "/templates/$templateFolder/$templateName.dart.template"
val resourceAsStream = BlocGenerator::class.java.getResourceAsStream(resource)
templateString = CharStreams.toString(InputStreamReader(resourceAsStream, Charsets.UTF_8))
templateString = CharStreams.toString(InputStreamReader(resourceAsStream!!, Charsets.UTF_8))
} catch (e: Exception) {
throw RuntimeException(e)
}
Expand All @@ -43,7 +45,7 @@ abstract class BlocGenerator(private val name: String,
return substitutor.replace(templateString)
}

fun pascalCase(): String = name.toUpperCamelCase().replace("Bloc", "")
private fun pascalCase(): String = name.toUpperCamelCase().replace("Bloc", "")

fun snakeCase() = name.toLowerSnakeCase().replace("_bloc", "")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ import com.bloc.intellij_generator_plugin.generator.components.BlocGenerator
import com.bloc.intellij_generator_plugin.generator.components.BlocStateGenerator

object BlocGeneratorFactory {
fun getBlocGenerators(name: String, blocTemplateType: BlocTemplateType): List<com.bloc.intellij_generator_plugin.generator.BlocGenerator> {
fun getBlocGenerators(
name: String,
blocTemplateType: BlocTemplateType,
): List<com.bloc.intellij_generator_plugin.generator.BlocGenerator> {
val bloc = BlocGenerator(name, blocTemplateType)
val event = BlocEventGenerator(name, blocTemplateType)
val state = BlocStateGenerator(name, blocTemplateType)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@ import com.google.common.io.CharStreams
import org.apache.commons.lang.text.StrSubstitutor
import java.io.InputStreamReader

abstract class CubitGenerator(private val name: String,
blocTemplateType: BlocTemplateType,
templateName: String) {
abstract class CubitGenerator(
private val name: String,
blocTemplateType: BlocTemplateType,
templateName: String
) {

private val TEMPLATE_CUBIT_PASCAL_CASE = "cubit_pascal_case"
private val TEMPLATE_CUBIT_SNAKE_CASE = "cubit_snake_case"
Expand All @@ -19,8 +21,8 @@ abstract class CubitGenerator(private val name: String,

init {
templateValues = mutableMapOf(
TEMPLATE_CUBIT_PASCAL_CASE to pascalCase(),
TEMPLATE_CUBIT_SNAKE_CASE to snakeCase()
TEMPLATE_CUBIT_PASCAL_CASE to pascalCase(),
TEMPLATE_CUBIT_SNAKE_CASE to snakeCase()
)
try {
val templateFolder = when (blocTemplateType) {
Expand All @@ -30,7 +32,7 @@ abstract class CubitGenerator(private val name: String,
}
val resource = "/templates/$templateFolder/$templateName.dart.template"
val resourceAsStream = CubitGenerator::class.java.getResourceAsStream(resource)
templateString = CharStreams.toString(InputStreamReader(resourceAsStream, Charsets.UTF_8))
templateString = CharStreams.toString(InputStreamReader(resourceAsStream!!, Charsets.UTF_8))
} catch (e: Exception) {
throw RuntimeException(e)
}
Expand All @@ -43,7 +45,7 @@ abstract class CubitGenerator(private val name: String,
return substitutor.replace(templateString)
}

fun pascalCase(): String = name.toUpperCamelCase().replace("Cubit", "")
private fun pascalCase(): String = name.toUpperCamelCase().replace("Cubit", "")

fun snakeCase() = name.toLowerSnakeCase().replace("_cubit", "")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@ import com.bloc.intellij_generator_plugin.generator.components.CubitGenerator
import com.bloc.intellij_generator_plugin.generator.components.CubitStateGenerator

object CubitGeneratorFactory {
fun getCubitGenerators(name: String, blocTemplateType: BlocTemplateType): List<com.bloc.intellij_generator_plugin.generator.CubitGenerator> {
fun getCubitGenerators(
name: String,
blocTemplateType: BlocTemplateType,
): List<com.bloc.intellij_generator_plugin.generator.CubitGenerator> {
val cubit = CubitGenerator(name, blocTemplateType)
val state = CubitStateGenerator(name, blocTemplateType)
return listOf(cubit, state)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import 'dart:async';

import 'package:bloc/bloc.dart';
import 'package:meta/meta.dart';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
part of '{{bloc_snake_case}}_bloc.dart';

@immutable
abstract class {{bloc_pascal_case}}Event {}
sealed class {{bloc_pascal_case}}Event {}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
part of '{{bloc_snake_case}}_bloc.dart';

@immutable
abstract class {{bloc_pascal_case}}State {}
sealed class {{bloc_pascal_case}}State {}

class {{bloc_pascal_case}}Initial extends {{bloc_pascal_case}}State {}
final class {{bloc_pascal_case}}Initial extends {{bloc_pascal_case}}State {}
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import 'dart:async';

import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
part of '{{bloc_snake_case}}_bloc.dart';

abstract class {{bloc_pascal_case}}Event extends Equatable {
sealed class {{bloc_pascal_case}}Event extends Equatable {
const {{bloc_pascal_case}}Event();
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
part of '{{bloc_snake_case}}_bloc.dart';

abstract class {{bloc_pascal_case}}State extends Equatable {
sealed class {{bloc_pascal_case}}State extends Equatable {
const {{bloc_pascal_case}}State();
}

class {{bloc_pascal_case}}Initial extends {{bloc_pascal_case}}State {
final class {{bloc_pascal_case}}Initial extends {{bloc_pascal_case}}State {
@override
List<Object> get props => [];
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
part of '{{cubit_snake_case}}_cubit.dart';

@immutable
abstract class {{cubit_pascal_case}}State {}
sealed class {{cubit_pascal_case}}State {}

class {{cubit_pascal_case}}Initial extends {{cubit_pascal_case}}State {}
final class {{cubit_pascal_case}}Initial extends {{cubit_pascal_case}}State {}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
part of '{{cubit_snake_case}}_cubit.dart';

abstract class {{cubit_pascal_case}}State extends Equatable {
sealed class {{cubit_pascal_case}}State extends Equatable {
const {{cubit_pascal_case}}State();
}

class {{cubit_pascal_case}}Initial extends {{cubit_pascal_case}}State {
final class {{cubit_pascal_case}}Initial extends {{cubit_pascal_case}}State {
@override
List<Object> get props => [];
}

0 comments on commit e522b22

Please sign in to comment.