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 DeriveConfigBuilderderiveConfigBuilderprivate java.util.function.Function<Flavour,java.util.Optional<EitherModel>>eitherModelprivate javax.lang.model.util.ElementsElementsprivate java.util.function.Function<Flavour,SamInterface>function0Modelprivate java.util.function.Function<Flavour,SamInterface>function1Modelprivate ObjectModelobjectModelprivate java.util.function.Function<Flavour,OptionModel>optionModelprivate javax.lang.model.util.TypesTypes
-
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 booleanabstractMethod(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.CodeBlockasTypeArguments(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.Stringcapitalize(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.Elementselements()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)SamInterfacefunction0Model(Flavour flavour)SamInterfacefunction1Model(Flavour flavour)private java.lang.StringgeneratedInstanceMethodName(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.StringinstanceVariableName(javax.lang.model.element.TypeElement typeClass, javax.lang.model.type.TypeMirror type)private java.lang.BooleanisNotIn(java.util.List<FreeVariable> previousVars, FreeVariable var)booleanisWildcarded(javax.lang.model.type.TypeMirror typeMirror)private BoundExpressionjoin(java.util.function.BinaryOperator<Expression> expressionJoiner, BoundExpression b1, BoundExpression b2)private FieldsTypeClassInstanceBindingMapjoin(FieldsTypeClassInstanceBindingMap b1, FieldsTypeClassInstanceBindingMap b2)private static ExpressionjoinAsArgs(Expression e1, Expression e2)com.squareup.javapoet.CodeBlocklambdaImpl(DataConstructor constructor, com.squareup.javapoet.CodeBlock impl)com.squareup.javapoet.CodeBlocklambdaImpl(DataConstructor constructor, java.lang.String suffix, com.squareup.javapoet.CodeBlock impl)private OptionModellazyOptionModel(java.lang.String optionClassQualifiedName, java.lang.String noneConstructor, java.lang.String someConstructor)private SamInterfacelazySamInterface(java.lang.String samInterfaceQualifiedName)private java.util.List<FreeVariable>merge(java.util.List<FreeVariable> vbs1, java.util.List<FreeVariable> vbs2)ObjectModelobject()OptionModeloptionModel(Flavour flavour)com.squareup.javapoet.MethodSpec.BuilderoverrideMethodBuilder(javax.lang.model.element.ExecutableElement abstractMethod, javax.lang.model.type.DeclaredType declaredType)com.squareup.javapoet.CodeBlockparameterList(DataConstructor constructor)com.squareup.javapoet.CodeBlockparameterList(DataConstructor constructor, java.lang.String suffix)javax.lang.model.type.DeclaredTyperesolve(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.TypeMirrorresolve(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.TypeNameresolveToTypeName(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.Typestypes()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.Stringuncapitalize(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:
typesin interfaceDeriveUtils
-
elements
public javax.lang.model.util.Elements elements()
- Specified by:
elementsin 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:
resolveToTypeNamein 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:
typeRestrictionsin 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:
resolvein 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:
unifyin 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:
resolvein interfaceDeriveUtils
-
overrideMethodBuilder
public com.squareup.javapoet.MethodSpec.Builder overrideMethodBuilder(javax.lang.model.element.ExecutableElement abstractMethod, javax.lang.model.type.DeclaredType declaredType)- Specified by:
overrideMethodBuilderin interfaceDeriveUtils
-
typeVariablesIn
public java.util.List<javax.lang.model.type.TypeVariable> typeVariablesIn(javax.lang.model.type.TypeMirror typeMirror)
- Specified by:
typeVariablesInin interfaceDeriveUtils
-
allAbstractMethods
public java.util.List<javax.lang.model.element.ExecutableElement> allAbstractMethods(javax.lang.model.type.DeclaredType declaredType)
- Specified by:
allAbstractMethodsin interfaceDeriveUtils
-
allAbstractMethods
public java.util.List<javax.lang.model.element.ExecutableElement> allAbstractMethods(javax.lang.model.element.TypeElement typeElement)
- Specified by:
allAbstractMethodsin interfaceDeriveUtils
-
allStaticMethods
public java.util.stream.Stream<javax.lang.model.element.ExecutableElement> allStaticMethods(javax.lang.model.element.TypeElement typeElement)
- Specified by:
allStaticMethodsin interfaceDeriveUtils
-
allStaticFields
public java.util.stream.Stream<javax.lang.model.element.VariableElement> allStaticFields(javax.lang.model.element.TypeElement typeElement)
- Specified by:
allStaticFieldsin interfaceDeriveUtils
-
asDeclaredType
public java.util.Optional<javax.lang.model.type.DeclaredType> asDeclaredType(javax.lang.model.type.TypeMirror typeMirror)
- Specified by:
asDeclaredTypein interfaceDeriveUtils
-
asTypeElement
public java.util.Optional<javax.lang.model.element.TypeElement> asTypeElement(javax.lang.model.type.TypeMirror typeMirror)
- Specified by:
asTypeElementin interfaceDeriveUtils
-
isWildcarded
public boolean isWildcarded(javax.lang.model.type.TypeMirror typeMirror)
- Specified by:
isWildcardedin interfaceDeriveUtils
-
object
public ObjectModel object()
- Specified by:
objectin interfaceDeriveUtils
-
samInterface
public java.util.Optional<SamInterface> samInterface(java.lang.String qualifiedClassName)
- Specified by:
samInterfacein interfaceDeriveUtils
-
function0Model
public SamInterface function0Model(Flavour flavour)
- Specified by:
function0Modelin interfaceDeriveUtils
-
function1Model
public SamInterface function1Model(Flavour flavour)
- Specified by:
function1Modelin interfaceDeriveUtils
-
optionModel
public OptionModel optionModel(Flavour flavour)
- Specified by:
optionModelin interfaceDeriveUtils
-
eitherModel
public java.util.Optional<EitherModel> eitherModel(Flavour flavour)
- Specified by:
eitherModelin interfaceDeriveUtils
-
uncapitalize
public java.lang.String uncapitalize(java.lang.CharSequence string)
- Specified by:
uncapitalizein interfaceDeriveUtils
-
capitalize
public java.lang.String capitalize(java.lang.CharSequence string)
- Specified by:
capitalizein 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:
findInstancein 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:
instanceInitializerin interfaceDeriveUtils
-
resolveFieldInstances
public DeriveResult<FieldsTypeClassInstanceBindingMap> resolveFieldInstances(AlgebraicDataType adt, com.squareup.javapoet.ClassName typeClass, java.util.List<javax.lang.model.element.TypeElement> lowPriorityProviders)
- Specified by:
resolveFieldInstancesin interfaceDeriveUtils
-
lambdaImpl
public com.squareup.javapoet.CodeBlock lambdaImpl(DataConstructor constructor, com.squareup.javapoet.CodeBlock impl)
- Specified by:
lambdaImplin interfaceDeriveUtils
-
lambdaImpl
public com.squareup.javapoet.CodeBlock lambdaImpl(DataConstructor constructor, java.lang.String suffix, com.squareup.javapoet.CodeBlock impl)
- Specified by:
lambdaImplin 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:
generateInstancein interfaceDeriveUtils
-
parameterList
public com.squareup.javapoet.CodeBlock parameterList(DataConstructor constructor)
- Specified by:
parameterListin interfaceDeriveUtils
-
parameterList
public com.squareup.javapoet.CodeBlock parameterList(DataConstructor constructor, java.lang.String suffix)
- Specified by:
parameterListin interfaceDeriveUtils
-
findTypeElement
public java.util.Optional<javax.lang.model.element.TypeElement> findTypeElement(com.squareup.javapoet.ClassName cn)
- Specified by:
findTypeElementin 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)
-
-