aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-03-21 10:36:31 +0000
committerMichael Williamson <mike@zwobble.org>2026-03-21 10:37:00 +0000
commit246b98b9fa2f8612caeeb04decdcb918eb710c7c (patch)
tree78fabf94e7f76ae29cfba69447885500654859a0 /src
parent985db8a456f1db471e3a3aaac0deeb5bffcdb7eb (diff)
Extract SourceToProtobuf
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/protobuf/PatioToProtobuf.java68
-rw-r--r--src/main/java/org/shedlang/compiler/sources/protobuf/SourceToProtobuf.java77
2 files changed, 80 insertions, 65 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/protobuf/PatioToProtobuf.java b/src/main/java/org/shedlang/compiler/patio/protobuf/PatioToProtobuf.java
index 0dbbc708..e3479ed4 100644
--- a/src/main/java/org/shedlang/compiler/patio/protobuf/PatioToProtobuf.java
+++ b/src/main/java/org/shedlang/compiler/patio/protobuf/PatioToProtobuf.java
@@ -1,12 +1,12 @@
package org.shedlang.compiler.patio.protobuf;
import org.shedlang.compiler.patio.*;
-import org.shedlang.compiler.sources.*;
-import org.shedlang.compiler.sources.protobuf.SourcesProtobuf;
-import org.zwobble.sourcetext.SourceRange;
+import org.shedlang.compiler.sources.Source;
import java.util.Optional;
+import static org.shedlang.compiler.sources.protobuf.SourceToProtobuf.sourceToProtobuf;
+
public class PatioToProtobuf {
public PatioProtobuf.PatioCompilationUnit compilationUnitToProtobuf(
PatioCompilationUnit compilationUnit
@@ -96,66 +96,4 @@ public class PatioToProtobuf {
case PUBLIC -> PatioProtobuf.PatioVisibility.PUBLIC;
};
}
-
- private SourcesProtobuf.Source sourceToProtobuf(
- Source source,
- Source parentSource
- ) {
- return sourceToProtobuf(source, Optional.of(parentSource));
- }
-
- private SourcesProtobuf.Source sourceToProtobuf(
- Source source,
- Optional<Source> parentSource
- ) {
- var builder = SourcesProtobuf.Source.newBuilder();
-
- switch (source) {
- case NullSource nullSource -> {
- builder.setNullSource(
- SourcesProtobuf.NullSource.newBuilder().build()
- );
- }
- case RuntimeSource runtimeSource -> {
- builder.setRuntimeSource(
- SourcesProtobuf.RuntimeSource.newBuilder().build()
- );
- }
- case FileFragmentSource fileFragmentSource -> {
- builder.setFileFragmentSource(
- fileFragmentSourceToProtobuf(fileFragmentSource, parentSource)
- );
- }
- default -> {
- throw new UnsupportedOperationException("Unhandled source: " + source);
- }
- }
-
- return builder.build();
- }
-
- private SourcesProtobuf.FileFragmentSource fileFragmentSourceToProtobuf(
- FileFragmentSource source,
- Optional<Source> parentSource
- ) {
- var builder = SourcesProtobuf.FileFragmentSource.newBuilder();
-
- var sourceTextName = source.sourceRange().sourceText().name();
- if (!(
- parentSource.isPresent() &&
- parentSource.get() instanceof FileFragmentSource(SourceRange parentSourceRange) &&
- parentSourceRange.sourceText().name().equals(sourceTextName)
- )) {
- builder.setSourceText(
- SourcesProtobuf.SourceText.newBuilder()
- .setName(sourceTextName)
- .build()
- );
- }
-
- builder.setStartCharacterIndex(source.sourceRange().start().characterIndex());
- builder.setEndCharacterIndex(source.sourceRange().end().characterIndex());
-
- return builder.build();
- }
}
diff --git a/src/main/java/org/shedlang/compiler/sources/protobuf/SourceToProtobuf.java b/src/main/java/org/shedlang/compiler/sources/protobuf/SourceToProtobuf.java
new file mode 100644
index 00000000..2495557b
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/sources/protobuf/SourceToProtobuf.java
@@ -0,0 +1,77 @@
+package org.shedlang.compiler.sources.protobuf;
+
+import org.shedlang.compiler.sources.FileFragmentSource;
+import org.shedlang.compiler.sources.NullSource;
+import org.shedlang.compiler.sources.RuntimeSource;
+import org.shedlang.compiler.sources.Source;
+import org.zwobble.sourcetext.SourceRange;
+
+import java.util.Optional;
+
+public class SourceToProtobuf {
+ private SourceToProtobuf() {
+ }
+
+ public static SourcesProtobuf.Source sourceToProtobuf(
+ Source source,
+ Source parentSource
+ ) {
+ return sourceToProtobuf(source, Optional.of(parentSource));
+ }
+
+ public static SourcesProtobuf.Source sourceToProtobuf(
+ Source source,
+ Optional<Source> parentSource
+ ) {
+ var builder = SourcesProtobuf.Source.newBuilder();
+
+ switch (source) {
+ case NullSource nullSource -> {
+ builder.setNullSource(
+ SourcesProtobuf.NullSource.newBuilder().build()
+ );
+ }
+ case RuntimeSource runtimeSource -> {
+ builder.setRuntimeSource(
+ SourcesProtobuf.RuntimeSource.newBuilder().build()
+ );
+ }
+ case FileFragmentSource fileFragmentSource -> {
+ builder.setFileFragmentSource(
+ fileFragmentSourceToProtobuf(fileFragmentSource, parentSource)
+ );
+ }
+ default -> {
+ throw new UnsupportedOperationException("Unhandled source: " + source);
+ }
+ }
+
+ return builder.build();
+ }
+
+ private static SourcesProtobuf.FileFragmentSource fileFragmentSourceToProtobuf(
+ FileFragmentSource source,
+ Optional<Source> parentSource
+ ) {
+ var builder = SourcesProtobuf.FileFragmentSource.newBuilder();
+
+ var sourceTextName = source.sourceRange().sourceText().name();
+ if (!(
+ parentSource.isPresent() &&
+ parentSource.get() instanceof FileFragmentSource(
+ SourceRange parentSourceRange) &&
+ parentSourceRange.sourceText().name().equals(sourceTextName)
+ )) {
+ builder.setSourceText(
+ SourcesProtobuf.SourceText.newBuilder()
+ .setName(sourceTextName)
+ .build()
+ );
+ }
+
+ builder.setStartCharacterIndex(source.sourceRange().start().characterIndex());
+ builder.setEndCharacterIndex(source.sourceRange().end().characterIndex());
+
+ return builder.build();
+ }
+}