Skip to content

[CloseBraceStyle] verifyBodyCloseBraceStyle() sometimes throws java.lang.IndexOutOfBoundsException #132

@alykhank

Description

@alykhank

Attempting to analyze Quick/World.swift from Quick/Quick@521fdcd results in java.lang.IndexOutOfBoundsException. A similar problem also occurs with Quick/Configuration/Configuration.swift and Quick/DSL/World+DSL.swift.

Note: This may ultimately be due to a grammar bug where @objc is not being parsed correctly, e.g. line 17:25 no viable alternative at input '@objc final public class Configuration', but safety checks should still be added to prevent IndexOutOfBounds if possible.

Commit hash
46a34e0

Steps to reproduce

$ curl -O https://raw.githubusercontent.com/Quick/Quick/521fdcd8a77aef24cd5f88c46af5a01f5988f180/Quick/World.swift
$ tailor World.swift

Actual Result

line 26:27 no viable alternative at input '@objc final internal class World'
line 26:27 no viable alternative at input 'final internal class World'
line 55:40 mismatched input '{' expecting {';', '}', ',', 'let', 'var', 'class', 'convenience', 'dynamic', 'final', 'infix', 'lazy', 'mutating', 'nonmutating', 'optional', 'override', 'postfix', 'prefix', 'required', 'static', 'unowned', 'weak', 'internal', 'private', 'public', 'import', 'typealias', 'struct', 'enum', 'protocol', 'func', '.', '=', 'throws', 'rethrows', '->', 'init', '?', '!', 'deinit', 'extension', 'subscript', 'as', '@'}
line 133:30 no viable alternative at input '@objc(examplesForSpecClass:'
Exception in thread "main" java.lang.IndexOutOfBoundsException: -1 not in 0..1637
    at org.antlr.v4.runtime.BufferedTokenStream.getHiddenTokensToLeft(BufferedTokenStream.java:413)
    at org.antlr.v4.runtime.BufferedTokenStream.getHiddenTokensToLeft(BufferedTokenStream.java:435)
    at com.sleekbyte.tailor.listeners.ParseTreeVerifier.verifyBodyCloseBraceStyle(ParseTreeVerifier.java:432)
    at com.sleekbyte.tailor.listeners.ParseTreeVerifier.verifyClassBraceStyle(ParseTreeVerifier.java:315)
    at com.sleekbyte.tailor.listeners.MainListener.enterClassBody(MainListener.java:102)
    at com.sleekbyte.tailor.antlr.SwiftParser$ClassBodyContext.enterRule(SwiftParser.java:8184)
    at org.antlr.v4.runtime.tree.ParseTreeWalker.enterRule(ParseTreeWalker.java:66)
    at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:49)
    at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:52)
    at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:52)
    at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:52)
    at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:52)
    at com.sleekbyte.tailor.Tailor.main(Tailor.java:129)

Expected Result
No exception should be thrown.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions