Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
487d19f
Add location to pickle
mpkorstanje Jul 17, 2025
263db33
java: Use Integers in addition to Longs
mpkorstanje Jul 17, 2025
534f855
Merge remote-tracking branch 'origin/main' into limit-use-of-long
mpkorstanje Jul 18, 2025
7bbbf00
Reduce diff
mpkorstanje Jul 18, 2025
6e67701
Reduce diff
mpkorstanje Jul 18, 2025
db27e26
Reduce diff
mpkorstanje Jul 18, 2025
b149e9d
Fix range on nanos
mpkorstanje Jul 18, 2025
c2bc505
Consistency
mpkorstanje Jul 18, 2025
60ec843
Fix location.line bound
mpkorstanje Jul 18, 2025
01acc5c
Fix
mpkorstanje Jul 18, 2025
1fdbf90
Use Java 17
mpkorstanje Nov 4, 2025
fb175cd
Use List.copyOf
mpkorstanje Nov 4, 2025
215ee0c
Merge branch 'limit-use-of-long' into java-17
mpkorstanje Nov 10, 2025
decfffa
Use integers in comparators
mpkorstanje Nov 10, 2025
627b411
Add location after uri. It is sort of the identity
mpkorstanje Nov 10, 2025
09ff4a2
Merge branch 'add-location-to-pickle' into java-17
mpkorstanje Nov 10, 2025
9a4d01e
Use checkstyle
mpkorstanje Nov 10, 2025
4d5aedb
Use checkstyle
mpkorstanje Nov 10, 2025
6fdd10d
Bump version
mpkorstanje Nov 10, 2025
1759833
Run checkstyle in validate phase
mpkorstanje Nov 13, 2025
c13dc7b
Stop using deprecated Jackson methods
mpkorstanje Nov 13, 2025
691581e
Setup parent pom and checkstyle
mpkorstanje Nov 14, 2025
c3b2708
Cleanup dependencies
mpkorstanje Nov 14, 2025
f3ad44c
Remove unused dependencies
mpkorstanje Nov 14, 2025
d6e3057
Merge remote-tracking branch 'origin/main' into java-17
mpkorstanje Nov 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 7 additions & 9 deletions codegen/generators/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -105,25 +105,23 @@ def property_type_from_ref(ref)
class_name(ref)
end

def property_type_from_type(parent_type_name, property_name, property, type:)
def property_type_from_type(parent_type_name, property_name, property)
type = property['type']
return array_type_for(type_for(parent_type_name, nil, property['items'])) if type == 'array'
return property_type_from_enum(enum_name(parent_type_name, property_name, property['enum'])) if property['enum']

unless language_translations_for_data_types.key?(type)
property = select_language_translations_for_data_types(type, property)
unless property
raise "No type mapping for JSONSchema type #{type}. Schema:\n#{JSON.pretty_generate(property)}"
end

if property['enum']
property_type_from_enum(enum_name(parent_type_name, property_name, property['enum']))
else
language_translations_for_data_types.fetch(type)
end
property
end

def type_for(parent_type_name, property_name, property)
if property['$ref']
property_type_from_ref(property['$ref'])
elsif property['type']
property_type_from_type(parent_type_name, property_name, property, type: property['type'])
property_type_from_type(parent_type_name, property_name, property)
else
# Inline schema (not supported)
raise "Property #{property_name} did not define 'type' or '$ref'"
Expand Down
4 changes: 2 additions & 2 deletions codegen/generators/cpp.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ def format_description(raw_description, indent_string: '')

private

def language_translations_for_data_types
def select_language_translations_for_data_types(type, property)
{
'integer' => 'std::size_t',
'string' => 'std::string',
'boolean' => 'bool'
}
}[type]
end
end
end
4 changes: 2 additions & 2 deletions codegen/generators/dotnet.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ def format_description(raw_description, indent_string: '')

private

def language_translations_for_data_types
def select_language_translations_for_data_types(type, property)
{
'integer' => 'long',
'string' => 'string',
'boolean' => 'bool'
}
}[type]
end
end
end
4 changes: 2 additions & 2 deletions codegen/generators/go.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ def property_type_from_ref(ref)

private

def language_translations_for_data_types
def select_language_translations_for_data_types(type, property)
{
'integer' => 'int64',
'string' => 'string',
'boolean' => 'bool'
}
}[type]
end
end
end
22 changes: 15 additions & 7 deletions codegen/generators/java.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ module Generator
# Automatic Code generation overrides for the Java programming language
class Java < Base
def array_type_for(type_name)
"java.util.List<#{type_name}>"
"List<#{type_name}>"
end

def format_description(raw_description, indent_string: '')
Expand All @@ -23,12 +23,20 @@ def format_description(raw_description, indent_string: '')

private

def language_translations_for_data_types
{
'integer' => 'Long',
'string' => 'String',
'boolean' => 'Boolean'
}
def select_language_translations_for_data_types(type, property)
if type == 'integer'
if property['maximum'] and property['maximum'] <= 2147483647
'Integer'
else
'Long'
end
elsif type == 'string'
'String'
elsif type == 'boolean'
'Boolean'
else
nil
end
end
end
end
4 changes: 2 additions & 2 deletions codegen/generators/markdown.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@ def property_type_from_ref(ref)

private

def language_translations_for_data_types
def select_language_translations_for_data_types(type, property)
{
'integer' => 'integer',
'string' => 'string',
'boolean' => 'boolean'
}
}[type]
end
end
end
4 changes: 2 additions & 2 deletions codegen/generators/perl.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,12 @@ def default_value_for_string(property_name, enum)
end
end

def language_translations_for_data_types
def select_language_translations_for_data_types(type, property)
{
'integer' => 'number',
'string' => 'string',
'boolean' => 'boolean'
}
}[type]
end
end
end
8 changes: 4 additions & 4 deletions codegen/generators/php.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,11 @@ def nullable?(property_name, schema)
end

def scalar?(property)
property.key?('type') && language_translations_for_data_types.key?(property['type'])
property.key?('type') && select_language_translations_for_data_types(property['type'], property)
end

def scalar_type_for(property)
language_translations_for_data_types[property['type']]
select_language_translations_for_data_types(property['type'], property)
end

private
Expand All @@ -68,12 +68,12 @@ def default_value(class_name, property_name, property, schema)
super(class_name, property_name, property)
end

def language_translations_for_data_types
def select_language_translations_for_data_types(type, property)
{
'string' => 'string',
'integer' => 'int',
'boolean' => 'bool'
}
}[type]
end

def non_nullable_non_scalar_constructor(parent_type, property, property_name, schema, source)
Expand Down
14 changes: 7 additions & 7 deletions codegen/generators/python.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,12 @@ def format_description(raw_description, indent_string: ' ')
%("""\n#{lines.join("\n")}\n#{indent_string}""")
end

def select_language_translations_for_data_types(type, property)
language_translations_for_data_types[type]
end

private

def language_translations_for_data_types
{
'integer' => 'int',
Expand All @@ -71,9 +77,7 @@ def language_translations_for_data_types
'array' => 'list'
}
end

private


def default_value(parent_type_name, property_name, property)
if property['type'] == 'string'
default_value_for_string(parent_type_name, property_name, property)
Expand Down Expand Up @@ -109,10 +113,6 @@ def enum_name(parent_type_name, property_name, enum)
end
end

def property_type_from_ref(ref)
class_name(ref)
end

def class_name(ref)
return ref if language_translations_for_data_types.values.include?(ref)

Expand Down
4 changes: 2 additions & 2 deletions codegen/generators/ruby.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,12 @@ def default_value_for_string(parent_type_name, property_name, property)
end
end

def language_translations_for_data_types
def select_language_translations_for_data_types(type, property)
{
'integer' => 'number',
'string' => 'string',
'boolean' => 'boolean'
}
}[type]
end

def line_as_comment(line)
Expand Down
4 changes: 2 additions & 2 deletions codegen/generators/typescript.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@ def array_type_for(type_name)

private

def language_translations_for_data_types
def select_language_translations_for_data_types(type, property)
{
'integer' => 'number',
'string' => 'string',
'boolean' => 'boolean'
}
}[type]
end
end
end
27 changes: 16 additions & 11 deletions codegen/templates/java.java.erb
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@
<%= class_name(key) %>.java
package io.cucumber.messages.types;

import java.util.ArrayList;
import org.jspecify.annotations.Nullable;

import java.util.List;
import java.util.Objects;
import java.util.Optional;

import static java.util.Collections.unmodifiableList;
import static java.util.Objects.requireNonNull;

