diff --git a/lib/codegen/fromcto/java/javavisitor.js b/lib/codegen/fromcto/java/javavisitor.js index 7a6b838d..6d508071 100644 --- a/lib/codegen/fromcto/java/javavisitor.js +++ b/lib/codegen/fromcto/java/javavisitor.js @@ -141,9 +141,20 @@ class JavaVisitor { this.plugin.addEnumAnnotations(enumDeclaration, parameters); parameters.fileWriter.writeLine(0, 'public enum ' + enumDeclaration.getName() + ' {' ); - enumDeclaration.getOwnProperties().forEach((property) => { - property.accept(this, parameters); - }); + const properties = enumDeclaration.getOwnProperties(); + if (properties.length === 0) { + parameters.fileWriter.writeLine(1, ';'); + } else { + properties.forEach((property, index) => { + const suffix = index < properties.length - 1 ? ',' : ';'; + parameters.fileWriter.writeLine(1, property.getName() + suffix); + }); + } + + parameters.fileWriter.writeLine(1, '@Override'); + parameters.fileWriter.writeLine(1, 'public String toString() {'); + parameters.fileWriter.writeLine(2, 'return name();'); + parameters.fileWriter.writeLine(1, '}'); parameters.fileWriter.writeLine(0, '}' ); diff --git a/test/codegen/__snapshots__/codegen.js.snap b/test/codegen/__snapshots__/codegen.js.snap index 45fb1408..331b743d 100644 --- a/test/codegen/__snapshots__/codegen.js.snap +++ b/test/codegen/__snapshots__/codegen.js.snap @@ -1568,7 +1568,11 @@ public enum State { CO, WA, IL, - CA, + CA; + @Override + public String toString() { + return name(); + } } ", } @@ -1585,7 +1589,11 @@ import com.fasterxml.jackson.annotation.*; public enum TShirtSizeType { SMALL, MEDIUM, - LARGE, + LARGE; + @Override + public String toString() { + return name(); + } } ", } @@ -1655,6 +1663,11 @@ package org.acme.hr.base; import com.fasterxml.jackson.annotation.*; @JsonIgnoreProperties({"$class"}) public enum Level { + ; + @Override + public String toString() { + return name(); + } } ", } @@ -1833,7 +1846,11 @@ public enum Department { Finance, HR, Engineering, - Design, + Design; + @Override + public String toString() { + return name(); + } } ", } @@ -1892,7 +1909,11 @@ import com.fasterxml.jackson.annotation.*; @JsonIgnoreProperties({"$class"}) public enum LaptopMake { Apple, - Microsoft, + Microsoft; + @Override + public String toString() { + return name(); + } } ", } diff --git a/test/codegen/fromcto/java/javavisitor.js b/test/codegen/fromcto/java/javavisitor.js index 375ab986..6be7119e 100644 --- a/test/codegen/fromcto/java/javavisitor.js +++ b/test/codegen/fromcto/java/javavisitor.js @@ -221,8 +221,6 @@ describe('JavaVisitor', function () { describe('visitEnumDeclaration', () => { it('should write an enum declaration and call accept on each property', () => { - let acceptSpy = sinon.spy(); - let param = { fileWriter: mockFileWriter }; @@ -230,12 +228,10 @@ describe('JavaVisitor', function () { let mockEnumDeclaration = sinon.createStubInstance(EnumDeclaration); mockEnumDeclaration.isEnum.returns(true); mockEnumDeclaration.getName.returns('Bob'); - mockEnumDeclaration.getOwnProperties.returns([{ - accept: acceptSpy - }, - { - accept: acceptSpy - }]); + mockEnumDeclaration.getOwnProperties.returns([ + { getName: () => 'VALUE_A' }, + { getName: () => 'VALUE_B' }, + ]); let mockStartClassFile = sinon.stub(javaVisit, 'startClassFile'); let mockEndClassFile = sinon.stub(javaVisit, 'endClassFile'); @@ -243,11 +239,18 @@ describe('JavaVisitor', function () { javaVisit.visitEnumDeclaration(mockEnumDeclaration, param); mockStartClassFile.withArgs(mockEnumDeclaration, param).calledOnce.should.be.ok; - param.fileWriter.writeLine.callCount.should.deep.equal(4); + param.fileWriter.writeLine.callCount.should.deep.equal(10); + param.fileWriter.writeLine.getCall(0).args.should.deep.equal([0, 'import com.fasterxml.jackson.annotation.*;']); param.fileWriter.writeLine.getCall(1).args.should.deep.equal([0, '@JsonIgnoreProperties({"$class"})']); param.fileWriter.writeLine.getCall(2).args.should.deep.equal([0, 'public enum Bob {']); - param.fileWriter.writeLine.getCall(3).args.should.deep.equal([0, '}']); + param.fileWriter.writeLine.getCall(3).args.should.deep.equal([1, 'VALUE_A,']); + param.fileWriter.writeLine.getCall(4).args.should.deep.equal([1, 'VALUE_B;']); + param.fileWriter.writeLine.getCall(5).args.should.deep.equal([1, '@Override']); + param.fileWriter.writeLine.getCall(6).args.should.deep.equal([1, 'public String toString() {']); + param.fileWriter.writeLine.getCall(7).args.should.deep.equal([2, 'return name();']); + param.fileWriter.writeLine.getCall(8).args.should.deep.equal([1, '}']); + param.fileWriter.writeLine.getCall(9).args.should.deep.equal([0, '}']); mockEndClassFile.withArgs(mockEnumDeclaration, param).calledOnce.should.be.ok; }); });