Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[bug] error occurred when invoking the method getOriginalSourceFragment() of class CtClassImpl #138

Open
ngocpq opened this issue Dec 28, 2020 · 0 comments

Comments

@ngocpq
Copy link

ngocpq commented Dec 28, 2020

I made a simple program to demonstrate the error as the follows.

import java.io.File;
import gumtree.spoon.AstComparator;
import spoon.reflect.declaration.CtType;
import spoon.support.sniper.internal.ElementSourceFragment;

public class TestClass {
	public static void main(String[] args) throws Exception {
		File file = new File("H:\\temp\\StrBuilder.java");
		AstComparator comparator = new AstComparator();		
		CtType<?> ctBug = comparator.getCtType(file);
		ElementSourceFragment orgCodeFrag = ctBug.getOriginalSourceFragment();	//error occurred 	
		System.out.println(orgCodeFrag.getSourceCode());
	}	
}

The content of the input file (i.e., file StrBuilder.java) is as follows:

package org.apache.commons.lang.text;
import java.util.List;
public class StrBuilder implements Cloneable {
    class StrBuilderTokenizer extends StrTokenizer {
        protected List tokenize(char[] chars, int offset, int count) {
            if (chars == null) {
                return super.tokenize(StrBuilder.this.buffer, 0, StrBuilder.this.size());
            } else {
                return super.tokenize(chars, offset, count);
            }
        }
    }
}

The error message and stack trace is as follows:

Exception in thread "main" spoon.SpoonException: Cannot compare this: [289, 346] with other: ["331", "353"]
	at spoon.support.sniper.internal.ElementSourceFragment.compare(ElementSourceFragment.java:359)
	at spoon.support.sniper.internal.ElementSourceFragment.add(ElementSourceFragment.java:273)
	at spoon.support.sniper.internal.ElementSourceFragment.addChild(ElementSourceFragment.java:305)
	at spoon.support.sniper.internal.ElementSourceFragment.addChild(ElementSourceFragment.java:241)
	at spoon.support.sniper.internal.ElementSourceFragment.access$000(ElementSourceFragment.java:51)
	at spoon.support.sniper.internal.ElementSourceFragment$1.enter(ElementSourceFragment.java:200)
	at spoon.reflect.visitor.CtScanner.visitCtInvocation(CtScanner.java:499)
	at spoon.support.reflect.code.CtInvocationImpl.accept(CtInvocationImpl.java:46)
	at spoon.reflect.visitor.EarlyTerminatingScanner.doScan(EarlyTerminatingScanner.java:145)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:121)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:169)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:106)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:83)
	at spoon.reflect.visitor.CtScanner.visitCtInvocation(CtScanner.java:504)
	at spoon.support.reflect.code.CtInvocationImpl.accept(CtInvocationImpl.java:46)
	at spoon.reflect.visitor.EarlyTerminatingScanner.doScan(EarlyTerminatingScanner.java:145)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:121)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:169)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:106)
	at spoon.reflect.visitor.CtScanner.visitCtReturn(CtScanner.java:675)
	at spoon.support.reflect.code.CtReturnImpl.accept(CtReturnImpl.java:27)
	at spoon.reflect.visitor.EarlyTerminatingScanner.doScan(EarlyTerminatingScanner.java:145)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:121)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:169)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:106)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:83)
	at spoon.reflect.visitor.CtScanner.visitCtBlock(CtScanner.java:299)
	at spoon.support.reflect.code.CtBlockImpl.accept(CtBlockImpl.java:57)
	at spoon.reflect.visitor.EarlyTerminatingScanner.doScan(EarlyTerminatingScanner.java:145)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:121)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:169)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:106)
	at spoon.reflect.visitor.CtScanner.visitCtIf(CtScanner.java:482)
	at spoon.support.reflect.code.CtIfImpl.accept(CtIfImpl.java:36)
	at spoon.reflect.visitor.EarlyTerminatingScanner.doScan(EarlyTerminatingScanner.java:145)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:121)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:169)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:106)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:83)
	at spoon.reflect.visitor.CtScanner.visitCtBlock(CtScanner.java:299)
	at spoon.support.reflect.code.CtBlockImpl.accept(CtBlockImpl.java:57)
	at spoon.reflect.visitor.EarlyTerminatingScanner.doScan(EarlyTerminatingScanner.java:145)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:121)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:169)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:106)
	at spoon.reflect.visitor.CtScanner.visitCtMethod(CtScanner.java:556)
	at spoon.support.reflect.declaration.CtMethodImpl.accept(CtMethodImpl.java:58)
	at spoon.reflect.visitor.EarlyTerminatingScanner.doScan(EarlyTerminatingScanner.java:145)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:121)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:169)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:106)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:83)
	at spoon.reflect.visitor.CtScanner.visitCtClass(CtScanner.java:335)
	at spoon.support.reflect.declaration.CtClassImpl.accept(CtClassImpl.java:58)
	at spoon.reflect.visitor.EarlyTerminatingScanner.doScan(EarlyTerminatingScanner.java:145)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:121)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:169)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:106)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:83)
	at spoon.reflect.visitor.CtScanner.visitCtClass(CtScanner.java:335)
	at spoon.support.reflect.declaration.CtClassImpl.accept(CtClassImpl.java:58)
	at spoon.reflect.visitor.EarlyTerminatingScanner.doScan(EarlyTerminatingScanner.java:145)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:121)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:169)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:106)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:83)
	at spoon.reflect.visitor.EarlyTerminatingScanner.visitCtCompilationUnit(EarlyTerminatingScanner.java:160)
	at spoon.support.reflect.declaration.CtCompilationUnitImpl.accept(CtCompilationUnitImpl.java:407)
	at spoon.reflect.visitor.EarlyTerminatingScanner.doScan(EarlyTerminatingScanner.java:145)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:121)
	at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:169)
	at spoon.reflect.visitor.EarlyTerminatingScanner.scan(EarlyTerminatingScanner.java:106)
	at spoon.support.sniper.internal.ElementSourceFragment.createSourceFragmentsFrom(ElementSourceFragment.java:228)
	at spoon.support.reflect.declaration.CtCompilationUnitImpl.getOriginalSourceFragment(CtCompilationUnitImpl.java:359)
	at spoon.support.reflect.declaration.CtElementImpl.getOriginalSourceFragment(CtElementImpl.java:596)
	at TestClass.main(TestClass.java:14)

I guest that the error is caused by the following statement in the input code file (i.e., the statement at line 7 in file StrBuilder.java).

                return super.tokenize(StrBuilder.this.buffer, 0, StrBuilder.this.size());

Hope you can locate and fix this bug soon.
Thank you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant