From 5a67f989e91a6f47341e9aa8090f17c54c6780b2 Mon Sep 17 00:00:00 2001
From: Janne Mareike Koschinski <janne@kuschku.de>
Date: Wed, 17 Feb 2021 18:49:26 +0100
Subject: [PATCH] Cleanup libquassel to also run under JDK6

---
 build.gradle.kts                              |  2 +-
 .../CoverageConverterAction.kt                |  2 +-
 gradle.properties                             |  4 +-
 .../libquassel/protocol/io/ByteBufferUtil.kt  |  3 +-
 .../protocol/io/ChainedByteBuffer.kt          |  3 +-
 .../libquassel/protocol/io/StringEncoder.kt   |  6 +-
 .../libquassel/protocol/util/Buffer.kt        | 76 +++++++++++++++++++
 .../serializers/qt/StringSerializerTest.kt    | 11 +--
 .../testutil/handshakeSerializerTest.kt       |  3 +-
 .../testutil/matchers/ByteBufferMatcher.kt    |  5 +-
 .../testutil/primitiveSerializerTest.kt       |  5 +-
 .../protocol/testutil/serializerTest.kt       |  5 +-
 .../testutil/signalProxySerializerTest.kt     |  3 +-
 13 files changed, 107 insertions(+), 21 deletions(-)
 create mode 100644 libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/Buffer.kt

diff --git a/build.gradle.kts b/build.gradle.kts
index 573f8c0..7fafccc 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -94,7 +94,7 @@ subprojects {
 
   configure<JavaPluginExtension> {
     toolchain {
-      languageVersion.set(JavaLanguageVersion.of(11))
+      languageVersion.set(JavaLanguageVersion.of(8))
     }
   }
 }
diff --git a/buildSrc/src/main/kotlin/de/justjanne/coverageconverter/CoverageConverterAction.kt b/buildSrc/src/main/kotlin/de/justjanne/coverageconverter/CoverageConverterAction.kt
index 0063723..33d4910 100644
--- a/buildSrc/src/main/kotlin/de/justjanne/coverageconverter/CoverageConverterAction.kt
+++ b/buildSrc/src/main/kotlin/de/justjanne/coverageconverter/CoverageConverterAction.kt
@@ -35,7 +35,7 @@ internal class CoverageConverterAction(
       file.delete()
     }
     val source = CoverageConverterPlugin::class.java.getResourceAsStream("/coverageconverter/$name")
-    file.writeBytes(source.readAllBytes())
+    file.writeBytes(source.readBytes())
     return file
   }
 
diff --git a/gradle.properties b/gradle.properties
index 8b47366..28c5fc7 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -4,10 +4,10 @@ hamcrestVersion=2.1
 junit5Version=5.6.0
 kotlinBitflagsVersion=1.1.0
 sl4jVersion=1.7.30
-testcontainersCiVersion=1.1.0
+testcontainersCiVersion=1.2.0
 
 GROUP=de.justjanne.libquassel
-VERSION_NAME=0.3.0
+VERSION_NAME=0.3.1
 
 POM_URL=https://git.kuschku.de/justJanne/libquassel
 POM_SCM_URL=https://git.kuschku.de/justJanne/libquassel
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/io/ByteBufferUtil.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/io/ByteBufferUtil.kt
index 8a4323d..0e871f9 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/io/ByteBufferUtil.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/io/ByteBufferUtil.kt
@@ -10,6 +10,7 @@
 
 package de.justjanne.libquassel.protocol.io
 
