diff --git a/core/src/main/java/io/grpc/InternalKnownTransport.java b/core/src/main/java/io/grpc/InternalKnownTransport.java index e765559de6..d49a09bfdb 100644 --- a/core/src/main/java/io/grpc/InternalKnownTransport.java +++ b/core/src/main/java/io/grpc/InternalKnownTransport.java @@ -33,6 +33,8 @@ package io.grpc; /** * All known transports. + * + *

Make sure to update MethodDescriptor.rawMethodNames if this is changed. */ @Internal public enum InternalKnownTransport { diff --git a/core/src/main/java/io/grpc/InternalMetadata.java b/core/src/main/java/io/grpc/InternalMetadata.java index 286bcdcb23..cf27b2bb2a 100644 --- a/core/src/main/java/io/grpc/InternalMetadata.java +++ b/core/src/main/java/io/grpc/InternalMetadata.java @@ -46,27 +46,11 @@ public final class InternalMetadata { /** * A specialized plain ASCII marshaller. Both input and output are assumed to be valid header * ASCII. + * + *

Extended here to break the dependency. */ @Internal - public interface TrustedAsciiMarshaller { - /** - * Serialize a metadata value to a ASCII string that contains only the characters listed in the - * class comment of {@link io.grpc.Metadata.AsciiMarshaller}. Otherwise the output may be - * considered invalid and discarded by the transport, or the call may fail. - * - * @param value to serialize - * @return serialized version of value, or null if value cannot be transmitted. - */ - byte[] toAsciiString(T value); - - /** - * Parse a serialized metadata value from an ASCII string. - * - * @param serialized value of metadata to parse - * @return a parsed instance of type T - */ - T parseAsciiString(byte[] serialized); - } + public interface TrustedAsciiMarshaller extends Metadata.TrustedAsciiMarshaller {} /** * Copy of StandardCharsets, which is only available on Java 1.7 and above. @@ -79,7 +63,6 @@ public final class InternalMetadata { return Metadata.Key.of(name, marshaller); } - @Internal public static Metadata newMetadata(byte[]... binaryValues) { return new Metadata(binaryValues); diff --git a/core/src/main/java/io/grpc/InternalMethodDescriptor.java b/core/src/main/java/io/grpc/InternalMethodDescriptor.java index 3246742ddf..0622c6f44d 100644 --- a/core/src/main/java/io/grpc/InternalMethodDescriptor.java +++ b/core/src/main/java/io/grpc/InternalMethodDescriptor.java @@ -46,10 +46,10 @@ public final class InternalMethodDescriptor { } public Object geRawMethodName(MethodDescriptor md) { - return md.getRawMethodName(transport); + return md.getRawMethodName(transport.ordinal()); } public void setRawMethodName(MethodDescriptor md, Object o) { - md.setRawMethodName(transport, o); + md.setRawMethodName(transport.ordinal(), o); } } diff --git a/core/src/main/java/io/grpc/Metadata.java b/core/src/main/java/io/grpc/Metadata.java index f5a98de291..3446ef822d 100644 --- a/core/src/main/java/io/grpc/Metadata.java +++ b/core/src/main/java/io/grpc/Metadata.java @@ -39,8 +39,6 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.io.BaseEncoding; -import io.grpc.InternalMetadata.TrustedAsciiMarshaller; - import java.nio.ByteBuffer; import java.util.Arrays; import java.util.BitSet; @@ -785,4 +783,28 @@ public final class Metadata { return marshaller.parseAsciiString(serialized); } } + + /** + * A specialized plain ASCII marshaller. Both input and output are assumed to be valid header + * ASCII. + */ + interface TrustedAsciiMarshaller { + /** + * Serialize a metadata value to a ASCII string that contains only the characters listed in the + * class comment of {@link io.grpc.Metadata.AsciiMarshaller}. Otherwise the output may be + * considered invalid and discarded by the transport, or the call may fail. + * + * @param value to serialize + * @return serialized version of value, or null if value cannot be transmitted. + */ + byte[] toAsciiString(T value); + + /** + * Parse a serialized metadata value from an ASCII string. + * + * @param serialized value of metadata to parse + * @return a parsed instance of type T + */ + T parseAsciiString(byte[] serialized); + } } diff --git a/core/src/main/java/io/grpc/MethodDescriptor.java b/core/src/main/java/io/grpc/MethodDescriptor.java index dc274c97a1..285a133605 100644 --- a/core/src/main/java/io/grpc/MethodDescriptor.java +++ b/core/src/main/java/io/grpc/MethodDescriptor.java @@ -57,15 +57,16 @@ public class MethodDescriptor { private final boolean idempotent; private final boolean safe; - private final AtomicReferenceArray rawMethodNames = - new AtomicReferenceArray(InternalKnownTransport.values().length); + // Must be set to InternalKnownTransport.values().length + // Not referenced to break the dependency. + private final AtomicReferenceArray rawMethodNames = new AtomicReferenceArray(1); - final Object getRawMethodName(InternalKnownTransport t) { - return rawMethodNames.get(t.ordinal()); + final Object getRawMethodName(int transportOrdinal) { + return rawMethodNames.get(transportOrdinal); } - final void setRawMethodName(InternalKnownTransport t, Object o) { - rawMethodNames.lazySet(t.ordinal(), o); + final void setRawMethodName(int transportOrdinal, Object o) { + rawMethodNames.lazySet(transportOrdinal, o); } /**