Project

General

Profile

Bug #6963

Incorrect conversion of legacy class constructors with an unknown argument of object type

Added by Vladimir Tsichevski over 1 year ago. Updated about 1 year ago.

Status:
New
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
Due date:
% Done:

0%

billable:
No
vendor_id:
GCD
case_num:

Related issues

Related to Base Language - Bug #7315: unknown literal passed as an argument to a 'object' parameter Closed

History

#1 Updated by Vladimir Tsichevski over 1 year ago

If an unknown value is passed an an argument to a class constructor, the conversion produces an correct call.

The legacy class:

CLASS unittests.SampleClassConstructors :
    CONSTRUCTOR PUBLIC SampleClassConstructors ( arg1 AS CHARACTER,
       o1 AS Progress.Lang.Object,
       o2 AS Progress.Lang.Object):
    END.
END.

The test program ABLUnit:

USING OpenEdge.Core.Assert.
USING unittests.SampleClassConstructors.

ROUTINE-LEVEL ON ERROR UNDO, THROW.

CLASS unittests.TestClassConstructorObject :

  DEFINE PRIVATE VARIABLE object1 AS Progress.Lang.Object NO-UNDO.
  DEFINE PRIVATE VARIABLE object2 AS Progress.Lang.Object NO-UNDO.

  @Before.
  METHOD PUBLIC VOID BeforeClass():
     object1 = NEW Progress.Lang.Object().
     object2 = NEW Progress.Lang.Object().
  END METHOD. 

  @Test.
  METHOD PUBLIC VOID TestObject1 ():
     Assert:NotNull(NEW SampleClassConstructors("abcd", ?, object2)).
  END METHOD.

  @Test.
  METHOD PUBLIC VOID TestObject2 ():
     Assert:NotNull(NEW SampleClassConstructors("abcd", object1, ?)).
  END METHOD.

END.

The conversion result:

   @LegacySignature(type = Type.METHOD, name = "TestObject1")
   @Test
   public void testObject1()
   {
      internalProcedure(TestClassConstructorObject.class, this, "TestObject1", new Block((Body) () -> 
      {
         Assert.notNull(ObjectOps.newInstance(SampleClassConstructors.class, "III", "abcd", object2));
      }));
   }

   @LegacySignature(type = Type.METHOD, name = "TestObject2")
   @Test
   public void testObject2()
   {
      internalProcedure(TestClassConstructorObject.class, this, "TestObject2", new Block((Body) () -> 
      {
         Assert.notNull(ObjectOps.newInstance(SampleClassConstructors.class, "III", "abcd", object1));
      }));
   }

Note: the unknown arguments are just missing in Java calls to ObjectOps.newInstance.

#3 Updated by Constantin Asofiei about 1 year ago

  • Project changed from Conversion Tools to Base Language

#4 Updated by Constantin Asofiei about 1 year ago

  • Related to Bug #7315: unknown literal passed as an argument to a 'object' parameter added

Also available in: Atom PDF