编码辅助

Jmix Studio 提供代码完成、代码检查、错误高亮展示和快速修复,以及方便的代码重构和丰富的导航功能。

下面我们了解下主要的编码辅助工具。

代码检查

Jmix Studio 能在编译前检查出项目中的典型编程错误,并提供修复建议。

根据错误级别的不同,Studio 会对问题代码以不同的方式进行高亮展示。

code inspections2
code inspections1

对某些检查,Jmix Studio 会建议使用 快速修复

快速修复

当某些检查发现了代码中的问题时,可以在编辑器中使用快速修复功能。将光标放在高亮代码的某个位置然后按下 Alt+Enter

red bulb

另一种方式是光标放在高亮代码的某个位置然后点击 yellow-bulb/red-bulb 图标。然后可以看到当前上下文的智能提示操作。

yellow light

行标记

行标记是展示在编辑器窗口侧边装订线中的图标。例如,行标记可以提供相关代码的导航目标:

line markers

使用行标记可以在 XML 描述中编辑 fetch plan:

line markers fetch plan

例如,可以导航至注入的组件或消息包中的本地化消息。需要按下 Ctrl 并左键点击组件 id 或消息键值。

references

重构

可以轻松并安全地做出修改。下面的示例中,我们将修改按钮的名称。

refactorings

使用重构功能,可以删除或重命名枚举、实体类、组件以及界面。

代码辅助工具支持的范围

在主项目中,代码辅助工具可以用在各种不同的情况。

  • 枚举和实体

    检查
    • 检查数据存储 中具有相同表名 实体 的唯一性。

    • 检查是否有 @InstanceName 注解。

    • 检查对数据类型字段使用不正确的 LAZY 读取类型,以及 @OneToOne@OneToMany@ManyToMany@ManyToOne 使用 EAGER 读取类型。

    • 检查每个实体字段是否有 JPA 注解。

    • 检查实体和枚举类及其属性是否具有本地化消息。

    • 检查持久化枚举属性是否根据 Jmix 约定进行声明 - 使用标识符类型。

    • 检查 @Version 注解是否重复。

    • 检查内部嵌入属性是否没有用 @Embedded 注解。

    • 检查实体是否有主键属性。

    快速修复和智能提示
    • 生成实例名称。

    • 用设计器添加实体属性。

    • 将实体属性添加至表格、表单、数据网格等可视化组件。

    • 为不同的资源角色编辑实体属性许可权限。

    • 为不同的资源角色编辑实体许可权限。

  • 界面 XML 描述

    检查
    • 检查 tableform 和其他可视化组件中的属性名称和属性路径。

    • 检查 dataContaineroptionsContainer 属性。这些属性应该引用当前界面内的数据容器,或者包含当前界面的 frame 中的数据容器。

    • 检查 gridLayout 中声明了列数量的行中是否有相应数量的列。

    • 检查 Jmix 界面描述中的下列内容:

      • expand 属性;

      • id 的唯一性。

    • 检查带有 type 属性的操作不应该设置 trackSelection 属性。

    • 当实体属性在 XML 中的 UI 组件使用,而该属性并未包含在 fetch plan 中时,报告错误。

    • 当 XML 布局中有超过一个根元素时报错。

    • 在 XML 描述中搜索冲突的 widthheightexpand 属性值。

    • 检查 form 的下列内容:

      • 重复字段;

      • column 外的字段。

    • 检查 hierarchyProperty 属性。该属性需要与数据容器中的实体的类型一致。

  • Fetch Plans

    • 检查 fetchPlanclass 属性是否设置。

    • 检查同一个 fetchPlan 标签中声明多次的属性。

    • 检查 fetch plan 当前的名称是否在其他 fetch plan 配置中出现过。

    • 检查 fetchPlan 属性是否包含内部属性或 fetchPlan 属性,如果有,则该属性需要指向一个实体。

    • 检查无需显式指定可以省略的属性,因为这些属性已经包含在 fetch plan 中。

  • 界面控制器

    检查
    • 检查每个 setter 仅有一个关联的装载(install)方法。

    • 检查界面控制器中注入的组件、操作和数据组件。如果注入字段的类型错误则报错。

    • 检查界面控制器中注入的组件。如果注入字段没有设置泛型类型,例如,使用了 Table 而非 Table<MyEntity>,则提供快速修复。

    • 检查正确实现了事件处理器:

      • 事件处理器必须仅位于界面控制器内。

      • 事件处理器必须使用 void 返回类型。

      • 事件处理器必须只有一个参数,且参数类型继承自 java.util.EventObject

      • 无法找到指定的 UI 组件。

    • 检查装载的代理:

      • 代理只能装载在界面控制器中。

      • 无法找到代理的载入点。

      • 载入点方法必须是 void 返回类型,且只有单一的 FunctionalInterface 类型参数。

      • 无法找到指定的 UI 组件。

    • 高亮可疑的字段赋值,如果此时字段应该使用容器进行注入。

    • 检查 GUI 组件是否通过 ComponentsFactory.createComponent() 创建。

    快速修复和智能提示
    • 编辑不同角色的界面权限。

    • 为界面控制器创建 XML 描述。

    • 从控制器导航至菜单项。

  • 日志

    检查
    • 检查使用了 org.slf4j.Logger logger,而非 System.out.println()System.err.println()java.lang.ThrowableprintStackTrace()

    • 高亮丢失打印异常堆栈信息的 apache-commons 日志。

  • 菜单

    检查
    • 检查菜单么有重复项。

  • 安全

    检查
    • 检查资源角色中重复的编码。

    • 检查资源角色中重复的名称。

    • 检查项目中是否存在某个界面。

    • 检查资源角色中的实体属性策略。

  • Bean 和服务

    检查
    • 检查服务 bean 是正确的 Jmix 框架中的 bean。