Class DeriveUtilsImpl

  • All Implemented Interfaces:
    DeriveUtils

    final class DeriveUtilsImpl
    extends java.lang.Object
    implements DeriveUtils
    • 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)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • Elements

        private final javax.lang.model.util.Elements Elements
      • Types

        private final javax.lang.model.util.Types Types
      • 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 interface DeriveUtils
      • elements

        public javax.lang.model.util.Elements elements()
        Specified by:
        elements in interface DeriveUtils
      • 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 interface DeriveUtils
      • 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 interface DeriveUtils
      • 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 interface DeriveUtils
      • 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 interface DeriveUtils
      • 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 interface DeriveUtils
      • overrideMethodBuilder

        public com.squareup.javapoet.MethodSpec.Builder overrideMethodBuilder​(javax.lang.model.element.ExecutableElement abstractMethod,
                                                                              javax.lang.model.type.DeclaredType declaredType)
        Specified by:
        overrideMethodBuilder in interface DeriveUtils
      • typeVariablesIn

        public java.util.List<javax.lang.model.type.TypeVariable> typeVariablesIn​(javax.lang.model.type.TypeMirror typeMirror)
        Specified by:
        typeVariablesIn in interface DeriveUtils
      • allAbstractMethods

        public java.util.List<javax.lang.model.element.ExecutableElement> allAbstractMethods​(javax.lang.model.type.DeclaredType declaredType)
        Specified by:
        allAbstractMethods in interface DeriveUtils
      • allAbstractMethods

        public java.util.List<javax.lang.model.element.ExecutableElement> allAbstractMethods​(javax.lang.model.element.TypeElement typeElement)
        Specified by:
        allAbstractMethods in interface DeriveUtils
      • allStaticMethods

        public java.util.stream.Stream<javax.lang.model.element.ExecutableElement> allStaticMethods​(javax.lang.model.element.TypeElement typeElement)
        Specified by:
        allStaticMethods in interface DeriveUtils
      • allStaticFields

        public java.util.stream.Stream<javax.lang.model.element.VariableElement> allStaticFields​(javax.lang.model.element.TypeElement typeElement)
        Specified by:
        allStaticFields in interface DeriveUtils
      • asDeclaredType

        public java.util.Optional<javax.lang.model.type.DeclaredType> asDeclaredType​(javax.lang.model.type.TypeMirror typeMirror)
        Specified by:
        asDeclaredType in interface DeriveUtils
      • asTypeElement

        public java.util.Optional<javax.lang.model.element.TypeElement> asTypeElement​(javax.lang.model.type.TypeMirror typeMirror)
        Specified by:
        asTypeElement in interface DeriveUtils
      • isWildcarded

        public boolean isWildcarded​(javax.lang.model.type.TypeMirror typeMirror)
        Specified by:
        isWildcarded in interface DeriveUtils
      • uncapitalize

        public java.lang.String uncapitalize​(java.lang.CharSequence string)
        Specified by:
        uncapitalize in interface DeriveUtils
      • capitalize

        public java.lang.String capitalize​(java.lang.CharSequence string)
        Specified by:
        capitalize in interface DeriveUtils
      • 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 interface DeriveUtils
      • 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 interface DeriveUtils
      • lambdaImpl

        public com.squareup.javapoet.CodeBlock lambdaImpl​(DataConstructor constructor,
                                                          com.squareup.javapoet.CodeBlock impl)
        Specified by:
        lambdaImpl in interface DeriveUtils
      • lambdaImpl

        public com.squareup.javapoet.CodeBlock lambdaImpl​(DataConstructor constructor,
                                                          java.lang.String suffix,
                                                          com.squareup.javapoet.CodeBlock impl)
        Specified by:
        lambdaImpl in interface DeriveUtils
      • findTypeElement

        public java.util.Optional<javax.lang.model.element.TypeElement> findTypeElement​(com.squareup.javapoet.ClassName cn)
        Specified by:
        findTypeElement in interface DeriveUtils
      • 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)
      • getSuperTypeElements

        private static java.util.stream.Stream<javax.lang.model.element.TypeElement> getSuperTypeElements​(javax.lang.model.element.TypeElement e)