diff --git a/build.gradle b/build.gradle index 99b2d2a..b1cb8bb 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { } dependencies { //Check for the latest version here: http://plugins.gradle.org/plugin/com.jfrog.artifactory - classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.2.0' + classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.5.4' } } @@ -36,8 +36,8 @@ ext { hktBaseVersion = '0.9.3' hktVersion = hktBaseVersion + (isSnapshot ? '-SNAPSHOT' : '') - derive4jVersion = '0.10.2' - autoService = 'com.google.auto.service:auto-service:1.0-rc2' + derive4jVersion = '0.12.3' + autoService = 'com.google.auto.service:auto-service:1.0-rc4' } @@ -50,6 +50,8 @@ dependencies { compile files(Jvm.current().toolsJar) + compile 'io.kindedj:kindedj:1.0.1' + compileOnly "org.derive4j:derive4j-annotation:${derive4jVersion}" compileOnly autoService @@ -57,7 +59,7 @@ dependencies { apt autoService testCompile 'junit:junit:4.12' - testCompile 'com.google.testing.compile:compile-testing:0.8' + testCompile 'com.google.testing.compile:compile-testing:0.14' testApt rootProject } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 2c6137b..01b8bf6 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 889644b..933b647 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Wed May 04 21:04:30 CEST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.12-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-bin.zip diff --git a/gradlew b/gradlew index 9d82f78..cccdd3d 100755 --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh ############################################################################## ## @@ -6,20 +6,38 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -30,6 +48,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,26 +59,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -85,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -150,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 72d362d..e95643d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -49,7 +49,6 @@ goto fail @rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +59,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line diff --git a/src/main/java/org/derive4j/hkt/__.java b/src/main/java/org/derive4j/hkt/__.java index 4ce32d6..a3d1c1c 100644 --- a/src/main/java/org/derive4j/hkt/__.java +++ b/src/main/java/org/derive4j/hkt/__.java @@ -1,8 +1,10 @@ package org.derive4j.hkt; +import io.kindedj.Hk; + /** * Represents a higher order type (or higher kinded type or type constructor) of arity 1 * @param the 'witness' of the class/interface to be lifted as type constructor: a static nested class or enum, or the class applied with wildcard type arguments. * @param the type parameter of the type constructor */ -public interface __ {} +public interface __ extends Hk {} diff --git a/src/main/java/org/derive4j/hkt/processor/GenCode.java b/src/main/java/org/derive4j/hkt/processor/GenCode.java index 2d61391..5e7294b 100644 --- a/src/main/java/org/derive4j/hkt/processor/GenCode.java +++ b/src/main/java/org/derive4j/hkt/processor/GenCode.java @@ -47,7 +47,9 @@ String prefix() { } private static final String CLASS_TEMPLATE = "package {0};\n" + "\n" + - "import org.derive4j.hkt.*;\n" + + "import org.derive4j.hkt.__;\n" + + "import org.derive4j.hkt.TypeEq;\n" + + "import io.kindedj.Hk;\n" + "{3}\n"+ "\n" + "{1}final class {2} '{'\n" + @@ -56,13 +58,13 @@ String prefix() { "{4}\n" + "}"; - private static final String METHODS_TEMPLATE = " {0}static {2} {1} " + - "{4}({3} hkt) '{'\n" + + private static final String METHODS_TEMPLATE = " @SuppressWarnings(\"unchecked\")\n" + + " {0}static {2} {1} {5}({3} hkt) '{'\n" + " return ({1}) hkt;\n" + " }\n" + "\n" + " @SuppressWarnings(\"unchecked\")\n" + - " {0}static {2} TypeEq<{3}, {1}> {5}()'{'\n" + + " {0}static {2} TypeEq<{4}, {1}> {6}()'{'\n" + " return (TypeEq) TypeEq.refl();\n" + " }"; @@ -215,14 +217,21 @@ private P2 genCoerceMethod(TypeElement typeConst CharSequence typeParams = MessageFormat.format(TYPE_PARAMS_TEMPLATE, showTypeParams(typeConstructor)); + String hkInterfaceFQN = Visitors.asTypeElement.visit(hktInterface.asElement()).get().getQualifiedName().toString(); + + String kindedJInterfaceAsString = hktInterface.toString() + .replace("<" + hkInterfaceFQN, "