Skip to content

Commit

Permalink
JAVA-2134: Extract generation of overriding methods
Browse files Browse the repository at this point in the history
  • Loading branch information
olim7t committed Jun 21, 2019
1 parent c0e61c7 commit f5e7f9b
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 48 deletions.
Expand Up @@ -26,12 +26,12 @@
import com.datastax.oss.driver.internal.mapper.processor.MethodGenerator;
import com.datastax.oss.driver.internal.mapper.processor.ProcessorContext;
import com.datastax.oss.driver.internal.mapper.processor.SkipGenerationException;
import com.datastax.oss.driver.internal.mapper.processor.util.generation.GeneratedCodePatterns;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.MethodSpec;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.DeclaredType;
Expand Down Expand Up @@ -170,15 +170,7 @@ public MethodSpec.Builder generate() {
String helperFieldName =
daoImplementationGenerator.addEntityHelperField(ClassName.get(entityElement));

MethodSpec.Builder overridingMethodBuilder =
MethodSpec.methodBuilder(methodElement.getSimpleName().toString())
.addAnnotation(Override.class)
.addModifiers(Modifier.PUBLIC)
.returns(ClassName.get(methodElement.getReturnType()));
for (VariableElement parameterElement : methodElement.getParameters()) {
overridingMethodBuilder.addParameter(
ClassName.get(parameterElement.asType()), parameterElement.getSimpleName().toString());
}
MethodSpec.Builder overridingMethodBuilder = GeneratedCodePatterns.override(methodElement);
switch (transformation) {
case NONE:
overridingMethodBuilder.addStatement("return $L.get($L)", helperFieldName, parameterName);
Expand Down
Expand Up @@ -33,7 +33,6 @@
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.DeclaredType;
Expand Down Expand Up @@ -154,16 +153,7 @@ public MethodSpec.Builder generate() {
(methodBuilder, requestName) ->
generatePrepareRequest(methodBuilder, requestName, helperFieldName));

MethodSpec.Builder insertBuilder =
MethodSpec.methodBuilder(methodElement.getSimpleName().toString())
.addAnnotation(Override.class)
.addModifiers(Modifier.PUBLIC)
.returns(ClassName.get(methodElement.getReturnType()));
List<? extends VariableElement> parameters = methodElement.getParameters();
for (VariableElement parameterElement : parameters) {
insertBuilder.addParameter(
ClassName.get(parameterElement.asType()), parameterElement.getSimpleName().toString());
}
MethodSpec.Builder insertBuilder = GeneratedCodePatterns.override(methodElement);

if (isAsync) {
insertBuilder.beginControlFlow("try");
Expand All @@ -173,6 +163,7 @@ public MethodSpec.Builder generate() {
BoundStatementBuilder.class,
statementName);

List<? extends VariableElement> parameters = methodElement.getParameters();
String entityParameterName = parameters.get(0).getSimpleName().toString();
insertBuilder.addStatement(
"$L.set($L, boundStatementBuilder)", helperFieldName, entityParameterName);
Expand Down
Expand Up @@ -21,12 +21,12 @@
import com.datastax.oss.driver.internal.mapper.processor.MethodGenerator;
import com.datastax.oss.driver.internal.mapper.processor.ProcessorContext;
import com.datastax.oss.driver.internal.mapper.processor.SkipGenerationException;
import com.datastax.oss.driver.internal.mapper.processor.util.generation.GeneratedCodePatterns;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.MethodSpec;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.DeclaredType;
Expand Down Expand Up @@ -118,23 +118,13 @@ public MethodSpec.Builder generate() {
String helperFieldName =
daoImplementationGenerator.addEntityHelperField(ClassName.get(entityElement));

MethodSpec.Builder overridingMethodBuilder =
MethodSpec.methodBuilder(methodElement.getSimpleName().toString())
.addAnnotation(Override.class)
.addModifiers(Modifier.PUBLIC)
.returns(ClassName.get(methodElement.getReturnType()));
for (VariableElement parameterElement : methodElement.getParameters()) {
overridingMethodBuilder.addParameter(
ClassName.get(parameterElement.asType()), parameterElement.getSimpleName().toString());
}
// Forward to the base injector in the helper:
overridingMethodBuilder.addStatement(
"$L$L.set($L, $L)",
isVoid ? "" : "return ",
helperFieldName,
entityParameterName,
targetParameterName);

return overridingMethodBuilder;
return GeneratedCodePatterns.override(methodElement)
.addStatement(
"$L$L.set($L, $L)",
isVoid ? "" : "return ",
helperFieldName,
entityParameterName,
targetParameterName);
}
}
Expand Up @@ -24,6 +24,7 @@
import com.datastax.oss.driver.internal.mapper.processor.ProcessorContext;
import com.datastax.oss.driver.internal.mapper.processor.SkipGenerationException;
import com.datastax.oss.driver.internal.mapper.processor.util.NameIndex;
import com.datastax.oss.driver.internal.mapper.processor.util.generation.GeneratedCodePatterns;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.FieldSpec;
import com.squareup.javapoet.MethodSpec;
Expand Down Expand Up @@ -132,15 +133,8 @@ public void addMembers(TypeSpec.Builder classBuilder) {
FieldSpec.builder(returnTypeName, fieldName, Modifier.PRIVATE, Modifier.FINAL).build());
}

MethodSpec.Builder overridingMethodBuilder =
MethodSpec.methodBuilder(methodElement.getSimpleName().toString())
.addAnnotation(Override.class)
.addModifiers(Modifier.PUBLIC)
.returns(returnTypeName);
for (VariableElement parameterElement : methodElement.getParameters()) {
overridingMethodBuilder.addParameter(
ClassName.get(parameterElement.asType()), parameterElement.getSimpleName().toString());
}
MethodSpec.Builder overridingMethodBuilder = GeneratedCodePatterns.override(methodElement);

if (isCachedByKeyspaceAndTable) {
// DaoCacheKey key = new DaoCacheKey(x, y)
// where x, y is either the name of the parameter or "(CqlIdentifier)null"
Expand Down
Expand Up @@ -35,6 +35,8 @@
import java.beans.Introspector;
import java.util.List;
import java.util.Map;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.VariableElement;

/** A collection of recurring patterns in our generated sources. */
Expand All @@ -54,6 +56,20 @@ public class GeneratedCodePatterns {
.put(TypeName.LONG, "Long")
.build();

/** Starts the generation of a method that overrides an interface method. */
public static MethodSpec.Builder override(ExecutableElement interfaceMethod) {
MethodSpec.Builder result =
MethodSpec.methodBuilder(interfaceMethod.getSimpleName().toString())
.addAnnotation(Override.class)
.addModifiers(Modifier.PUBLIC)
.returns(ClassName.get(interfaceMethod.getReturnType()));
for (VariableElement parameterElement : interfaceMethod.getParameters()) {
result.addParameter(
ClassName.get(parameterElement.asType()), parameterElement.getSimpleName().toString());
}
return result;
}

/**
* Treats a list of method parameters as bind variables in a query.
*
Expand Down

0 comments on commit f5e7f9b

Please sign in to comment.