Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions api/src/main/java/org/jboss/forge/roaster/model/Initializer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.jboss.forge.roaster.model;

import org.jboss.forge.roaster.Internal;
import org.jboss.forge.roaster.Origin;

/**
* Represents a initializer of a {@link JavaClass}, {@link JavaRecord} or {@link JavaEnum}.
*/
public interface Initializer<O extends JavaType<O>, T extends Initializer<O, T>> extends StaticCapable, Internal, Origin<O> {

/**
* Get the inner body of this {@link Initializer}
*/
String getBody();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.jboss.forge.roaster.model;

import java.util.List;

/**
* Represents a {@link JavaType} that may define initializers.
*/
public interface InitializerHolder<O extends JavaType<O>> {

/**
* Get a {@link List} of all {@link Initializer}s declared by this {@link O} instance, if any; otherwise return an empty
* {@link List}
*/
List<? extends Initializer<O, ?>> getInitializers();

/**
* Return true if this {@link O} instance has the provided {@link Initializer}; otherwise false.
*/
boolean hasInitializer(Initializer<O, ?> initializer);

}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
public interface JavaClass<O extends JavaClass<O>> extends
JavaType<O>,
PropertyHolder<O>,
InitializerHolder<O>,
GenericCapable<O>,
Extendable<O>,
Abstractable,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
public interface JavaEnum<O extends JavaEnum<O>> extends JavaType<O>, PropertyHolder<O>, TypeHolder<O>, StaticCapable
public interface JavaEnum<O extends JavaEnum<O>> extends JavaType<O>, PropertyHolder<O>, InitializerHolder<O>, TypeHolder<O>, StaticCapable
{
/**
* Return the {@link EnumConstant} with the given name, or return null if no such constant exists.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
public interface JavaRecord<O extends JavaRecord<O>> extends
JavaType<O>,
MethodHolder<O>,
InitializerHolder<O>,
TypeHolder<O>,
InterfaceCapable
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package org.jboss.forge.roaster.model.source;

import java.util.List;

import org.jboss.forge.roaster.model.Initializer;
import org.jboss.forge.roaster.model.InitializerHolder;

/**
* Represents a {@link JavaSource} that may declare initializers.
*/
public interface InitializerHolderSource<O extends JavaSource<O>> extends InitializerHolder<O>, MemberHolderSource<O> {

/**
* Get a {@link List} of all {@link InitializerSource}s declared by this {@link O} instance, if any; otherwise return an
* empty {@link List}
*/
@Override
List<InitializerSource<O>> getInitializers();

/**
* Add an uninitialized {@link InitializerSource} declaration to this {@link O} instance. This {@link InitializerSource} will
* be a stub until further modified.
*/
InitializerSource<O> addInitializer();

/**
* Add a new {@link InitializerSource} declaration to this {@link O} instance, using the given {@link String} as the
* initializer declaration.
* <p/>
* <strong>For example:</strong><br>
* <code>Initializer initializer = javaClass.addInitializer("static { System.out.println(\"Hello\") }")</code>
*/
InitializerSource<O> addInitializer(final String body);

/**
* Remove the given {@link InitializerSource} declaration from this {@link O} instance, if it exists; otherwise, do
* nothing.
*/
O removeInitializer(final Initializer<O, ?> initializer);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.jboss.forge.roaster.model.source;

import org.jboss.forge.roaster.model.Initializer;

/**
* Represents a Java initializer in source form.
*/
public interface InitializerSource<O extends JavaSource<O>> extends Initializer<O, InitializerSource<O>>,
JavaDocCapableSource<InitializerSource<O>>, StaticCapableSource<InitializerSource<O>>, LocationCapable {

/**
* Set the inner body of this {@link Initializer}
*/
InitializerSource<O> setBody(String body);

}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public interface JavaClassSource extends JavaClass<JavaClassSource>,
GenericCapableSource<JavaClassSource, JavaClassSource>,
ExtendableSource<JavaClassSource>,
AbstractableSource<JavaClassSource>,
InitializerHolderSource<JavaClassSource>,
PropertyHolderSource<JavaClassSource>,
TypeHolderSource<JavaClassSource>,
FinalCapableSource<JavaClassSource>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
*/
public interface JavaEnumSource extends JavaEnum<JavaEnumSource>, JavaSource<JavaEnumSource>,
InterfaceCapableSource<JavaEnumSource>,
InitializerHolderSource<JavaEnumSource>,
PropertyHolderSource<JavaEnumSource>, TypeHolderSource<JavaEnumSource>, StaticCapableSource<JavaEnumSource>
{
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public interface JavaRecordSource extends
JavaSource<JavaRecordSource>,
JavaRecord<JavaRecordSource>,
MethodHolderSource<JavaRecordSource>,
InitializerHolderSource<JavaRecordSource>,
TypeHolderSource<JavaRecordSource>,
InterfaceCapableSource<JavaRecordSource>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package org.jboss.forge.roaster.model.ast;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
import org.eclipse.jdt.core.dom.BodyDeclaration;
import org.eclipse.jdt.core.dom.Initializer;
import org.jboss.forge.roaster.model.impl.InitializerImpl;
import org.jboss.forge.roaster.model.source.InitializerSource;
import org.jboss.forge.roaster.model.source.JavaSource;

public final class InitializerAccessor
{

@SuppressWarnings("unchecked")
public static <O extends JavaSource<O>> List<InitializerSource<O>> getInitializers(O origin,
AbstractTypeDeclaration declaration)
{

List<InitializerSource<O>> result = new ArrayList<>();
List<BodyDeclaration> bodyDeclarations = declaration.bodyDeclarations();
for (BodyDeclaration bodyDeclaration : bodyDeclarations)
{
if (bodyDeclaration instanceof Initializer)
{
Initializer initializer = (Initializer) bodyDeclaration;
result.add(new InitializerImpl<>(origin, initializer));
}
}
return Collections.unmodifiableList(result);
}

public static <O extends JavaSource<O>> boolean hasInitializer(AbstractTypeDeclaration declaration,
org.jboss.forge.roaster.model.Initializer<?, ?> initializer)
{
return declaration.bodyDeclarations().contains(initializer.getInternal());
}

@SuppressWarnings("unchecked")
public static <O extends JavaSource<O>> InitializerSource<O> addInitializer(O origin,
AbstractTypeDeclaration declaration)
{
InitializerImpl<O> init = new InitializerImpl<>(origin);
declaration.bodyDeclarations().add(init.getInternal());
return init;
}

@SuppressWarnings("unchecked")
public static <O extends JavaSource<O>> InitializerSource<O> addInitializer(O origin,
AbstractTypeDeclaration declaration, String initializer)
{
InitializerImpl<O> init = new InitializerImpl<>(origin, initializer);
declaration.bodyDeclarations().add(init.getInternal());
return init;
}

public static void removeInitializer(AbstractTypeDeclaration declaration,
org.jboss.forge.roaster.model.Initializer<?, ?> initializer)
{
declaration.bodyDeclarations().remove(initializer.getInternal());
}

}
Loading