/**
Expand All @@ -17,10 +18,12 @@ import static java.util.Objects.requireNonNull;
<%- end -%>
*/
// Generated code
@SuppressWarnings("unused")
@SuppressWarnings({"unused", "JavaLangClash"})
public final class <%= class_name(key) %> {
<%- schema['properties'].each do |property_name, property| -%>
private final <%= type_for(class_name(key), property_name, property) -%> <%= property_name %>;
<%- schema['properties'].each do |property_name, property|
nullable = !(schema['required'] || []).index(property_name)
-%>
private final <% if nullable -%>@Nullable <%- end -%><%= type_for(class_name(key), property_name, property) -%> <%= property_name %>;
<%- end -%>
<%- if (schema['required'] || []).empty? -%>
<%- schema['properties'].each do |(property_name, property)| -%>
Expand All @@ -30,7 +33,7 @@ public final class <%= class_name(key) %> {
<%- schema['properties'].each_with_index do |(property_name_2, _property_2), index| -%>
<%- if property_name_2 == property_name -%>
<%- if property['items'] -%>
unmodifiableList(new ArrayList<>(requireNonNull(<%= property_name %>, "<%= class_name(key) %>.<%= property_name %> cannot be null")))<%= index < schema['properties'].length - 1 ? ',' : '' %>
List.copyOf(requireNonNull(<%= property_name %>, "<%= class_name(key) %>.<%= property_name %> cannot be null"))<%= index < schema['properties'].length - 1 ? ',' : '' %>
<%- else -%>
requireNonNull(<%= property_name %>, "<%= class_name(key) %>.<%= property_name %> cannot be null")<%= index < schema['properties'].length - 1 ? ',' : '' %>
<%- end -%>
Expand All @@ -44,22 +47,24 @@ public final class <%= class_name(key) %> {
<%- end -%>

public <%= class_name(key) %>(
<%- schema['properties'].each_with_index do |(property_name, property), index| -%>
<%= type_for(class_name(key), property_name, property) -%> <%= property_name %><%= index < schema['properties'].length-1 ? ',' : ''%>
<%- schema['properties'].each_with_index do |(property_name, property), index|
nullable = !(schema['required'] || []).index(property_name)
-%>
<% if nullable -%>@Nullable <%- end -%><%= type_for(class_name(key), property_name, property) -%> <%= property_name %><%= index < schema['properties'].length-1 ? ',' : ''%>
<%- end -%>
) {
<%- schema['properties'].each do |(property_name, property)|
required = (schema['required'] || []).index(property_name)
-%>
<%- if required -%>
<%- if property['items'] -%>
this.<%= property_name %> = unmodifiableList(new ArrayList<>(requireNonNull(<%= property_name %>, "<%= class_name(key) %>.<%= property_name %> cannot be null")));
this.<%= property_name %> = List.copyOf(requireNonNull(<%= property_name %>, "<%= class_name(key) %>.<%= property_name %> cannot be null"));
<%- else -%>
this.<%= property_name %> = requireNonNull(<%= property_name %>, "<%= class_name(key) %>.<%= property_name %> cannot be null");
<%- end -%>
<%- else -%>
<%- if property['items'] -%>
this.<%= property_name %> = <%= property_name %> == null ? null : unmodifiableList(new ArrayList<>(<%= property_name %>));
this.<%= property_name %> = <%= property_name %> == null ? null : List.copyOf(<%= property_name %>);
<%- else -%>
this.<%= property_name %> = <%= property_name %>;
<%- end -%>
Expand All @@ -81,7 +86,7 @@ public final class <%= class_name(key) %> {

<%- unless (property['description'] || []).empty? -%>
/**
<%= format_description(property['description'], indent_string: ' ') %>
<%= format_description(property['description'], indent_string: ' ') %>
*/
<%- end -%>
public Optional<<%= type_for(class_name(key), property_name, property) -%>> get<%= capitalize(property_name) %>() {
Expand Down
10 changes: 10 additions & 0 deletions java/.mvn/jvm.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
--add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED
--add-exports jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED
--add-exports jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED
--add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED
--add-exports jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED
--add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED
--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
--add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED
--add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED
9 changes: 9 additions & 0 deletions java/checkstyle-suppressions.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0"?>

<!DOCTYPE suppressions PUBLIC
"-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN"
"https://checkstyle.org/dtds/suppressions_1_2.dtd">

<suppressions>
<suppress checks="UnusedImports" files="[/\\]src/generated[/\\]"/>
</suppressions>
Loading
Loading