Code2Graph icon indicating copy to clipboard operation
Code2Graph copied to clipboard

bug: rename传播问题,xml inner rule加入后,受到间接影响的identifier依然没有被rename

Open TsukimiRini opened this issue 3 years ago • 5 comments

为了实现对xml文件中并非直接与java元素link的identifier的rename,我加入了以下rule:

r-xml-inner:
#    hidden: true
    def:
      lang: XML
      file: (&layoutName).xml
      identifier: android:id
      inline:
        identifier: '@+id\/(&name)'
    use:
      lang: XML
      file: (&layoutName).xml
      identifier: "*constraint*"
      inline:
        identifier: '*\/(&name)'

根据这条rule可以在某个例子中得到如下的inner link:

r-xml-inner
def://app/src/main/res/layout/fragment_description.xml[language=FILE]//androidx.core.widget.NestedScrollView/androidx.constraintlayout.widget.ConstraintLayout/ImageView/android:id[language=XML]//@+id\\/detail_select_description_button[language=ANY]
def://app/src/main/res/layout/fragment_description.xml[language=FILE]//androidx.core.widget.NestedScrollView/androidx.constraintlayout.widget.ConstraintLayout/TextView/app:layout_constraintEnd_toStartOf[language=XML]//@+id\\/detail_select_description_button[language=ANY]

其中上面xll中的def方(第一条uri)与一个java元素绑定:

r-dataBinding
def://app/src/main/res/layout/fragment_description.xml[language=FILE]//androidx.core.widget.NestedScrollView/androidx.constraintlayout.widget.ConstraintLayout/ImageView/android:id[language=XML]//@+id\\/detail_select_description_button[language=ANY]
use://app/src/main/java/org/schabi/newpipe/fragments/detail/DescriptionFragment.java[language=FILE]//DescriptionFragment/disableDescriptionSelection/TooltipCompat.setTooltipText/binding.detailSelectDescriptionButton[language=JAVA]

以上行为都在预期之中,但是当我rename这个java元素时,预期的行为应该是inner link中的两个uri都被rename,但事实上只有databinding link中的xml uri被rename了:

def://app/src/main/res/layout/fragment_description.xml[language=FILE]//androidx.core.widget.NestedScrollView/androidx.constraintlayout.widget.ConstraintLayout/ImageView/android:id[language=XML]//@+id\\/detail_select_description_button[language=ANY]
def://app/src/main/res/layout/fragment_description.xml[language=FILE]//androidx.core.widget.NestedScrollView/androidx.constraintlayout.widget.ConstraintLayout/ImageView/android:id[language=XML]//@+id\\/detailedSelectDescriptionButton[language=ANY]

TsukimiRini avatar May 12 '22 07:05 TsukimiRini

我这没有复现: 3d666d3cd3682e4eb8d31cdd0ff798ab14c3db4f 的测试结果显示产生了两个 rename。

shigma avatar May 12 '22 22:05 shigma

我这没有复现: https://github.com/Symbolk/Code2Graph/commit/3d666d3cd3682e4eb8d31cdd0ff798ab14c3db4f 的测试结果显示产生了两个 rename。

有没有可能是存在前置rule的时候会有问题?我跑了测试,也可以通过,但是在rename eva中project.rename就只会返回一个结果。

TsukimiRini avatar May 13 '22 05:05 TsukimiRini

测试时的flowgraph:

flowgraph:
  r-layout:
    - $
  r-menu:
    - $
  r-dataBindingClassLink:
    - $
  r-id:
    - r-layout
    - r-menu
    - r-dataBindingClassLink
    - $
  r-android-id:
    - r-layout
    - r-menu
    - r-dataBindingClassLink
    - $
  r-dataBindingClass:
    - $
  r-include-layout:
    - r-dataBindingClassLink
    - r-layout
  r-include-id:
    - r-include-layout
  r-include-dataBinding:
    - r-include-layout
  r-dataBinding:
    - r-dataBindingClassLink
    - r-layout
#    - $
  r-xml-inner:
    - r-id
    - r-dataBinding
  r-xml-include-inner:
    - r-include-id
  r-xml-include-inter:
    - r-include-id

TsukimiRini avatar May 13 '22 05:05 TsukimiRini

image 证实确实是因为存在前置rule的问题,当r-xml-inner有前置rule(r-id, r-dataBinding)的时候,会出现上述问题。 但实际上单从匹配上(跑xll eva)来说,xml inner是正确匹配的了,问题关键大概还是在传播。 另外一个奇怪的现象是,如果我将r-xml-inner的前置rule替换为($)或(r-id, r-dataBindingClassLink),在test中都是能pass的,但是在实际的rename eva中,相同的case下rename结果为0条(这也是为什么我不直接把r-xml-inner的前置去掉的原因)。

TsukimiRini avatar May 13 '22 06:05 TsukimiRini

@shigma 仔细测试了一下,在前置rule替换为($)或(r-id, r-dataBindingClassLink)时,是能找到对应的XLL的(之前说没找到应该是文件太大导致的加载问题)。这个行为是预料内的。 但是在实际的rename eva中,rename结果依然是0条。

TsukimiRini avatar May 14 '22 12:05 TsukimiRini