Skip to content

Commit 02c70c0

Browse files
committed
Fix exception handling and add unhappy path tests for records
- Change from ValueEnforcer to explicit IllegalStateException throws - Fix missing semicolons in throw statements - Fix error message in recordComponentVararg() - Add tests for calling record methods on non-record classes - Add test for duplicate compact constructor
1 parent b56fe60 commit 02c70c0

3 files changed

Lines changed: 41 additions & 4 deletions

File tree

‎jcodemodel/src/main/java/com/helger/jcodemodel/JDefinedClass.java‎

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,8 @@ public boolean containsEnumConstant (@NonNull final String sName)
377377
@NonNull
378378
public JRecordComponent recordComponent (@NonNull final AbstractJType aType, @NonNull final String sName)
379379
{
380-
ValueEnforcer.isTrue (isRecord (), "recordComponent() is only valid for record types");
380+
if (!isRecord())
381+
throw new IllegalStateException("recordComponent() is only valid for record types");
381382
ValueEnforcer.notNull (aType, "Type");
382383
ValueEnforcer.notNull (sName, "Name");
383384

@@ -419,7 +420,8 @@ public JRecordComponent recordComponent (@NonNull final Class <?> aType, @NonNul
419420
@NonNull
420421
public JRecordComponent recordComponentVararg (@NonNull final AbstractJType aType, @NonNull final String sName)
421422
{
422-
ValueEnforcer.isTrue (isRecord (), "recordComponentVararg() is only valid for record types");
423+
if (!isRecord())
424+
throw new IllegalStateException("recordComponentVararg() is only valid for record types");
423425
ValueEnforcer.notNull (aType, "Type");
424426
ValueEnforcer.notNull (sName, "Name");
425427

@@ -461,8 +463,11 @@ public List <JRecordComponent> recordComponents ()
461463
@NonNull
462464
public JMethod compactConstructor (final int nMods)
463465
{
464-
ValueEnforcer.isTrue (isRecord (), "compactConstructor() is only valid for record types");
465-
ValueEnforcer.isNull (m_aCompactConstructor, "A compact constructor has already been defined");
466+
if (!isRecord())
467+
throw new IllegalStateException("compactConstructor() is only valid for record types");
468+
469+
if (m_aCompactConstructor != null)
470+
throw new IllegalStateException("A compact constructor has already been defined");
466471

467472
m_aCompactConstructor = new JMethod (nMods, this);
468473
return m_aCompactConstructor;

‎jcodemodel/src/test/java/com/helger/jcodemodel/JDefinedClassTest.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,4 +172,5 @@ public void testCallSuper () throws Exception
172172
CodeModelTestsHelper.parseCodeModel (cm);
173173
CodeModelTestsHelper.compileCodeModel (cm);
174174
}
175+
175176
}

‎jcodemodel/src/test/java/com/helger/jcodemodel/JRecordTest.java‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,4 +474,35 @@ public void testRecordWithBoundedTypeParameter () throws JCodeModelException
474474

475475
CodeModelTestsHelper.parseCodeModel (cm);
476476
}
477+
478+
@Test(expected=IllegalStateException.class)
479+
public void testCantAddRecordComponentsToNonRecordClass() throws JCodeModelException {
480+
final JCodeModel cm = new JCodeModel ();
481+
final JDefinedClass c = cm._package ("org.example")._class ("SomeClass");
482+
c.recordComponent (String.class, "foo");
483+
}
484+
485+
@Test(expected=IllegalStateException.class)
486+
public void testCantAddCompactConstructorToNonRecordClass() throws JCodeModelException {
487+
final JCodeModel cm = new JCodeModel ();
488+
final JDefinedClass c = cm._package ("org.example")._class ("SomeClass");
489+
c.compactConstructor (0);
490+
}
491+
492+
@Test(expected=IllegalStateException.class)
493+
public void testCantAddRecordComponentVarargToNonRecordClass() throws JCodeModelException {
494+
final JCodeModel cm = new JCodeModel ();
495+
final JDefinedClass c = cm._package ("org.example")._class ("SomeClass");
496+
c.recordComponentVararg (cm.INT, "values");
497+
}
498+
499+
@Test(expected=IllegalStateException.class)
500+
public void testCantAddDuplicateCompactConstructor() throws JCodeModelException {
501+
final JCodeModel cm = new JCodeModel ();
502+
final JDefinedClass rec = cm._package ("org.example")._record ("Range");
503+
rec.recordComponent (cm.INT, "lo");
504+
rec.recordComponent (cm.INT, "hi");
505+
rec.compactConstructor (JMod.PUBLIC);
506+
rec.compactConstructor (JMod.PUBLIC); // Should throw
507+
}
477508
}

0 commit comments

Comments
 (0)