Skip to content

duck8823/generate-names

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

generate-names

@GenerateNamesアノテーションがついたクラスに対して、名前クラスを生成する。

Install

Jitpack.io を利用しています。
https://jitpack.io/#duck8823/generate-names

Maven

  1. pom.xml にリポジトリを追加
    <repositories>
        <repository>
            <id>jitpack.io</id>
            <url>https://jitpack.io</url>
        </repository>
    </repositories>
  2. 依存を追加
    <dependency>
        <groupId>com.github.duck8823</groupId>
        <artifactId>generate-names</artifactId>
        <version>0.0.6</version>
    </dependency>

Gradle

  1. build.gradle にリポジトリを追加
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
  2. 依存を追加
    dependencies {
        implementation 'com.github.duck8823:generate-names:0.0.6'
    }

Usage

クラスに@GenerateNamesをつける

package com.github.duck8823;

@GenerateNames
public class Hoge extends AbstractHoge {

	private String hoge;

	@Override
	public String toString() {
		return "hoge";
	}
}

生成されるクラス

package com.github.duck8823;

import java.lang.String;
import javax.annotation.Generated;

/**
 * Generated by generate-names.
 * @see https://github.com/duck8823/generate-names
 */
@Generated("net.duck8823.GenerateNamesProcessor")
public class HogeNames {
	
	/**
	 * abstractHogeのフィールド名
	 */
	public static final String ABSTRACT_HOGE = "abstractHoge";

	/**
	 * hogeのフィールド名
	 */
	public static final String HOGE = "hoge"
	
}

@Generatedアノテーションのパラメータ

  • createAsField (default : true) 対象フィールド名をstatic finalフィールドとして作成するかどうか
  • createAsMethod (default : false) 対象フィールド名を取得するメソッドを作成するかどうか
  • findMethods (default : false) メソッドを対象にするか
  • findSuperclass (default : true) 親クラスのフィールドを対象にするかどうか
  • suffix (default : "Names") 生成されるクラスの末尾に付加する文字列

メソッドを対象にする

findMethods = true にすることでメソッドを対象にすることができます。

もととなるクラス

import com.github.duck8823.GenerateNames;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;

import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.assertEquals;


@GenerateNames(findMethods = true, findSuperclass = false)
class SampleTest {

	@ParameterizedTest
	@MethodSource(SampleTestNames.NAMES)
	void test(String arg) {
		assertEquals(arg, "a");
	}

	static Stream<String> names() {
		return Stream.of("a", "b");
	}
}

生成されるクラス

import java.lang.String;
import javax.annotation.Generated;

/**
 * Generated by generate-names.
 * @see https://github.com/duck8823/generate-names
 */
@Generated("GenerateNamesProcessor")
public class SampleTestNames {
  /**
   * names()のメソッド名
   */
  public static final String NAMES = "names";
}

@Entityアノテーション

@GenerateNamesアノテーションがついているクラスにさらに@Entityアノテーションがついている場合、
@OneToOne@OneToMany@ManyToOne@ManyToManyがついているフィールドは再帰的にフィールド名を取得し、.で連結させます。

もととなるクラス

package com.github.duck8823;

import com.github.duck8823.*;

import javax.persistence.*;
import java.util.List;

@GenerateNames(createAsMethods = false, createAsFields = true)
@Entity
public class HogeRelated extends AbstractHoge {

	private String hoge;

	@Embedded
	private HogeEmbeddable hogeEmbeddable;

	@OneToOne
	private HogeOneToOne hogeOneToOne;

	@OneToMany
	private List<HogeOneToMany> hogeOneToMany;

	@ManyToOne
	private HogeManyToOne hogeManyToOne;

	@ManyToMany
	private List<HogeManyToMany> hogeManyToMany;

	@Override
	public String toString() {
		return "hoge";
	}
}

生成されるクラス

package com.github.duck8823;

import java.lang.String;
import javax.annotation.Generated;

/**
 * Generated by generate-names.
 * @see https://github.com/duck8823/generate-names
 */
@Generated("GenerateNamesProcessor")
public class HogeRelatedNames {
	/**
	 * hogeEmbeddableのフィールド名
	 */
	public static final String HOGE_EMBEDDABLE = "hogeEmbeddable";

	/**
	 * hogeOneToManyのフィールド名
	 */
	public static final String HOGE_ONE_TO_MANY = "hogeOneToMany";

	/**
	 * hogeManyToManyのフィールド名
	 */
	public static final String HOGE_MANY_TO_MANY = "hogeManyToMany";

	/**
	 * hogeManyToOne.manyToOneElemのフィールド名
	 */
	public static final String HOGE_MANY_TO_ONE_MANY_TO_ONE_ELEM = "hogeManyToOne.manyToOneElem";

	/**
	 * hogeManyToOneのフィールド名
	 */
	public static final String HOGE_MANY_TO_ONE = "hogeManyToOne";

	/**
	 * abstractHogeのフィールド名
	 */
	public static final String ABSTRACT_HOGE = "abstractHoge";

	/**
	 * hogeOneToOneのフィールド名
	 */
	public static final String HOGE_ONE_TO_ONE = "hogeOneToOne";

	/**
	 * hogeOneToOne.oneToOneElemのフィールド名
	 */
	public static final String HOGE_ONE_TO_ONE_ONE_TO_ONE_ELEM = "hogeOneToOne.oneToOneElem";

	/**
	 * hogeのフィールド名
	 */
	public static final String HOGE = "hoge";

	/**
	 * hogeOneToMany.oneToManyElemのフィールド名
	 */
	public static final String HOGE_ONE_TO_MANY_ONE_TO_MANY_ELEM = "hogeOneToMany.oneToManyElem";

	/**
	 * hogeManyToMany.manyToManyElemのフィールド名
	 */
	public static final String HOGE_MANY_TO_MANY_MANY_TO_MANY_ELEM = "hogeManyToMany.manyToManyElem";

	/**
	 * hogeEmbeddable.embeddableElemのフィールド名
	 */
	public static final String HOGE_EMBEDDABLE_EMBEDDABLE_ELEM = "hogeEmbeddable.embeddableElem";
}

About

Generate static fields of field and method names

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages