diff --git a/platform/platform-impl/src/com/intellij/util/UrlImpl.java b/platform/platform-impl/src/com/intellij/util/UrlImpl.java index 023865164405..6876998e0a03 100644 --- a/platform/platform-impl/src/com/intellij/util/UrlImpl.java +++ b/platform/platform-impl/src/com/intellij/util/UrlImpl.java @@ -44,7 +44,7 @@ public final class UrlImpl implements Url { public UrlImpl(@Nullable String scheme, @Nullable String authority, @Nullable String path, @Nullable String parameters) { this.scheme = scheme; this.authority = authority; - this.path = StringUtil.isEmpty(path) && !StringUtil.isEmpty(authority) ? "/" : StringUtil.notNullize(path); + this.path = StringUtil.notNullize(path); this.parameters = StringUtil.nullize(parameters); } @@ -112,7 +112,7 @@ public final class UrlImpl implements Url { // relative path - special url, encoding is not required // authority is null in case of URI - if ((path.charAt(0) != '/' || authority == null) && !isInLocalFileSystem()) { + if ((authority == null || (!path.isEmpty() && path.charAt(0) != '/')) && !isInLocalFileSystem()) { return toDecodedForm(); } diff --git a/platform/platform-impl/src/org/jetbrains/io/ChannelBufferToString.java b/platform/platform-impl/src/org/jetbrains/io/ChannelBufferToString.java index df61a92f987e..9bf08d705a4e 100644 --- a/platform/platform-impl/src/org/jetbrains/io/ChannelBufferToString.java +++ b/platform/platform-impl/src/org/jetbrains/io/ChannelBufferToString.java @@ -1,6 +1,5 @@ package org.jetbrains.io; -import com.intellij.util.text.CharArrayCharSequence; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufUtil; import io.netty.buffer.ByteBufUtilEx; @@ -13,13 +12,13 @@ import java.nio.CharBuffer; public final class ChannelBufferToString { @NotNull public static CharSequence readChars(@NotNull ByteBuf buffer) throws IOException { - return new MyCharArrayCharSequence(readIntoCharBuffer(buffer, buffer.readableBytes(), null)); + return new JsonReaderEx.CharSequenceBackedByChars(readIntoCharBuffer(buffer, buffer.readableBytes(), null)); } @SuppressWarnings("unused") @NotNull public static CharSequence readChars(@NotNull ByteBuf buffer, int byteCount) throws IOException { - return new MyCharArrayCharSequence(readIntoCharBuffer(buffer, byteCount, null)); + return new JsonReaderEx.CharSequenceBackedByChars(readIntoCharBuffer(buffer, byteCount, null)); } @NotNull @@ -34,16 +33,4 @@ public final class ChannelBufferToString { public static void writeIntAsAscii(int value, @NotNull ByteBuf buffer) { ByteBufUtil.writeAscii(buffer, new StringBuilder().append(value)); } - - // we must return string on subSequence() - JsonReaderEx will call toString in any case - public static final class MyCharArrayCharSequence extends CharArrayCharSequence { - public MyCharArrayCharSequence(@NotNull CharBuffer charBuffer) { - super(charBuffer.array(), charBuffer.arrayOffset(), charBuffer.position()); - } - - @Override - public CharSequence subSequence(int start, int end) { - return start == 0 && end == length() ? this : new String(myChars, myStart + start, end - start); - } - } } \ No newline at end of file diff --git a/platform/platform-impl/src/org/jetbrains/io/JsonReaderEx.java b/platform/platform-impl/src/org/jetbrains/io/JsonReaderEx.java index 37cf6bf7066c..aa783b158764 100644 --- a/platform/platform-impl/src/org/jetbrains/io/JsonReaderEx.java +++ b/platform/platform-impl/src/org/jetbrains/io/JsonReaderEx.java @@ -17,10 +17,12 @@ package org.jetbrains.io; import com.google.gson.JsonParseException; import com.google.gson.stream.JsonToken; +import com.intellij.util.text.CharArrayCharSequence; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.Closeable; +import java.nio.CharBuffer; import java.util.Arrays; public final class JsonReaderEx implements Closeable { @@ -116,6 +118,22 @@ public final class JsonReaderEx implements Closeable { this.stack = stack; } + // we must return string on subSequence() - JsonReaderEx will call toString in any case + public static final class CharSequenceBackedByChars extends CharArrayCharSequence { + public CharSequenceBackedByChars(@NotNull CharBuffer charBuffer) { + super(charBuffer.array(), charBuffer.arrayOffset(), charBuffer.position()); + } + + public CharSequenceBackedByChars(@NotNull char[] chars, int start, int end) { + super(chars, start, end); + } + + @Override + public CharSequence subSequence(int start, int end) { + return start == 0 && end == length() ? this : new String(myChars, myStart + start, end - start); + } + } + private final static class JsonScope { /** * An array with no elements requires no separators or newlines before diff --git a/platform/platform-impl/src/org/jetbrains/io/MessageDecoder.java b/platform/platform-impl/src/org/jetbrains/io/MessageDecoder.java index 6746a4c1d2f1..3f672c3916d6 100644 --- a/platform/platform-impl/src/org/jetbrains/io/MessageDecoder.java +++ b/platform/platform-impl/src/org/jetbrains/io/MessageDecoder.java @@ -44,7 +44,7 @@ public abstract class MessageDecoder extends Decoder { chunkedContent = null; consumedContentByteCount = 0; } - return new ChannelBufferToString.MyCharArrayCharSequence(ChannelBufferToString.readIntoCharBuffer(input, required, charBuffer)); + return new JsonReaderEx.CharSequenceBackedByChars(ChannelBufferToString.readIntoCharBuffer(input, required, charBuffer)); } } diff --git a/platform/script-debugger/backend/src/org/jetbrains/debugger/DebugEventAdapter.java b/platform/script-debugger/backend/src/org/jetbrains/debugger/DebugEventAdapter.java index 3ee0bb525532..0724cfe6c989 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/debugger/DebugEventAdapter.java +++ b/platform/script-debugger/backend/src/org/jetbrains/debugger/DebugEventAdapter.java @@ -18,7 +18,7 @@ public abstract class DebugEventAdapter implements DebugEventListener { } @Override - public void scriptAdded(@NotNull Script script, @Nullable String sourceMapData) { + public void scriptAdded(@NotNull Script script, @Nullable CharSequence sourceMapData) { } @Override diff --git a/platform/script-debugger/backend/src/org/jetbrains/debugger/DebugEventListener.java b/platform/script-debugger/backend/src/org/jetbrains/debugger/DebugEventListener.java index 7a523229adc7..d3f6ac2a649f 100755 --- a/platform/script-debugger/backend/src/org/jetbrains/debugger/DebugEventListener.java +++ b/platform/script-debugger/backend/src/org/jetbrains/debugger/DebugEventListener.java @@ -29,7 +29,7 @@ public interface DebugEventListener extends EventListener { /** * Reports that a new script has been loaded. */ - void scriptAdded(@NotNull Script script, @Nullable String sourceMapData); + void scriptAdded(@NotNull Script script, @Nullable CharSequence sourceMapData); void sourceMapFound(@NotNull Script script, @Nullable Url sourceMapUrl, @NotNull String sourceMapData); diff --git a/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManager.java b/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManager.java index 1132b284e16d..4b3a20e0f6ec 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManager.java +++ b/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManager.java @@ -2,6 +2,7 @@ package org.jetbrains.debugger; import com.intellij.util.CommonProcessors; import com.intellij.util.Processor; +import com.intellij.util.Url; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.concurrency.Promise; @@ -37,6 +38,9 @@ public interface ScriptManager { @Nullable Script findScriptByUrl(@NotNull String rawUrl); + @Nullable + Script findScriptByUrl(@NotNull Url url); + @Nullable Script findScriptById(@NotNull String id); diff --git a/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManagerBaseEx.java b/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManagerBaseEx.java index 05cca7fd4317..b8286f77b15c 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManagerBaseEx.java +++ b/platform/script-debugger/backend/src/org/jetbrains/debugger/ScriptManagerBaseEx.java @@ -35,7 +35,12 @@ public abstract class ScriptManagerBaseEx