Package org.derive4j.processor
Class DeriveUtilsImpl
- java.lang.Object
-
- org.derive4j.processor.DeriveUtilsImpl
-
- All Implemented Interfaces:
DeriveUtils
final class DeriveUtilsImpl extends java.lang.Object implements DeriveUtils
-
-
Field Summary
Fields Modifier and Type Field Description private DeriveConfigBuilder
deriveConfigBuilder
private java.util.function.Function<Flavour,java.util.Optional<EitherModel>>
eitherModel
private javax.lang.model.util.Elements
Elements
private java.util.function.Function<Flavour,SamInterface>
function0Model
private java.util.function.Function<Flavour,SamInterface>
function1Model
private ObjectModel
objectModel
private java.util.function.Function<Flavour,OptionModel>
optionModel
private javax.lang.model.util.Types
Types
-
Constructor Summary
Constructors Constructor Description DeriveUtilsImpl(javax.lang.model.util.Elements Elements, javax.lang.model.util.Types Types, DeriveConfigBuilder deriveConfigBuilder)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private boolean
abstractMethod(javax.lang.model.element.ExecutableElement e)
java.util.List<javax.lang.model.element.ExecutableElement>
allAbstractMethods(javax.lang.model.element.TypeElement typeElement)
java.util.List<javax.lang.model.element.ExecutableElement>
allAbstractMethods(javax.lang.model.type.DeclaredType declaredType)
java.util.stream.Stream<javax.lang.model.element.VariableElement>
allStaticFields(javax.lang.model.element.TypeElement typeElement)
java.util.stream.Stream<javax.lang.model.element.ExecutableElement>
allStaticMethods(javax.lang.model.element.TypeElement typeElement)
private java.util.stream.Stream<java.lang.String>
allTypeArgsAsString(javax.lang.model.type.TypeMirror tm)
java.util.Optional<javax.lang.model.type.DeclaredType>
asDeclaredType(javax.lang.model.type.TypeMirror typeMirror)
private com.squareup.javapoet.CodeBlock
asTypeArguments(java.util.stream.Stream<? extends javax.lang.model.type.TypeMirror> typeVariables)
java.util.Optional<javax.lang.model.element.TypeElement>
asTypeElement(javax.lang.model.type.TypeMirror typeMirror)
java.lang.String
capitalize(java.lang.CharSequence string)
private java.util.Optional<EitherModel>
eitherModel(java.lang.String eitherClassQualifiedName, java.lang.String leftConstructor, java.lang.String rightConstructor)
java.util.Optional<EitherModel>
eitherModel(Flavour flavour)
javax.lang.model.util.Elements
elements()
private java.util.Optional<InstanceLocation>
findCompiledInstance(javax.lang.model.element.TypeElement typeElementContext, javax.lang.model.element.TypeElement typeClass, javax.lang.model.element.TypeElement typeElement, javax.lang.model.type.DeclaredType declaredType, java.util.List<javax.lang.model.element.TypeElement> lowPriorityProviders, java.util.Optional<com.squareup.javapoet.ClassName> deriveTarget, java.util.Optional<com.squareup.javapoet.ClassName> deriveTargetExtend, java.util.Optional<com.squareup.javapoet.ClassName> contextExtend)
private java.util.function.Function<javax.lang.model.element.TypeElement,java.util.stream.Stream<InstanceLocation>>
findCompiledInstanceIn(javax.lang.model.element.TypeElement typeElement, javax.lang.model.type.DeclaredType declaredType, java.util.Optional<com.squareup.javapoet.ClassName> deriveTarget, javax.lang.model.type.TypeMirror rawTypeClass)
private java.util.Optional<javax.lang.model.type.DeclaredType>
findFirstDeclaredTypeOf(javax.lang.model.element.TypeElement typeElement, javax.lang.model.type.TypeMirror inType)
java.util.Optional<InstanceLocation>
findInstance(javax.lang.model.element.TypeElement typeElementContext, com.squareup.javapoet.ClassName typeClassContext, com.squareup.javapoet.ClassName typeClass, javax.lang.model.element.TypeElement typeElement, javax.lang.model.type.DeclaredType declaredType, java.util.List<javax.lang.model.element.TypeElement> lowPriorityProviders)
java.util.Optional<javax.lang.model.element.TypeElement>
findTypeElement(com.squareup.javapoet.ClassName cn)
SamInterface
function0Model(Flavour flavour)
SamInterface
function1Model(Flavour flavour)
private java.lang.String
generatedInstanceMethodName(javax.lang.model.element.TypeElement typeClass, javax.lang.model.element.TypeElement typeElement)
DeriveResult<DerivedCodeSpec>
generateInstance(AlgebraicDataType adt, com.squareup.javapoet.ClassName typeClass, java.util.List<javax.lang.model.element.TypeElement> lowPriorityProviders, java.util.function.Function<InstanceUtils,DerivedCodeSpec> generateInstance)
private static java.util.stream.Stream<javax.lang.model.element.TypeElement>
getSuperTypeElements(javax.lang.model.element.TypeElement e)
DeriveResult<BoundExpression>
instanceInitializer(javax.lang.model.element.TypeElement typeElementContext, com.squareup.javapoet.ClassName typeClassContext, com.squareup.javapoet.ClassName typeClass, javax.lang.model.type.TypeMirror type, java.util.List<javax.lang.model.element.TypeElement> lowPriorityProviders)
private java.lang.String
instanceVariableName(javax.lang.model.element.TypeElement typeClass, javax.lang.model.type.TypeMirror type)
private java.lang.Boolean
isNotIn(java.util.List<FreeVariable> previousVars, FreeVariable var)
boolean
isWildcarded(javax.lang.model.type.TypeMirror typeMirror)
private BoundExpression
join(java.util.function.BinaryOperator<Expression> expressionJoiner, BoundExpression b1, BoundExpression b2)
private FieldsTypeClassInstanceBindingMap
join(FieldsTypeClassInstanceBindingMap b1, FieldsTypeClassInstanceBindingMap b2)
private static Expression
joinAsArgs(Expression e1, Expression e2)
com.squareup.javapoet.CodeBlock
lambdaImpl(DataConstructor constructor, com.squareup.javapoet.CodeBlock impl)
com.squareup.javapoet.CodeBlock
lambdaImpl(DataConstructor constructor, java.lang.String suffix, com.squareup.javapoet.CodeBlock impl)
private OptionModel
lazyOptionModel(java.lang.String optionClassQualifiedName, java.lang.String noneConstructor, java.lang.String someConstructor)
private SamInterface
lazySamInterface(java.lang.String samInterfaceQualifiedName)
private java.util.List<FreeVariable>
merge(java.util.List<FreeVariable> vbs1, java.util.List<FreeVariable> vbs2)
ObjectModel
object()
OptionModel
optionModel(Flavour flavour)
com.squareup.javapoet.MethodSpec.Builder
overrideMethodBuilder(javax.lang.model.element.ExecutableElement abstractMethod, javax.lang.model.type.DeclaredType declaredType)
com.squareup.javapoet.CodeBlock
parameterList(DataConstructor constructor)
com.squareup.javapoet.CodeBlock
parameterList(DataConstructor constructor, java.lang.String suffix)
javax.lang.model.type.DeclaredType
resolve(javax.lang.model.type.DeclaredType declaredType, java.util.function.Function<javax.lang.model.type.TypeVariable,java.util.Optional<javax.lang.model.type.TypeMirror>> typeArgs)
javax.lang.model.type.TypeMirror
resolve(javax.lang.model.type.TypeMirror typeMirror, java.util.function.Function<javax.lang.model.type.TypeVariable,java.util.Optional<javax.lang.model.type.TypeMirror>> typeArgs)
DeriveResult<FieldsTypeClassInstanceBindingMap>
resolveFieldInstances(AlgebraicDataType adt, com.squareup.javapoet.ClassName typeClass, java.util.List<javax.lang.model.element.TypeElement> lowPriorityProviders)
com.squareup.javapoet.TypeName
resolveToTypeName(javax.lang.model.type.TypeMirror typeMirror, java.util.function.Function<javax.lang.model.type.TypeVariable,java.util.Optional<com.squareup.javapoet.TypeName>> typeArgs)
java.util.Optional<SamInterface>
samInterface(java.lang.String qualifiedClassName)
java.util.function.Function<javax.lang.model.type.TypeVariable,java.util.Optional<javax.lang.model.type.TypeMirror>>
typeRestrictions(java.util.List<TypeRestriction> typeRestrictions)
javax.lang.model.util.Types
types()
java.util.List<javax.lang.model.type.TypeVariable>
typeVariablesIn(javax.lang.model.type.TypeMirror typeMirror)
private java.util.stream.Stream<javax.lang.model.type.TypeVariable>
typeVariablesIn0(javax.lang.model.type.TypeMirror typeMirror)
java.lang.String
uncapitalize(java.lang.CharSequence string)
java.util.Optional<java.util.Map<javax.lang.model.type.TypeVariable,javax.lang.model.type.TypeMirror>>
unify(javax.lang.model.type.TypeMirror from, javax.lang.model.type.TypeMirror to)
private java.util.Optional<java.util.HashMap<javax.lang.model.type.TypeVariable,javax.lang.model.type.TypeMirror>>
unify0(javax.lang.model.type.TypeMirror from, javax.lang.model.type.TypeMirror to, java.util.HashMap<javax.lang.model.type.TypeVariable,javax.lang.model.type.TypeMirror> unified)
-
-
-
Field Detail
-
Elements
private final javax.lang.model.util.Elements Elements
-
Types
private final javax.lang.model.util.Types Types
-
deriveConfigBuilder
private final DeriveConfigBuilder deriveConfigBuilder
-
objectModel
private final ObjectModel objectModel
-
function0Model
private final java.util.function.Function<Flavour,SamInterface> function0Model
-
function1Model
private final java.util.function.Function<Flavour,SamInterface> function1Model
-
optionModel
private final java.util.function.Function<Flavour,OptionModel> optionModel
-
eitherModel
private final java.util.function.Function<Flavour,java.util.Optional<EitherModel>> eitherModel
-
-
Constructor Detail
-
DeriveUtilsImpl
DeriveUtilsImpl(javax.lang.model.util.Elements Elements, javax.lang.model.util.Types Types, DeriveConfigBuilder deriveConfigBuilder)
-
-
Method Detail
-
types
public javax.lang.model.util.Types types()
- Specified by:
types
in interfaceDeriveUtils
-
elements
public javax.lang.model.util.Elements elements()
- Specified by:
elements
in interfaceDeriveUtils
-
resolveToTypeName
public com.squareup.javapoet.TypeName resolveToTypeName(javax.lang.model.type.TypeMirror typeMirror, java.util.function.Function<javax.lang.model.type.TypeVariable,java.util.Optional<com.squareup.javapoet.TypeName>> typeArgs)
- Specified by:
resolveToTypeName
in interfaceDeriveUtils
-
typeRestrictions
public java.util.function.Function<javax.lang.model.type.TypeVariable,java.util.Optional<javax.lang.model.type.TypeMirror>> typeRestrictions(java.util.List<TypeRestriction> typeRestrictions)
- Specified by:
typeRestrictions
in interfaceDeriveUtils
-
resolve
public javax.lang.model.type.TypeMirror resolve(javax.lang.model.type.TypeMirror typeMirror, java.util.function.Function<javax.lang.model.type.TypeVariable,java.util.Optional<javax.lang.model.type.TypeMirror>> typeArgs)
- Specified by:
resolve
in interfaceDeriveUtils
-
unify
public java.util.Optional<java.util.Map<javax.lang.model.type.TypeVariable,javax.lang.model.type.TypeMirror>> unify(javax.lang.model.type.TypeMirror from, javax.lang.model.type.TypeMirror to)
- Specified by:
unify
in interfaceDeriveUtils
-
unify0
private java.util.Optional<java.util.HashMap<javax.lang.model.type.TypeVariable,javax.lang.model.type.TypeMirror>> unify0(javax.lang.model.type.TypeMirror from, javax.lang.model.type.TypeMirror to, java.util.HashMap<javax.lang.model.type.TypeVariable,javax.lang.model.type.TypeMirror> unified)
-
resolve
public javax.lang.model.type.DeclaredType resolve(javax.lang.model.type.DeclaredType declaredType, java.util.function.Function<javax.lang.model.type.TypeVariable,java.util.Optional<javax.lang.model.type.TypeMirror>> typeArgs)
- Specified by:
resolve
in interfaceDeriveUtils
-
overrideMethodBuilder
public com.squareup.javapoet.MethodSpec.Builder overrideMethodBuilder(javax.lang.model.element.ExecutableElement abstractMethod, javax.lang.model.type.DeclaredType declaredType)
- Specified by:
overrideMethodBuilder
in interfaceDeriveUtils
-
typeVariablesIn
public java.util.List<javax.lang.model.type.TypeVariable> typeVariablesIn(javax.lang.model.type.TypeMirror typeMirror)
- Specified by:
typeVariablesIn
in interfaceDeriveUtils
-
allAbstractMethods
public java.util.List<javax.lang.model.element.ExecutableElement> allAbstractMethods(javax.lang.model.type.DeclaredType declaredType)
- Specified by:
allAbstractMethods
in interfaceDeriveUtils
-
allAbstractMethods
public java.util.List<javax.lang.model.element.ExecutableElement> allAbstractMethods(javax.lang.model.element.TypeElement typeElement)
- Specified by:
allAbstractMethods
in interfaceDeriveUtils
-
allStaticMethods
public java.util.stream.Stream<javax.lang.model.element.ExecutableElement> allStaticMethods(javax.lang.model.element.TypeElement typeElement)
- Specified by:
allStaticMethods
in interfaceDeriveUtils
-
allStaticFields
public java.util.stream.Stream<javax.lang.model.element.VariableElement> allStaticFields(javax.lang.model.element.TypeElement typeElement)
- Specified by:
allStaticFields
in interfaceDeriveUtils
-
asDeclaredType
public java.util.Optional<javax.lang.model.type.DeclaredType> asDeclaredType(javax.lang.model.type.TypeMirror typeMirror)
- Specified by:
asDeclaredType
in interfaceDeriveUtils
-
asTypeElement
public java.util.Optional<javax.lang.model.element.TypeElement> asTypeElement(javax.lang.model.type.TypeMirror typeMirror)
- Specified by:
asTypeElement
in interfaceDeriveUtils
-
isWildcarded
public boolean isWildcarded(javax.lang.model.type.TypeMirror typeMirror)
- Specified by:
isWildcarded
in interfaceDeriveUtils
-
object
public ObjectModel object()
- Specified by:
object
in interfaceDeriveUtils
-
samInterface
public java.util.Optional<SamInterface> samInterface(java.lang.String qualifiedClassName)
- Specified by:
samInterface
in interfaceDeriveUtils
-
function0Model
public SamInterface function0Model(Flavour flavour)
- Specified by:
function0Model
in interfaceDeriveUtils
-
function1Model
public SamInterface function1Model(Flavour flavour)
- Specified by:
function1Model
in interfaceDeriveUtils
-
optionModel
public OptionModel optionModel(Flavour flavour)
- Specified by:
optionModel
in interfaceDeriveUtils
-
eitherModel
public java.util.Optional<EitherModel> eitherModel(Flavour flavour)
- Specified by:
eitherModel
in interfaceDeriveUtils
-
uncapitalize
public java.lang.String uncapitalize(java.lang.CharSequence string)
- Specified by:
uncapitalize
in interfaceDeriveUtils
-
capitalize
public java.lang.String capitalize(java.lang.CharSequence string)
- Specified by:
capitalize
in interfaceDeriveUtils
-
findInstance
public java.util.Optional<InstanceLocation> findInstance(javax.lang.model.element.TypeElement typeElementContext, com.squareup.javapoet.ClassName typeClassContext, com.squareup.javapoet.ClassName typeClass, javax.lang.model.element.TypeElement typeElement, javax.lang.model.type.DeclaredType declaredType, java.util.List<javax.lang.model.element.TypeElement> lowPriorityProviders)
- Specified by:
findInstance
in interfaceDeriveUtils
-
instanceInitializer
public DeriveResult<BoundExpression> instanceInitializer(javax.lang.model.element.TypeElement typeElementContext, com.squareup.javapoet.ClassName typeClassContext, com.squareup.javapoet.ClassName typeClass, javax.lang.model.type.TypeMirror type, java.util.List<javax.lang.model.element.TypeElement> lowPriorityProviders)
- Specified by:
instanceInitializer
in interfaceDeriveUtils
-
resolveFieldInstances
public DeriveResult<FieldsTypeClassInstanceBindingMap> resolveFieldInstances(AlgebraicDataType adt, com.squareup.javapoet.ClassName typeClass, java.util.List<javax.lang.model.element.TypeElement> lowPriorityProviders)
- Specified by:
resolveFieldInstances
in interfaceDeriveUtils
-
lambdaImpl
public com.squareup.javapoet.CodeBlock lambdaImpl(DataConstructor constructor, com.squareup.javapoet.CodeBlock impl)
- Specified by:
lambdaImpl
in interfaceDeriveUtils
-
lambdaImpl
public com.squareup.javapoet.CodeBlock lambdaImpl(DataConstructor constructor, java.lang.String suffix, com.squareup.javapoet.CodeBlock impl)
- Specified by:
lambdaImpl
in interfaceDeriveUtils
-
generateInstance
public DeriveResult<DerivedCodeSpec> generateInstance(AlgebraicDataType adt, com.squareup.javapoet.ClassName typeClass, java.util.List<javax.lang.model.element.TypeElement> lowPriorityProviders, java.util.function.Function<InstanceUtils,DerivedCodeSpec> generateInstance)
- Specified by:
generateInstance
in interfaceDeriveUtils
-
parameterList
public com.squareup.javapoet.CodeBlock parameterList(DataConstructor constructor)
- Specified by:
parameterList
in interfaceDeriveUtils
-
parameterList
public com.squareup.javapoet.CodeBlock parameterList(DataConstructor constructor, java.lang.String suffix)
- Specified by:
parameterList
in interfaceDeriveUtils
-
findTypeElement
public java.util.Optional<javax.lang.model.element.TypeElement> findTypeElement(com.squareup.javapoet.ClassName cn)
- Specified by:
findTypeElement
in interfaceDeriveUtils
-
asTypeArguments
private com.squareup.javapoet.CodeBlock asTypeArguments(java.util.stream.Stream<? extends javax.lang.model.type.TypeMirror> typeVariables)
-
findFirstDeclaredTypeOf
private java.util.Optional<javax.lang.model.type.DeclaredType> findFirstDeclaredTypeOf(javax.lang.model.element.TypeElement typeElement, javax.lang.model.type.TypeMirror inType)
-
instanceVariableName
private java.lang.String instanceVariableName(javax.lang.model.element.TypeElement typeClass, javax.lang.model.type.TypeMirror type)
-
generatedInstanceMethodName
private java.lang.String generatedInstanceMethodName(javax.lang.model.element.TypeElement typeClass, javax.lang.model.element.TypeElement typeElement)
-
allTypeArgsAsString
private java.util.stream.Stream<java.lang.String> allTypeArgsAsString(javax.lang.model.type.TypeMirror tm)
-
findCompiledInstance
private java.util.Optional<InstanceLocation> findCompiledInstance(javax.lang.model.element.TypeElement typeElementContext, javax.lang.model.element.TypeElement typeClass, javax.lang.model.element.TypeElement typeElement, javax.lang.model.type.DeclaredType declaredType, java.util.List<javax.lang.model.element.TypeElement> lowPriorityProviders, java.util.Optional<com.squareup.javapoet.ClassName> deriveTarget, java.util.Optional<com.squareup.javapoet.ClassName> deriveTargetExtend, java.util.Optional<com.squareup.javapoet.ClassName> contextExtend)
-
findCompiledInstanceIn
private java.util.function.Function<javax.lang.model.element.TypeElement,java.util.stream.Stream<InstanceLocation>> findCompiledInstanceIn(javax.lang.model.element.TypeElement typeElement, javax.lang.model.type.DeclaredType declaredType, java.util.Optional<com.squareup.javapoet.ClassName> deriveTarget, javax.lang.model.type.TypeMirror rawTypeClass)
-
lazyOptionModel
private OptionModel lazyOptionModel(java.lang.String optionClassQualifiedName, java.lang.String noneConstructor, java.lang.String someConstructor)
-
eitherModel
private java.util.Optional<EitherModel> eitherModel(java.lang.String eitherClassQualifiedName, java.lang.String leftConstructor, java.lang.String rightConstructor)
-
lazySamInterface
private SamInterface lazySamInterface(java.lang.String samInterfaceQualifiedName)
-
typeVariablesIn0
private java.util.stream.Stream<javax.lang.model.type.TypeVariable> typeVariablesIn0(javax.lang.model.type.TypeMirror typeMirror)
-
abstractMethod
private boolean abstractMethod(javax.lang.model.element.ExecutableElement e)
-
join
private FieldsTypeClassInstanceBindingMap join(FieldsTypeClassInstanceBindingMap b1, FieldsTypeClassInstanceBindingMap b2)
-
merge
private java.util.List<FreeVariable> merge(java.util.List<FreeVariable> vbs1, java.util.List<FreeVariable> vbs2)
-
isNotIn
private java.lang.Boolean isNotIn(java.util.List<FreeVariable> previousVars, FreeVariable var)
-
join
private BoundExpression join(java.util.function.BinaryOperator<Expression> expressionJoiner, BoundExpression b1, BoundExpression b2)
-
joinAsArgs
private static Expression joinAsArgs(Expression e1, Expression e2)
-
getSuperTypeElements
private static java.util.stream.Stream<javax.lang.model.element.TypeElement> getSuperTypeElements(javax.lang.model.element.TypeElement e)
-
-