@GenerateNames
アノテーションがついたクラスに対して、名前クラスを生成する。
Jitpack.io を利用しています。
https://jitpack.io/#duck8823/generate-names
pom.xml
にリポジトリを追加<repositories> <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository> </repositories>
- 依存を追加
<dependency> <groupId>com.github.duck8823</groupId> <artifactId>generate-names</artifactId> <version>0.0.6</version> </dependency>
build.gradle
にリポジトリを追加allprojects { repositories { ... maven { url 'https://jitpack.io' } } }
- 依存を追加
dependencies { implementation 'com.github.duck8823:generate-names:0.0.6' }
クラスに@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"
}
- 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";
}
@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";
}