Bug in refactoring in XE5.

Bug in refactoring in XE5.  

Can someone check this in XE6 and report if still an issue?

Use refactoring to rename constant CreateStoragePos to f.x. CreateStorage.

Result:  reference in attribute

    [TestCase(‘Create’, CreateStoragePos, NoSep)]

will not be renamed.

{code}

unit DUnitX_PSDStorage;

interface

uses

  DUnitX_PSDBase, PSDConstants, PSDStorage,

  DUnitX.TestFramework;

const

  CreateStoragePos = String(‘something’);

  ModifyStoragePos = String(‘something’);

type

  [TestFixture]

  TestTPSDStorageArea= class(TTestClass)

  public

    [Setup]

    procedure Setup; override;

    [TearDown]

    procedure TearDown; override;

    [Test]

    [TestCase(‘Create’, CreateStoragePos, NoSep)]

    procedure CreateFromJSON(const aJSON: String); override;

    [Test]

    function SaveToDB:TPSDResult; override;

    [Test]

    function ReadFromDb:TPSDResult; override;

    [Test]

    [TestCase(‘Modify’, ModifyStoragePos, NoSep)]

    function ChangeAndSave(const aJSON: String):TPSDResult; override;

    [Test]

    function DeleteFromDb:TPSDResult; override;

  end;

{code}

5 thoughts on “Bug in refactoring in XE5.”

  1. XE6: the attribute isn’t changed.  (Note my refactoring may be affected by not having the DUnitX code installed & available, so the unit won’t compile. That tends to affect Delphi’s refactoring.)

  2. Clean unit

    {code}

    unit AttribParamRefactoring;

    interface

    const

      // Use refactoring to rename aStrConst

      aStrConst = String(‘Some constant’);

    type

      MyAttrib = class(TCustomAttribute)

      private

        FParam: String;

      public

        constructor Create(const aParam: String);

     end;

    type

      TMyObject = class

      private

        FSomeProperty: Integer;

        procedure SetSomeProperty(const Value: Integer);

      public

      // aStrConst reference in attribute is not renamed

       [MyAttrib(aStrConst)]

       property SomeProperty:Integer read FSomeProperty write SetSomeProperty;

      end;

    implementation

    { MyAttrib }

    constructor MyAttrib.Create(const aParam: String);

    begin

      FParam := aParam;

    end;

    { TMyObject }

    procedure TMyObject.SetSomeProperty(const Value: Integer);

    begin

      FSomeProperty := Value;

    end;

    end.

    {code}

Leave a Reply