Skip to content

Commit 6049f48

Browse files
author
dmitry.naydanov
committed
Using of Base64Decoder refactored.
1 parent dcbbbad commit 6049f48

File tree

7 files changed

+62
-49
lines changed

7 files changed

+62
-49
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.jetbrains.jps.incremental.scala.remote
2+
3+
import com.intellij.util.Base64Converter
4+
/**
5+
* User: Dmitry.Naydanov
6+
* Date: 19.04.17.
7+
*/
8+
9+
trait Base64User {
10+
def decodeBase64(s: String): String = Base64Converter.decode(s)
11+
def decodeBase64(bts: Array[Byte]): Array[Byte] = Base64Converter.decode(bts)
12+
def encodeBase64(s: String): String = Base64Converter.encode(s)
13+
def encodeBase64(octetString: Array[Byte]): String = Base64Converter.encode(octetString)
14+
}

compiler-settings/src/org/jetbrains/jps/incremental/scala/remote/RemoteResourceOwner.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package org.jetbrains.jps.incremental.scala.remote
33
import java.io._
44
import java.net.{InetAddress, Socket}
55

6-
import com.intellij.util.Base64Converter
76
import com.martiansoftware.nailgun.NGConstants
87
import org.jetbrains.jps.incremental.messages.BuildMessage.Kind
98
import org.jetbrains.jps.incremental.scala._
@@ -12,15 +11,15 @@ import org.jetbrains.jps.incremental.scala._
1211
* @author Pavel Fatin
1312
* @author Dmitry Naydanov
1413
*/
15-
trait RemoteResourceOwner {
14+
trait RemoteResourceOwner extends Base64User {
1615
protected val address: InetAddress
1716
protected val port: Int
1817

1918
protected val currentDirectory = System.getProperty("user.dir")
2019
protected val serverAlias = "compile-server"
2120

2221
def send(command: String, arguments: Seq[String], client: Client) {
23-
val encodedArgs = arguments.map(s => Base64Converter.encode(s.getBytes("UTF-8")))
22+
val encodedArgs = arguments.map(s => encodeBase64(s.getBytes("UTF-8")))
2423
using(new Socket(address, port)) { socket =>
2524
using(new DataOutputStream(new BufferedOutputStream(socket.getOutputStream))) { output =>
2625
createChunks(command, encodedArgs).foreach(_.writeTo(output))
@@ -43,7 +42,7 @@ trait RemoteResourceOwner {
4342
return
4443
case Chunk(NGConstants.CHUNKTYPE_STDOUT, data) =>
4544
try {
46-
val event = Event.fromBytes(Base64Converter.decode(data))
45+
val event = Event.fromBytes(decodeBase64(data))
4746
processor.process(event)
4847
} catch {
4948
case e: Exception =>

compiler-settings/src/org/jetbrains/jps/incremental/scala/remote/play/SbtWatcherMain.scala

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,16 @@ package org.jetbrains.jps.incremental.scala.remote.play
33
import java.io.{BufferedWriter, OutputStreamWriter, PrintStream}
44
import java.net.{InetAddress, Socket}
55

6-
import com.intellij.util.Base64Converter
76
import com.martiansoftware.nailgun.NGContext
87
import org.jetbrains.jps.incremental.messages.BuildMessage
9-
import org.jetbrains.jps.incremental.scala.remote.MessageEvent
8+
import org.jetbrains.jps.incremental.scala.remote.{Base64User, MessageEvent}
109
import org.jetbrains.jps.incremental.scala.remote.play.WatcherCommands._
1110

1211
/**
1312
* User: Dmitry.Naydanov
1413
* Date: 12.02.15.
1514
*/
16-
object SbtWatcherMain {
15+
object SbtWatcherMain extends Base64User {
1716
private val IT_COMPLETED_MESSAGE = "Waiting for source changes... (press enter to interrupt)"
1817
private val MESSAGE_LIMIT = 12
1918
private val WAIT_TIME = 150
@@ -30,15 +29,15 @@ object SbtWatcherMain {
3029

3130
private def handle(arguments: Seq[String], out: PrintStream) {
3231
def write2source(message: String) {
33-
out.write(Base64Converter.encode(MessageEvent(BuildMessage.Kind.INFO, message, None, None, None).toBytes).getBytes)
32+
out.write(encodeBase64(MessageEvent(BuildMessage.Kind.INFO, message, None, None, None).toBytes).getBytes)
3433
}
3534

3635
def createConsumer(delegate: MessageConsumer) = new CachingMessageConsumer(delegate) {
3736
override protected def needFlush(msg: String, msgCount: Int): Boolean =
3837
msg.trim.endsWith(IT_COMPLETED_MESSAGE) || msgCount > MESSAGE_LIMIT
3938
}
4039

41-
val decoded = arguments map Base64Converter.decode
40+
val decoded = arguments map decodeBase64
4241

4342
decoded.head match {
4443
case cm@(START | LOOP) =>
@@ -55,12 +54,12 @@ object SbtWatcherMain {
5554
writer.close()
5655
}
5756
catch {
58-
case ex: Exception =>
57+
case _: Exception =>
5958
}
6059
}
6160
} else new MessageConsumer {
6261
override def consume(message: String) {
63-
val encoded = Base64Converter.encode(MessageEvent(BuildMessage.Kind.INFO, message, None, None, None).toBytes)
62+
val encoded = encodeBase64(MessageEvent(BuildMessage.Kind.INFO, message, None, None, None).toBytes)
6463
out write encoded.getBytes
6564
}
6665
}

jps-plugin/src/org/jetbrains/jps/incremental/scala/local/worksheet/WorksheetServer.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@ import java.io._
44
import java.net.URL
55
import java.nio.ByteBuffer
66

7-
import com.intellij.util.Base64Converter
87
import com.martiansoftware.nailgun.ThreadLocalPrintStream
98
import org.jetbrains.jps.incremental.scala.data.CompilerJars
109
import org.jetbrains.jps.incremental.scala.local.worksheet.compatibility.WorksheetArgsJava
11-
import org.jetbrains.jps.incremental.scala.remote.{Arguments, EventGeneratingClient, WorksheetOutputEvent}
10+
import org.jetbrains.jps.incremental.scala.remote.{Arguments, Base64User, EventGeneratingClient, WorksheetOutputEvent}
1211

1312
import scala.collection.JavaConverters._
1413

@@ -76,7 +75,7 @@ object WorksheetServer {
7675

7776
case class ReplArgs(sessionId: String, codeChunk: String)
7877

79-
class MyEncodingOutputStream(delegateOut: PrintStream, standalone: Boolean) extends OutputStream {
78+
class MyEncodingOutputStream(delegateOut: PrintStream, standalone: Boolean) extends OutputStream with Base64User {
8079
private var capacity = 1200
8180
private var buffer = ByteBuffer.allocate(capacity)
8281

@@ -102,7 +101,7 @@ object WorksheetServer {
102101
if (buffer.position() == 0) return
103102
val event = WorksheetOutputEvent(new String(buffer.array(), 0, buffer.position()))
104103
buffer.clear()
105-
val encode = Base64Converter.encode(event.toBytes)
104+
val encode = encodeBase64(event.toBytes)
106105
delegateOut.write(if (standalone && !encode.endsWith("=")) (encode + "=").getBytes else encode.getBytes)
107106
}
108107
}

jps-plugin/src/org/jetbrains/jps/incremental/scala/remote/Main.scala

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ package remote
44
import java.io._
55
import java.util.{Timer, TimerTask}
66

7-
import com.intellij.util.Base64Converter
87
import com.martiansoftware.nailgun.NGContext
98
import org.jetbrains.jps.incremental.messages.BuildMessage.Kind
109
import org.jetbrains.jps.incremental.scala.local.LocalServer
@@ -14,11 +13,11 @@ import org.jetbrains.jps.incremental.scala.local.worksheet.WorksheetServer
1413
* @author Pavel Fatin
1514
* @author Dmitry Naydanov
1615
*/
17-
object Main {
16+
object Main extends Base64User {
1817
private val Server = new LocalServer()
1918
private val worksheetServer = new WorksheetServer
2019

21-
private var shutdownTimer: Timer = null
20+
private var shutdownTimer: Timer = _
2221

2322
def nailMain(context: NGContext) {
2423
cancelShutdown()
@@ -31,25 +30,7 @@ object Main {
3130
}
3231

3332
private def make(arguments: Seq[String], out: PrintStream, standalone: Boolean) {
34-
var hasErrors = false
35-
36-
val client = {
37-
val eventHandler = (event: Event) => {
38-
val encode = Base64Converter.encode(event.toBytes)
39-
out.write((if (standalone && !encode.endsWith("=")) encode + "=" else encode).getBytes)
40-
}
41-
new EventGeneratingClient(eventHandler, out.checkError) {
42-
override def error(text: String, source: Option[File], line: Option[Long], column: Option[Long]) {
43-
hasErrors = true
44-
super.error(text, source, line, column)
45-
}
46-
47-
override def message(kind: Kind, text: String, source: Option[File], line: Option[Long], column: Option[Long]) {
48-
if (kind == Kind.ERROR) hasErrors = true
49-
super.message(kind, text, source, line, column)
50-
}
51-
}
52-
}
33+
val client = new MyEventGeneratingClient(standalone, out)
5334

5435
val oldOut = System.out
5536
// Suppress any stdout data, interpret such data as error
@@ -59,15 +40,15 @@ object Main {
5940
val args = {
6041
val strings = arguments.map {
6142
arg =>
62-
val s = new String(Base64Converter.decode(arg.getBytes), "UTF-8")
43+
val s = new String(decodeBase64(arg.getBytes), "UTF-8")
6344
if (s == "#STUB#") "" else s
6445
}
6546
Arguments.from(strings)
6647
}
67-
48+
6849
if (!worksheetServer.isRepl(args)) Server.compile(args.sbtData, args.compilerData, args.compilationData, client)
6950

70-
if (!hasErrors) worksheetServer.loadAndRun(args, out, client, standalone)
51+
if (!client.hadErrors) worksheetServer.loadAndRun(args, out, client, standalone)
7152
} catch {
7253
case e: Throwable =>
7354
client.trace(e)
@@ -91,4 +72,26 @@ object Main {
9172
shutdownTimer.schedule(shutdownTask, delayMs)
9273
}
9374
}
75+
76+
class MyEventGeneratingClient(standalone: Boolean, out: PrintStream) extends EventGeneratingClient(
77+
(event: Event) => {
78+
val encode = encodeBase64(event.toBytes)
79+
out.write((if (standalone && !encode.endsWith("=")) encode + "=" else encode).getBytes)
80+
},
81+
out.checkError
82+
) {
83+
private var hasErrors = false
84+
85+
def hadErrors: Boolean = hasErrors
86+
87+
override def error(text: String, source: Option[File], line: Option[Long], column: Option[Long]) {
88+
hasErrors = true
89+
super.error(text, source, line, column)
90+
}
91+
92+
override def message(kind: Kind, text: String, source: Option[File], line: Option[Long], column: Option[Long]) {
93+
if (kind == Kind.ERROR) hasErrors = true
94+
super.message(kind, text, source, line, column)
95+
}
96+
}
9497
}

jps-plugin/src/org/jetbrains/jps/incremental/scala/remote/play/SbtWatcherMain.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,16 @@ package org.jetbrains.jps.incremental.scala.remote.play
22

33
import java.io.PrintStream
44

5-
import com.intellij.util.Base64Converter
65
import com.martiansoftware.nailgun.NGContext
76
import org.jetbrains.jps.incremental.messages.BuildMessage
8-
import org.jetbrains.jps.incremental.scala.remote.MessageEvent
7+
import org.jetbrains.jps.incremental.scala.remote.{Base64User, MessageEvent}
98
import org.jetbrains.jps.incremental.scala.remote.play.WatcherCommands._
109

1110
/**
1211
* User: Dmitry.Naydanov
1312
* Date: 12.02.15.
1413
*/
15-
object SbtWatcherMain {
14+
object SbtWatcherMain extends Base64User {
1615
private var currentExec: Option[(SbtWatcherExec, Seq[String])] = None
1716

1817
def nailMain(context: NGContext) {
@@ -26,7 +25,7 @@ object SbtWatcherMain {
2625
private def handle(arguments: Seq[String], out: PrintStream) {
2726
val messageConsumer = new MessageConsumer {
2827
override def consume(message: String) {
29-
out.write(Base64Converter.encode(MessageEvent(BuildMessage.Kind.INFO, message, None, None, None).toBytes).getBytes)
28+
out.write(encodeBase64(MessageEvent(BuildMessage.Kind.INFO, message, None, None, None).toBytes).getBytes)
3029
}
3130
}
3231

src/org/jetbrains/plugins/scala/worksheet/server/RemoteServerConnector.scala

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import com.intellij.openapi.project.Project
1414
import com.intellij.openapi.roots.ModuleRootManager
1515
import com.intellij.openapi.vfs.VirtualFile
1616
import com.intellij.psi.PsiManager
17-
import com.intellij.util.Base64Converter
1817
import org.jetbrains.jps.incremental.ModuleLevelBuilder.ExitCode
1918
import org.jetbrains.jps.incremental.messages.BuildMessage
2019
import org.jetbrains.jps.incremental.messages.BuildMessage.Kind
@@ -33,7 +32,8 @@ import org.jetbrains.plugins.scala.worksheet.ui.{WorksheetEditorPrinterBase, Wor
3332
* Date: 1/28/14
3433
*/
3534
class RemoteServerConnector(module: Module, worksheet: File, output: File, worksheetClassName: String,
36-
replArgs: Option[ReplModeArgs], needsCheck: Boolean) extends RemoteServerConnectorBase(module: Module, Seq(worksheet), output, needsCheck) {
35+
replArgs: Option[ReplModeArgs], needsCheck: Boolean)
36+
extends RemoteServerConnectorBase(module: Module, Seq(worksheet), output, needsCheck) with Base64User {
3737

3838
val runType: WorksheetMakeType = WorksheetCompiler.getRunType(module.getProject)
3939

@@ -68,8 +68,8 @@ class RemoteServerConnector(module: Module, worksheet: File, output: File, works
6868
val eventClient = new ClientEventProcessor(client)
6969

7070
val encodedArgs = arguments map {
71-
case "" => Base64Converter.encode("#STUB#" getBytes "UTF-8")
72-
case s => Base64Converter.encode(s getBytes "UTF-8")
71+
case "" => encodeBase64("#STUB#" getBytes "UTF-8")
72+
case s => encodeBase64(s getBytes "UTF-8")
7373
}
7474

7575
val errorHandler = new ErrorHandler {
@@ -84,7 +84,7 @@ class RemoteServerConnector(module: Module, worksheet: File, output: File, works
8484
}
8585

8686
new NonServerRunner(project, Some(errorHandler)).buildProcess(encodedArgs, (text: String) => {
87-
val event = Event.fromBytes(Base64Converter.decode(text.getBytes("UTF-8")))
87+
val event = Event.fromBytes(decodeBase64(text.getBytes("UTF-8")))
8888
eventClient.process(event)
8989
})
9090
}

0 commit comments

Comments
 (0)