Skip to content

Commit 76fab90

Browse files
LauriichangastaldiCopilot
authored
Add API for static initializers (#386)
* Add api for static initializers * Update modifier handling in InitializerImpl As introduced in #387 * Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Add more tests, extract common code and add equals/hashCode to init. --------- Co-authored-by: George Gastaldi <gegastaldi@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 1677d04 commit 76fab90

23 files changed

+797
-9
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.jboss.forge.roaster.model;
2+
3+
import org.jboss.forge.roaster.Internal;
4+
import org.jboss.forge.roaster.Origin;
5+
6+
/**
7+
* Represents a initializer of a {@link JavaClass}, {@link JavaRecord} or {@link JavaEnum}.
8+
*/
9+
public interface Initializer<O extends JavaType<O>, T extends Initializer<O, T>> extends StaticCapable, Internal, Origin<O> {
10+
11+
/**
12+
* Get the inner body of this {@link Initializer}
13+
*/
14+
String getBody();
15+
16+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.jboss.forge.roaster.model;
2+
3+
import java.util.List;
4+
5+
/**
6+
* Represents a {@link JavaType} that may define initializers.
7+
*/
8+
public interface InitializerHolder<O extends JavaType<O>> {
9+
10+
/**
11+
* Get a {@link List} of all {@link Initializer}s declared by this {@link O} instance, if any; otherwise return an empty
12+
* {@link List}
13+
*/
14+
List<? extends Initializer<O, ?>> getInitializers();
15+
16+
/**
17+
* Return true if this {@link O} instance has the provided {@link Initializer}; otherwise false.
18+
*/
19+
boolean hasInitializer(Initializer<O, ?> initializer);
20+
21+
}

api/src/main/java/org/jboss/forge/roaster/model/JavaClass.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
public interface JavaClass<O extends JavaClass<O>> extends
1919
JavaType<O>,
2020
PropertyHolder<O>,
21+
InitializerHolder<O>,
2122
GenericCapable<O>,
2223
Extendable<O>,
2324
Abstractable,

api/src/main/java/org/jboss/forge/roaster/model/JavaEnum.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*
1818
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
1919
*/
20-
public interface JavaEnum<O extends JavaEnum<O>> extends JavaType<O>, PropertyHolder<O>, TypeHolder<O>, StaticCapable
20+
public interface JavaEnum<O extends JavaEnum<O>> extends JavaType<O>, PropertyHolder<O>, InitializerHolder<O>, TypeHolder<O>, StaticCapable
2121
{
2222
/**
2323
* Return the {@link EnumConstant} with the given name, or return null if no such constant exists.

api/src/main/java/org/jboss/forge/roaster/model/JavaRecord.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
public interface JavaRecord<O extends JavaRecord<O>> extends
1212
JavaType<O>,
1313
MethodHolder<O>,
14+
InitializerHolder<O>,
1415
TypeHolder<O>,
1516
InterfaceCapable
1617
{
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package org.jboss.forge.roaster.model.source;
2+
3+
import java.util.List;
4+
5+
import org.jboss.forge.roaster.model.Initializer;
6+
import org.jboss.forge.roaster.model.InitializerHolder;
7+
8+
/**
9+
* Represents a {@link JavaSource} that may declare initializers.
10+
*/
11+
public interface InitializerHolderSource<O extends JavaSource<O>> extends InitializerHolder<O>, MemberHolderSource<O> {
12+
13+
/**
14+
* Get a {@link List} of all {@link InitializerSource}s declared by this {@link O} instance, if any; otherwise return an
15+
* empty {@link List}
16+
*/
17+
@Override
18+
List<InitializerSource<O>> getInitializers();
19+
20+
/**
21+
* Add an uninitialized {@link InitializerSource} declaration to this {@link O} instance. This {@link InitializerSource} will
22+
* be a stub until further modified.
23+
*/
24+
InitializerSource<O> addInitializer();
25+
26+
/**
27+
* Add a new {@link InitializerSource} declaration to this {@link O} instance, using the given {@link String} as the
28+
* initializer declaration.
29+
* <p/>
30+
* <strong>For example:</strong><br>
31+
* <code>Initializer initializer = javaClass.addInitializer("static { System.out.println(\"Hello\") }")</code>
32+
*/
33+
InitializerSource<O> addInitializer(final String body);
34+
35+
/**
36+
* Remove the given {@link InitializerSource} declaration from this {@link O} instance, if it exists; otherwise, do
37+
* nothing.
38+
*/
39+
O removeInitializer(final Initializer<O, ?> initializer);
40+
41+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.jboss.forge.roaster.model.source;
2+
3+
import org.jboss.forge.roaster.model.Initializer;
4+
5+
/**
6+
* Represents a Java initializer in source form.
7+
*/
8+
public interface InitializerSource<O extends JavaSource<O>> extends Initializer<O, InitializerSource<O>>,
9+
JavaDocCapableSource<InitializerSource<O>>, StaticCapableSource<InitializerSource<O>>, LocationCapable {
10+
11+
/**
12+
* Set the inner body of this {@link Initializer}
13+
*/
14+
InitializerSource<O> setBody(String body);
15+
16+
}

api/src/main/java/org/jboss/forge/roaster/model/source/JavaClassSource.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public interface JavaClassSource extends JavaClass<JavaClassSource>,
2222
GenericCapableSource<JavaClassSource, JavaClassSource>,
2323
ExtendableSource<JavaClassSource>,
2424
AbstractableSource<JavaClassSource>,
25+
InitializerHolderSource<JavaClassSource>,
2526
PropertyHolderSource<JavaClassSource>,
2627
TypeHolderSource<JavaClassSource>,
2728
FinalCapableSource<JavaClassSource>,

api/src/main/java/org/jboss/forge/roaster/model/source/JavaEnumSource.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
*/
2222
public interface JavaEnumSource extends JavaEnum<JavaEnumSource>, JavaSource<JavaEnumSource>,
2323
InterfaceCapableSource<JavaEnumSource>,
24+
InitializerHolderSource<JavaEnumSource>,
2425
PropertyHolderSource<JavaEnumSource>, TypeHolderSource<JavaEnumSource>, StaticCapableSource<JavaEnumSource>
2526
{
2627
/**

api/src/main/java/org/jboss/forge/roaster/model/source/JavaRecordSource.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public interface JavaRecordSource extends
99
JavaSource<JavaRecordSource>,
1010
JavaRecord<JavaRecordSource>,
1111
MethodHolderSource<JavaRecordSource>,
12+
InitializerHolderSource<JavaRecordSource>,
1213
TypeHolderSource<JavaRecordSource>,
1314
InterfaceCapableSource<JavaRecordSource>
1415
{

0 commit comments

Comments
 (0)