Skip to content

Commit 70c9ddd

Browse files
Groovy: fix parsing method invocations with method names starting with class (#7496)
1 parent 76af375 commit 70c9ddd

2 files changed

Lines changed: 17 additions & 3 deletions

File tree

rewrite-groovy/src/main/java/org/openrewrite/groovy/GroovyParserVisitor.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,9 +1110,12 @@ public void visitClassExpression(ClassExpression clazz) {
11101110
}
11111111
}
11121112
if (sourceStartsWith(".class")) {
1113-
String classSuffix = source.substring(cursor, indexOfNextNonWhitespace(cursor, source)) + ".class";
1114-
name += classSuffix;
1115-
skip(classSuffix);
1113+
int afterClass = indexOfNextNonWhitespace(cursor, source) + ".class".length();
1114+
if (afterClass >= source.length() || !Character.isJavaIdentifierPart(source.charAt(afterClass))) {
1115+
String classSuffix = source.substring(cursor, indexOfNextNonWhitespace(cursor, source)) + ".class";
1116+
name += classSuffix;
1117+
skip(classSuffix);
1118+
}
11161119
}
11171120
queue.add(TypeTree.build(name)
11181121
.withType(typeMapping.type(type))

rewrite-groovy/src/test/java/org/openrewrite/groovy/tree/MethodInvocationTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -760,4 +760,15 @@ static <T> boolean compare(T t1, T t2) {
760760
)
761761
);
762762
}
763+
764+
@Test
765+
void methodNameStartingWithClassKeyword() {
766+
rewriteRun(
767+
groovy(
768+
"""
769+
Object.className("foo")
770+
"""
771+
)
772+
);
773+
}
763774
}

0 commit comments

Comments
 (0)