+import de.justjanne.libquassel.protocol.util.withFlip
 import java.nio.ByteBuffer
 
 /**
@@ -44,7 +45,7 @@ fun copyData(from: ByteBuffer, to: ByteBuffer, desiredAmount: Int) {
 fun copyData(from: ByteBuffer, desiredAmount: Int): ByteBuffer {
   val to = ByteBuffer.allocate(minOf(from.remaining(), desiredAmount))
   copyData(from, to, desiredAmount)
-  return to.flip()
+  return to.withFlip()
 }
 
 /**
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/io/ChainedByteBuffer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/io/ChainedByteBuffer.kt
index 2c2a7fc..172d3c4 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/io/ChainedByteBuffer.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/io/ChainedByteBuffer.kt
@@ -10,6 +10,7 @@
 
 package de.justjanne.libquassel.protocol.io
 
+import de.justjanne.libquassel.protocol.util.withFlip
 import java.nio.ByteBuffer
 import java.util.LinkedList
 
@@ -192,6 +193,6 @@ class ChainedByteBuffer(
       index < buffer.bufferList.size
 
     override fun next(): ByteBuffer =
-      buffer.bufferList[index++].duplicate().flip()
+      buffer.bufferList[index++].duplicate().withFlip()
   }
 }
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/io/StringEncoder.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/io/StringEncoder.kt
index 3d39d30..0b70d0d 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/io/StringEncoder.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/io/StringEncoder.kt
@@ -10,6 +10,8 @@
 
 package de.justjanne.libquassel.protocol.io
 
+import de.justjanne.libquassel.protocol.util.withClear
+import de.justjanne.libquassel.protocol.util.withFlip
 import java.nio.ByteBuffer
 import java.nio.CharBuffer
 import java.nio.charset.Charset
@@ -24,7 +26,7 @@ class StringEncoder(charset: Charset) {
 
   private fun charBuffer(length: Int): CharBuffer {
     if (length < 1024) {
-      return charBuffer.clear()
+      return charBuffer.withClear()
     } else {
       return CharBuffer.allocate(length)
     }
@@ -83,7 +85,7 @@ class StringEncoder(charset: Charset) {
       }
     }
     source.limit(oldlimit)
-    return charBuffer.flip()
+    return charBuffer.withFlip()
   }
 
   /**
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/Buffer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/Buffer.kt
new file mode 100644
index 0000000..cd1ca30
--- /dev/null
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/util/Buffer.kt
@@ -0,0 +1,76 @@
+/*
+ * libquassel
+ * Copyright (c) 2021 Janne Mareike Koschinski
+ * Copyright (c) 2021 The Quassel Project
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public License,
+ * v. 2.0. If a copy of the MPL was not distributed with this file, You can
+ * obtain one at https://mozilla.org/MPL/2.0/.
+ */
+
+package de.justjanne.libquassel.protocol.util
+
+import java.nio.Buffer
+
+/**
+ * Utility function wrapping the [Buffer.position] call on older JDKs where it
+ * always returns a plain Buffer instead of the correct type
+ */
+inline fun <reified T : Buffer> T.withPosition(position: Int): T {
+  position(position)
+  return this
+}
+
+/**
+ * Utility function wrapping the [Buffer.limit] call on older JDKs where it
+ * always returns a plain Buffer instead of the correct type
+ */
+inline fun <reified T : Buffer> T.withLimit(limit: Int): T {
+  limit(limit)
+  return this
+}
+
+/**
+ * Utility function wrapping the [Buffer.mark] call on older JDKs where it
+ * always returns a plain Buffer instead of the correct type
+ */
+inline fun <reified T : Buffer> T.withMark(): T {
+  mark()
+  return this
+}
+
+/**
+ * Utility function wrapping the [Buffer.reset] call on older JDKs where it
+ * always returns a plain Buffer instead of the correct type
+ */
+inline fun <reified T : Buffer> T.withReset(): T {
+  reset()
+  return this
+}
+
+/**
+ * Utility function wrapping the [Buffer.clear] call on older JDKs where it
+ * always returns a plain Buffer instead of the correct type
+ */
+inline fun <reified T : Buffer> T.withClear(): T {
+  clear()
+  return this
+}
+
+/**
+ * Utility function wrapping the [Buffer.flip] call on older JDKs where it
+ * always returns a plain Buffer instead of the correct type
+ */
+inline fun <reified T : Buffer> T.withFlip(): T {
+  flip()
+  return this
+}
+
+/**
+ * Utility function wrapping the [Buffer.rewind] call on older JDKs where it
+ * always returns a plain Buffer instead of the correct type
+ */
+inline fun <reified T : Buffer> T.withRewind(): T {
+  rewind()
+  return this
+}
diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/StringSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/StringSerializerTest.kt
index e89b2c9..35b65a2 100644
--- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/StringSerializerTest.kt
+++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/qt/StringSerializerTest.kt
@@ -25,6 +25,7 @@ import de.justjanne.libquassel.protocol.testutil.matchers.BomMatcherString
 import de.justjanne.libquassel.protocol.testutil.matchers.ByteBufferMatcher
 import de.justjanne.libquassel.protocol.testutil.testPrimitiveSerializerDirect
 import de.justjanne.libquassel.protocol.testutil.testPrimitiveSerializerVariant
+import de.justjanne.libquassel.protocol.util.withRewind
 import org.hamcrest.MatcherAssert.assertThat
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Test
@@ -50,12 +51,12 @@ class StringSerializerTest {
         val bufferUtf8 = StringSerializerUtf8.serializeRaw(it)
         testPrimitiveSerializerDirect(ByteBufferSerializer, bufferUtf8, matcher = ByteBufferMatcher(bufferUtf8))
         testPrimitiveSerializerVariant(QtType.QByteArray, bufferUtf8, matcher = ByteBufferMatcher(bufferUtf8))
-        assertEquals(it, StringSerializerUtf8.deserializeRaw(bufferUtf8.rewind()))
+        assertEquals(it, StringSerializerUtf8.deserializeRaw(bufferUtf8.withRewind()))
 
         val bufferUtf16 = StringSerializerUtf16.serializeRaw(it)
         testPrimitiveSerializerDirect(ByteBufferSerializer, bufferUtf16, matcher = ByteBufferMatcher(bufferUtf16))
         testPrimitiveSerializerVariant(QtType.QByteArray, bufferUtf16, matcher = ByteBufferMatcher(bufferUtf16))
-        assertThat(StringSerializerUtf16.deserializeRaw(bufferUtf16.rewind()), BomMatcherString(it))
+        assertThat(StringSerializerUtf16.deserializeRaw(bufferUtf16.withRewind()), BomMatcherString(it))
       }
     }
   }
@@ -80,7 +81,7 @@ class StringSerializerTest {
     val bufferAscii = StringSerializerAscii.serializeRaw(data)
     testPrimitiveSerializerDirect(ByteBufferSerializer, bufferAscii, matcher = ByteBufferMatcher(bufferAscii))
     testPrimitiveSerializerVariant(QtType.QByteArray, bufferAscii, matcher = ByteBufferMatcher(bufferAscii))
-    assertEquals(data, StringSerializerAscii.deserializeRaw(bufferAscii.rewind()))
+    assertEquals(data, StringSerializerAscii.deserializeRaw(bufferAscii.withRewind()))
 
     testUtf(data)
   }
@@ -1314,7 +1315,7 @@ class StringSerializerTest {
     val bufferAscii = StringSerializerAscii.serializeRaw(data)
     testPrimitiveSerializerDirect(ByteBufferSerializer, bufferAscii, matcher = ByteBufferMatcher(bufferAscii))
     testPrimitiveSerializerVariant(QtType.QByteArray, bufferAscii, matcher = ByteBufferMatcher(bufferAscii))
-    assertEquals(data, StringSerializerAscii.deserializeRaw(bufferAscii.rewind()))
+    assertEquals(data, StringSerializerAscii.deserializeRaw(bufferAscii.withRewind()))
   }
 
   private fun testUtf(data: String) {
@@ -1323,7 +1324,7 @@ class StringSerializerTest {
     val bufferUtf8 = StringSerializerUtf8.serializeRaw(data)
     testPrimitiveSerializerDirect(ByteBufferSerializer, bufferUtf8, matcher = ByteBufferMatcher(bufferUtf8))
     testPrimitiveSerializerVariant(QtType.QByteArray, bufferUtf8, matcher = ByteBufferMatcher(bufferUtf8))
-    assertEquals(data, StringSerializerUtf8.deserializeRaw(bufferUtf8.rewind()))
+    assertEquals(data, StringSerializerUtf8.deserializeRaw(bufferUtf8.withRewind()))
 
     // testPrimitiveSerializerDirect(StringSerializerUtf16, data, matcher = BomMatcherString(data))
     // testPrimitiveSerializerVariant(StringSerializerUtf16, data, matcher = BomMatcherString(data))
diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/handshakeSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/handshakeSerializerTest.kt
index 8d059b9..85266a8 100644
--- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/handshakeSerializerTest.kt
+++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/handshakeSerializerTest.kt
@@ -23,6 +23,7 @@ import de.justjanne.libquassel.protocol.io.useChainedByteBuffer
 import de.justjanne.libquassel.protocol.models.HandshakeMessage
 import de.justjanne.libquassel.protocol.serializers.HandshakeMessageSerializer
 import de.justjanne.libquassel.protocol.testutil.matchers.ByteBufferMatcher
+import de.justjanne.libquassel.protocol.util.withRewind
 import org.hamcrest.Matcher
 import org.hamcrest.MatcherAssert.assertThat
 import java.nio.ByteBuffer
@@ -50,7 +51,7 @@ inline fun <reified T : HandshakeMessage> handshakeSerializerTest(
         useChainedByteBuffer {
           HandshakeMessageSerializer.serialize(it, value, serializeFeatureSet)
         },
-        ByteBufferMatcher(encoded.rewind())
+        ByteBufferMatcher(encoded.withRewind())
       )
     }
   }
diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/matchers/ByteBufferMatcher.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/matchers/ByteBufferMatcher.kt
index e8a6e9c..954f886 100644
--- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/matchers/ByteBufferMatcher.kt
+++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/matchers/ByteBufferMatcher.kt
@@ -20,6 +20,7 @@ package de.justjanne.libquassel.protocol.testutil.matchers
 
 import de.justjanne.libquassel.protocol.io.contentToString
 import de.justjanne.libquassel.protocol.io.isEmpty
+import de.justjanne.libquassel.protocol.util.withRewind
 import org.hamcrest.BaseMatcher
 import org.hamcrest.Description
 import java.nio.ByteBuffer
@@ -40,7 +41,7 @@ class ByteBufferMatcher(buffer: ByteBuffer?) : BaseMatcher<ByteBuffer>() {
 
   override fun describeMismatch(item: Any?, description: Description?) {
     description?.appendText("was ")
-    description?.appendText((item as? ByteBuffer)?.rewind()?.contentToString())
+    description?.appendText((item as? ByteBuffer)?.withRewind()?.contentToString())
   }
 
   override fun matches(item: Any?): Boolean {
@@ -50,6 +51,6 @@ class ByteBufferMatcher(buffer: ByteBuffer?) : BaseMatcher<ByteBuffer>() {
       return true
     }
 
-    return actual?.rewind()?.contentToString() == expected?.rewind()?.contentToString()
+    return actual?.withRewind()?.contentToString() == expected?.withRewind()?.contentToString()
   }
 }
diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/primitiveSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/primitiveSerializerTest.kt
index 871ffd9..13c6c50 100644
--- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/primitiveSerializerTest.kt
+++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/primitiveSerializerTest.kt
@@ -24,6 +24,7 @@ import de.justjanne.libquassel.protocol.models.types.QtType
 import de.justjanne.libquassel.protocol.models.types.QuasselType
 import de.justjanne.libquassel.protocol.serializers.PrimitiveSerializer
 import de.justjanne.libquassel.protocol.testutil.matchers.ByteBufferMatcher
+import de.justjanne.libquassel.protocol.util.withRewind
 import org.hamcrest.Matcher
 import org.hamcrest.MatcherAssert.assertThat
 import org.junit.jupiter.api.Assertions.assertEquals
@@ -76,7 +77,7 @@ inline fun <reified T : Any?> primitiveSerializerTest(
 ) {
   if (encoded != null) {
     if (deserializeFeatureSet != null) {
-      val after = serializer.deserialize(encoded.rewind(), deserializeFeatureSet)
+      val after = serializer.deserialize(encoded.withRewind(), deserializeFeatureSet)
       assertEquals(0, encoded.remaining())
       if (matcher != null) {
         assertThat(after, matcher(value))
@@ -88,7 +89,7 @@ inline fun <reified T : Any?> primitiveSerializerTest(
       val after = useChainedByteBuffer {
         serializer.serialize(it, value, serializeFeatureSet)
       }
-      assertThat(after, ByteBufferMatcher(encoded.rewind()))
+      assertThat(after, ByteBufferMatcher(encoded.withRewind()))
     }
   }
   for (featureSet in featureSets) {
diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/serializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/serializerTest.kt
index 1af35db..c1dfef9 100644
--- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/serializerTest.kt
+++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/serializerTest.kt
@@ -22,6 +22,7 @@ import de.justjanne.libquassel.protocol.features.FeatureSet
 import de.justjanne.libquassel.protocol.io.useChainedByteBuffer
 import de.justjanne.libquassel.protocol.serializers.PrimitiveSerializer
 import de.justjanne.libquassel.protocol.testutil.matchers.ByteBufferMatcher
+import de.justjanne.libquassel.protocol.util.withRewind
 import org.hamcrest.Matcher
 import org.hamcrest.MatcherAssert.assertThat
 import org.junit.jupiter.api.Assertions.assertEquals
@@ -37,7 +38,7 @@ fun <T : Any?> serializerTest(
 ) {
   if (encoded != null) {
     if (deserializeFeatureSet != null) {
-      val after = serializer.deserialize(encoded.rewind(), deserializeFeatureSet)
+      val after = serializer.deserialize(encoded.withRewind(), deserializeFeatureSet)
       assertEquals(0, encoded.remaining())
       if (matcher != null) {
         assertThat(after, matcher(value))
@@ -49,7 +50,7 @@ fun <T : Any?> serializerTest(
       val after = useChainedByteBuffer {
         serializer.serialize(it, value, serializeFeatureSet)
       }
-      assertThat(after, ByteBufferMatcher(encoded.rewind()))
+      assertThat(after, ByteBufferMatcher(encoded.withRewind()))
     }
   }
 }
diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/signalProxySerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/signalProxySerializerTest.kt
index 2f4c502..782d6a5 100644
--- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/signalProxySerializerTest.kt
+++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/signalProxySerializerTest.kt
@@ -23,6 +23,7 @@ import de.justjanne.libquassel.protocol.io.useChainedByteBuffer
 import de.justjanne.libquassel.protocol.models.SignalProxyMessage
 import de.justjanne.libquassel.protocol.serializers.SignalProxyMessageSerializer
 import de.justjanne.libquassel.protocol.testutil.matchers.ByteBufferMatcher
+import de.justjanne.libquassel.protocol.util.withRewind
 import org.hamcrest.Matcher
 import org.hamcrest.MatcherAssert.assertThat
 import java.nio.ByteBuffer
@@ -50,7 +51,7 @@ inline fun <reified T : SignalProxyMessage> signalProxySerializerTest(
         useChainedByteBuffer {
           SignalProxyMessageSerializer.serialize(it, value, serializeFeatureSet)
         },
-        ByteBufferMatcher(encoded.rewind())
+        ByteBufferMatcher(encoded.withRewind())
       )
     }
   }
-- 
GitLab