diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-03-21 10:36:31 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-03-21 10:37:00 +0000 |
| commit | 246b98b9fa2f8612caeeb04decdcb918eb710c7c (patch) | |
| tree | 78fabf94e7f76ae29cfba69447885500654859a0 /src | |
| parent | 985db8a456f1db471e3a3aaac0deeb5bffcdb7eb (diff) | |
Extract SourceToProtobuf
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/patio/protobuf/PatioToProtobuf.java | 68 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/sources/protobuf/SourceToProtobuf.java | 77 |
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(); + } +} |
