Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 316666 - [dom] IllegalArgumentException in very broken source
Summary: [dom] IllegalArgumentException in very broken source
Status: VERIFIED FIXED
Alias: None
Product: Objectteams
Classification: Tools
Component: OTDT (show other bugs)
Version: 0.7   Edit
Hardware: PC Linux
: P3 normal (vote)
Target Milestone: 0.7   Edit
Assignee: Stephan Herrmann CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-06-11 20:22 EDT by Stephan Herrmann CLA
Modified: 2010-07-02 12:48 EDT (History)
0 users

See Also:


Attachments
test & fix (8.04 KB, patch)
2010-06-12 19:51 EDT, Stephan Herrmann CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Stephan Herrmann CLA 2010-06-11 20:22:59 EDT
I pasted a string from a test into a team class and started
removing leading and trailing '"' and '\n"'.

During this process I got plenty of IllegalArgumentExceptions.
The source looked like this:

package stringtoclass;
public team class MyTeam {
        precedence R2_R, R1_R;

    protected abstract class R playedBy T73Mab1 {\n" +
        @SuppressWarnings(\"basecall\")\n" +
        callin void foo() { System.out.print(getClass().getName()); }\n" +
                 @SuppressWarnings(\"def-bind-ambiguity\")\n" +
        foo <- replace test; // lifting not recommended\n" +
    }\n" +
    protected class R1_R extends R\n" +
        base when (Team73Mab1.this.hasRole(base, R1_R.class))\n" +
    {\n" +
    }\n" +
    protected class R2_R extends R\n" +
        base when (Team73Mab1.this.hasRole(base, R2_R.class))\n" +
    {\n" +
    }\n" +
    \n" +
    Team73Mab1 (T73Mab1 as R1_R o) {}\n" +
    public static void main(String[] args) {\n" +
        T73Mab1 o = new T73Mab1();\n" +
        Team73Mab1 t = new Team73Mab1(o);\n" +
        t.activate();\n" +
        o.test();\n" +
    }
}

The exception is here (this is from copying the source for this report):

java.lang.IllegalArgumentException
	at org.eclipse.jdt.core.dom.ASTNode.setSourceRange(ASTNode.java:2752)
	at org.eclipse.jdt.core.dom.ASTConverter.convert(ASTConverter.java:2947)
	at org.eclipse.jdt.core.dom.ASTConverter.convert(ASTConverter.java:2111)
	at org.eclipse.jdt.core.dom.ASTConverter.convertToVariableDeclarationFragment(ASTConverter.java:3963)
	at org.eclipse.jdt.core.dom.ASTConverter.checkAndAddMultipleFieldDeclaration(ASTConverter.java:501)
	at org.eclipse.jdt.core.dom.ASTConverter.buildBodyDeclarations(ASTConverter.java:247)
	at org.eclipse.jdt.core.dom.ASTConverter.buildRoleTypeDeclaration(ASTConverter.java:3551)
	at org.eclipse.jdt.core.dom.ASTConverter.convert(ASTConverter.java:3452)
	at org.eclipse.jdt.core.dom.ASTConverter.buildBodyDeclarations(ASTConverter.java:282)
	at org.eclipse.jdt.core.dom.ASTConverter.convert(ASTConverter.java:3442)
	at org.eclipse.jdt.core.dom.ASTConverter.convert(ASTConverter.java:1786)
	at org.eclipse.jdt.core.dom.CompilationUnitResolver.convert(CompilationUnitResolver.java:301)
	at org.eclipse.jdt.core.dom.ASTParser.internalCreateAST(ASTParser.java:1216)
	at org.eclipse.jdt.core.dom.ASTParser.createAST(ASTParser.java:806)
	at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider$1.run(ASTProvider.java:543)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.createAST(ASTProvider.java:536)
	at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.getAST(ASTProvider.java:479)
	at org.eclipse.jdt.ui.SharedASTProvider.getAST(SharedASTProvider.java:126)
	at org.eclipse.jdt.internal.ui.javaeditor.ClipboardOperationAction.getClipboardData(ClipboardOperationAction.java:406)
Comment 1 Stephan Herrmann CLA 2010-06-12 19:51:18 EDT
Created attachment 171791 [details]
test & fix

Due to extra quotes, the parser created a deeper nesting structure
than intended and made some roles into nested teams.
For one role with an explicit super class this meant that the Team
infrastructure was generated (rather than inherited from o.o.Team).
One of these generated fields was then converted although it had
no valid source range.

The fix is simply to skip generated fields in ASTConverter.
Comment 2 Stephan Herrmann CLA 2010-06-12 19:53:42 EDT
Fix has been committed as r472, r473.
Comment 3 Stephan Herrmann CLA 2010-06-12 20:37:00 EDT
resolved as per comment 2
Comment 4 Stephan Herrmann CLA 2010-07-02 12:48:49 EDT
Verified using build 201007011455.