forked from highsource/jaxb-tools
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Issue highsource#11. Large refactoring, using the bridge pattern to s…
…eparate code generation abstraction and implementor.
- Loading branch information
1 parent
6438f4b
commit 906068b
Showing
56 changed files
with
1,576 additions
and
1,391 deletions.
There are no files selected for viewing
32 changes: 32 additions & 0 deletions
32
...main/java/org/jvnet/jaxb2_commons/plugin/simple/codegeneration/AbstractCodeGenerator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
package org.jvnet.jaxb2_commons.plugin.simple.codegeneration; | ||
|
||
import org.apache.commons.lang3.Validate; | ||
|
||
import com.sun.codemodel.JCodeModel; | ||
|
||
public abstract class AbstractCodeGenerator<A extends Arguments> implements | ||
CodeGenerator<A> { | ||
|
||
private final CodeGenerator<A> codeGenerator; | ||
private final CodeGenerationImplementor<A> implementor; | ||
private final JCodeModel codeModel; | ||
|
||
public AbstractCodeGenerator(CodeGenerator<A> codeGenerator, | ||
CodeGenerationImplementor<A> implementor) { | ||
this.codeGenerator = Validate.notNull(codeGenerator); | ||
this.implementor = Validate.notNull(implementor); | ||
this.codeModel = implementor.getCodeModel(); | ||
} | ||
|
||
public CodeGenerationImplementor<A> getImplementor() { | ||
return implementor; | ||
} | ||
|
||
public CodeGenerator<A> getCodeGeneratorFactory() { | ||
return codeGenerator; | ||
} | ||
|
||
public JCodeModel getCodeModel() { | ||
return codeModel; | ||
} | ||
} |
5 changes: 5 additions & 0 deletions
5
basic/src/main/java/org/jvnet/jaxb2_commons/plugin/simple/codegeneration/Arguments.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package org.jvnet.jaxb2_commons.plugin.simple.codegeneration; | ||
|
||
public interface Arguments { | ||
|
||
} |
22 changes: 22 additions & 0 deletions
22
...rc/main/java/org/jvnet/jaxb2_commons/plugin/simple/codegeneration/ArrayCodeGenerator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package org.jvnet.jaxb2_commons.plugin.simple.codegeneration; | ||
|
||
import java.util.Collection; | ||
|
||
import com.sun.codemodel.JBlock; | ||
import com.sun.codemodel.JType; | ||
|
||
public class ArrayCodeGenerator<A extends Arguments> extends | ||
AbstractCodeGenerator<A> { | ||
|
||
public ArrayCodeGenerator(CodeGenerator<A> codeGenerator, | ||
CodeGenerationImplementor<A> implementor) { | ||
super(codeGenerator, implementor); | ||
} | ||
|
||
@Override | ||
public void append(JBlock block, JType type, | ||
Collection<JType> possibleTypes, boolean isAlwaysSet, A arguments) { | ||
getImplementor().onArray(block, isAlwaysSet, arguments); | ||
} | ||
|
||
} |
22 changes: 22 additions & 0 deletions
22
.../main/java/org/jvnet/jaxb2_commons/plugin/simple/codegeneration/BooleanCodeGenerator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package org.jvnet.jaxb2_commons.plugin.simple.codegeneration; | ||
|
||
import java.util.Collection; | ||
|
||
import com.sun.codemodel.JBlock; | ||
import com.sun.codemodel.JType; | ||
|
||
public class BooleanCodeGenerator<A extends Arguments> extends | ||
AbstractCodeGenerator<A> { | ||
|
||
public BooleanCodeGenerator(CodeGenerator<A> codeGenerator, | ||
CodeGenerationImplementor<A> implementor) { | ||
super(codeGenerator, implementor); | ||
} | ||
|
||
@Override | ||
public void append(JBlock block, JType type, | ||
Collection<JType> possibleTypes, boolean isAlwaysSet, A arguments) { | ||
getImplementor().onBoolean(arguments, block, isAlwaysSet); | ||
} | ||
|
||
} |
22 changes: 22 additions & 0 deletions
22
...src/main/java/org/jvnet/jaxb2_commons/plugin/simple/codegeneration/ByteCodeGenerator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package org.jvnet.jaxb2_commons.plugin.simple.codegeneration; | ||
|
||
import java.util.Collection; | ||
|
||
import com.sun.codemodel.JBlock; | ||
import com.sun.codemodel.JType; | ||
|
||
public class ByteCodeGenerator<A extends Arguments> extends | ||
AbstractCodeGenerator<A> { | ||
|
||
public ByteCodeGenerator(CodeGenerator<A> codeGenerator, | ||
CodeGenerationImplementor<A> implementor) { | ||
super(codeGenerator, implementor); | ||
} | ||
|
||
@Override | ||
public void append(JBlock block, JType type, | ||
Collection<JType> possibleTypes, boolean isAlwaysSet, A arguments) { | ||
getImplementor().onByte(arguments, block, isAlwaysSet); | ||
} | ||
|
||
} |
22 changes: 22 additions & 0 deletions
22
...src/main/java/org/jvnet/jaxb2_commons/plugin/simple/codegeneration/CharCodeGenerator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package org.jvnet.jaxb2_commons.plugin.simple.codegeneration; | ||
|
||
import java.util.Collection; | ||
|
||
import com.sun.codemodel.JBlock; | ||
import com.sun.codemodel.JType; | ||
|
||
public class CharCodeGenerator<A extends Arguments> extends | ||
AbstractCodeGenerator<A> { | ||
|
||
public CharCodeGenerator(CodeGenerator<A> codeGenerator, | ||
CodeGenerationImplementor<A> implementor) { | ||
super(codeGenerator, implementor); | ||
} | ||
|
||
@Override | ||
public void append(JBlock block, JType type, | ||
Collection<JType> possibleTypes, boolean isAlwaysSet, A arguments) { | ||
getImplementor().onChar(arguments, block, isAlwaysSet); | ||
} | ||
|
||
} |
108 changes: 108 additions & 0 deletions
108
.../java/org/jvnet/jaxb2_commons/plugin/simple/codegeneration/CodeGenerationAbstraction.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
package org.jvnet.jaxb2_commons.plugin.simple.codegeneration; | ||
|
||
import java.util.Collection; | ||
import java.util.LinkedHashMap; | ||
import java.util.List; | ||
import java.util.Map; | ||
import java.util.Map.Entry; | ||
|
||
import javax.xml.bind.JAXBElement; | ||
|
||
import org.apache.commons.lang3.Validate; | ||
import org.jvnet.jaxb2_commons.codemodel.JCMType; | ||
import org.jvnet.jaxb2_commons.codemodel.JCMTypeFactory; | ||
|
||
import com.sun.codemodel.JBlock; | ||
import com.sun.codemodel.JCodeModel; | ||
import com.sun.codemodel.JType; | ||
|
||
public class CodeGenerationAbstraction<A extends Arguments> implements | ||
CodeGenerator<A> { | ||
|
||
private final JCodeModel codeModel; | ||
private final JCMTypeFactory typeFactory; | ||
// Known code generators | ||
private final Map<JCMType<?>, CodeGenerator<A>> codeGenerators = new LinkedHashMap<JCMType<?>, CodeGenerator<A>>(); | ||
private final CodeGenerator<A> defaultCodeGenerator; | ||
|
||
private final CodeGenerationImplementor<A> implementor; | ||
|
||
public CodeGenerationAbstraction(CodeGenerationImplementor<A> generationImplementor) { | ||
|
||
this.implementor = Validate.notNull(generationImplementor); | ||
this.codeModel = generationImplementor.getCodeModel(); | ||
this.typeFactory = generationImplementor.getTypeFactory(); | ||
|
||
addCodeGenerator(this.codeModel.BOOLEAN, new BooleanCodeGenerator<A>( | ||
this, this.implementor)); | ||
addCodeGenerator(this.codeModel.BYTE, new ByteCodeGenerator<A>(this, | ||
this.implementor)); | ||
addCodeGenerator(this.codeModel.CHAR, new CharCodeGenerator<A>(this, | ||
this.implementor)); | ||
addCodeGenerator(this.codeModel.DOUBLE, new DoubleCodeGenerator<A>( | ||
this, this.implementor)); | ||
addCodeGenerator(this.codeModel.FLOAT, new FloatCodeGenerator<A>(this, | ||
this.implementor)); | ||
addCodeGenerator(this.codeModel.LONG, new LongCodeGenerator<A>(this, | ||
this.implementor)); | ||
addCodeGenerator(this.codeModel.INT, new IntCodeGenerator<A>(this, | ||
this.implementor)); | ||
addCodeGenerator(this.codeModel.SHORT, new ShortCodeGenerator<A>(this, | ||
this.implementor)); | ||
|
||
addCodeGenerator(this.codeModel.BOOLEAN.array(), | ||
new ArrayCodeGenerator<A>(this, this.implementor)); | ||
addCodeGenerator(this.codeModel.BYTE.array(), | ||
new ArrayCodeGenerator<A>(this, this.implementor)); | ||
addCodeGenerator(this.codeModel.SHORT.array(), | ||
new ArrayCodeGenerator<A>(this, this.implementor)); | ||
addCodeGenerator(this.codeModel.CHAR.array(), | ||
new ArrayCodeGenerator<A>(this, this.implementor)); | ||
addCodeGenerator(this.codeModel.INT.array(), new ArrayCodeGenerator<A>( | ||
this, this.implementor)); | ||
addCodeGenerator(this.codeModel.FLOAT.array(), | ||
new ArrayCodeGenerator<A>(this, this.implementor)); | ||
addCodeGenerator(this.codeModel.LONG.array(), | ||
new ArrayCodeGenerator<A>(this, this.implementor)); | ||
addCodeGenerator(this.codeModel.DOUBLE.array(), | ||
new ArrayCodeGenerator<A>(this, this.implementor)); | ||
addCodeGenerator(this.codeModel.ref(Object.class).array(), | ||
new ArrayCodeGenerator<A>(this, this.implementor)); | ||
|
||
addCodeGenerator( | ||
this.codeModel.ref(JAXBElement.class).narrow(Object.class), | ||
new JAXBElementCodeGenerator<A>(this, this.implementor)); | ||
|
||
addCodeGenerator(this.codeModel.ref(List.class).narrow(Object.class), | ||
new ListCodeGenerator<A>(this, this.implementor)); | ||
|
||
addCodeGenerator(this.codeModel.ref(Object.class), | ||
new ObjectCodeGenerator<A>(this, this.implementor)); | ||
defaultCodeGenerator = new ObjectCodeGenerator<A>(this, | ||
this.implementor); | ||
} | ||
|
||
private void addCodeGenerator(final JType type, | ||
CodeGenerator<A> codeGenerator) { | ||
final JCMType<?> factoredType = typeFactory.create(type); | ||
this.codeGenerators.put(factoredType, codeGenerator); | ||
} | ||
|
||
private CodeGenerator<A> getCodeGenerator(JType type) { | ||
final JCMType<JType> factoredType = typeFactory.create(type); | ||
for (Entry<JCMType<?>, CodeGenerator<A>> entry : codeGenerators | ||
.entrySet()) { | ||
if (entry.getKey().matches(factoredType)) { | ||
return entry.getValue(); | ||
} | ||
} | ||
return defaultCodeGenerator; | ||
} | ||
|
||
@Override | ||
public void append(JBlock block, JType type, | ||
Collection<JType> possibleTypes, boolean isAlwaysSet, A arguments) { | ||
getCodeGenerator(type).append(block, type, possibleTypes, isAlwaysSet, | ||
arguments); | ||
} | ||
} |
55 changes: 55 additions & 0 deletions
55
.../java/org/jvnet/jaxb2_commons/plugin/simple/codegeneration/CodeGenerationImplementor.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
package org.jvnet.jaxb2_commons.plugin.simple.codegeneration; | ||
|
||
import java.util.Collection; | ||
|
||
import org.jvnet.jaxb2_commons.codemodel.JCMTypeFactory; | ||
import org.jvnet.jaxb2_commons.codemodel.JConditionable; | ||
|
||
import com.sun.codemodel.JBlock; | ||
import com.sun.codemodel.JCodeModel; | ||
import com.sun.codemodel.JType; | ||
|
||
public interface CodeGenerationImplementor<A extends Arguments> { | ||
|
||
public JCodeModel getCodeModel(); | ||
|
||
public JCMTypeFactory getTypeFactory(); | ||
|
||
public void onArray(JBlock block, boolean isAlwaysSet, A arguments); | ||
|
||
public void onBoolean(A arguments, JBlock block, boolean isAlwaysSet); | ||
|
||
public void onByte(A arguments, JBlock block, boolean isAlwaysSet); | ||
|
||
public void onChar(A arguments, JBlock block, boolean isAlwaysSet); | ||
|
||
public void onDouble(A arguments, JBlock block, boolean isAlwaysSet); | ||
|
||
public void onFloat(A arguments, JBlock block, boolean isAlwaysSet); | ||
|
||
public void onInt(A arguments, JBlock block, boolean isAlwaysSet); | ||
|
||
public void onLong(A arguments, JBlock block, boolean isAlwaysSet); | ||
|
||
public void onShort(A arguments, JBlock block, boolean isAlwaysSet); | ||
|
||
public void onObject(A arguments, JBlock block, boolean isAlwaysSet); | ||
|
||
// (JBlock block, JType type, Collection<JType> possibleTypes, | ||
// boolean isAlwaysSet, A arguments) | ||
public void onJAXBElement(CodeGenerator<A> codeGenerator, JBlock block, | ||
JType valueType, Collection<JType> possibleValueTypes, | ||
boolean isAlwaysSet, A arguments); | ||
|
||
public void onList(CodeGenerator<A> codeGenerator, JBlock block, | ||
JType elementType, Collection<JType> possibleElementTypes, | ||
boolean isAlwaysSet, A arguments); | ||
|
||
public void onIfArray(CodeGenerator<A> codeGeneratorFactory, | ||
JConditionable _if, JType arrayType, A arguments); | ||
|
||
public void onIfJAXBElement(CodeGenerator<A> codeGenerator, | ||
JConditionable _if, JType jaxbElementType, | ||
Collection<JType> possibleJAXBElementTypes, A arguments); | ||
|
||
} |
12 changes: 12 additions & 0 deletions
12
basic/src/main/java/org/jvnet/jaxb2_commons/plugin/simple/codegeneration/CodeGenerator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package org.jvnet.jaxb2_commons.plugin.simple.codegeneration; | ||
|
||
import java.util.Collection; | ||
|
||
import com.sun.codemodel.JBlock; | ||
import com.sun.codemodel.JType; | ||
|
||
public interface CodeGenerator<A extends Arguments> { | ||
|
||
public void append(JBlock block, JType type, Collection<JType> possibleTypes, | ||
boolean isAlwaysSet, A arguments); | ||
} |
22 changes: 22 additions & 0 deletions
22
...c/main/java/org/jvnet/jaxb2_commons/plugin/simple/codegeneration/DoubleCodeGenerator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package org.jvnet.jaxb2_commons.plugin.simple.codegeneration; | ||
|
||
import java.util.Collection; | ||
|
||
import com.sun.codemodel.JBlock; | ||
import com.sun.codemodel.JType; | ||
|
||
public class DoubleCodeGenerator<A extends Arguments> extends | ||
AbstractCodeGenerator<A> { | ||
|
||
public DoubleCodeGenerator(CodeGenerator<A> codeGenerator, | ||
CodeGenerationImplementor<A> implementor) { | ||
super(codeGenerator, implementor); | ||
} | ||
|
||
@Override | ||
public void append(JBlock block, JType type, | ||
Collection<JType> possibleTypes, boolean isAlwaysSet, A arguments) { | ||
getImplementor().onDouble(arguments, block, isAlwaysSet); | ||
} | ||
|
||
} |
22 changes: 22 additions & 0 deletions
22
...rc/main/java/org/jvnet/jaxb2_commons/plugin/simple/codegeneration/FloatCodeGenerator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package org.jvnet.jaxb2_commons.plugin.simple.codegeneration; | ||
|
||
import java.util.Collection; | ||
|
||
import com.sun.codemodel.JBlock; | ||
import com.sun.codemodel.JType; | ||
|
||
public class FloatCodeGenerator<A extends Arguments> extends | ||
AbstractCodeGenerator<A> { | ||
|
||
public FloatCodeGenerator(CodeGenerator<A> codeGenerator, | ||
CodeGenerationImplementor<A> implementor) { | ||
super(codeGenerator, implementor); | ||
} | ||
|
||
@Override | ||
public void append(JBlock block, JType type, | ||
Collection<JType> possibleTypes, boolean isAlwaysSet, A arguments) { | ||
getImplementor().onShort(arguments, block, isAlwaysSet); | ||
} | ||
|
||
} |
22 changes: 22 additions & 0 deletions
22
.../src/main/java/org/jvnet/jaxb2_commons/plugin/simple/codegeneration/IntCodeGenerator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package org.jvnet.jaxb2_commons.plugin.simple.codegeneration; | ||
|
||
import java.util.Collection; | ||
|
||
import com.sun.codemodel.JBlock; | ||
import com.sun.codemodel.JType; | ||
|
||
public class IntCodeGenerator<A extends Arguments> extends | ||
AbstractCodeGenerator<A> { | ||
|
||
public IntCodeGenerator(CodeGenerator<A> codeGenerator, | ||
CodeGenerationImplementor<A> implementor) { | ||
super(codeGenerator, implementor); | ||
} | ||
|
||
@Override | ||
public void append(JBlock block, JType type, | ||
Collection<JType> possibleTypes, boolean isAlwaysSet, A arguments) { | ||
getImplementor().onInt(arguments, block, isAlwaysSet); | ||
} | ||
|
||
} |
Oops, something went wrong.