diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/GroovyBundle.properties b/plugins/groovy/src/org/jetbrains/plugins/groovy/GroovyBundle.properties index a24fca4d818c..2d00bb9821b9 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/GroovyBundle.properties +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/GroovyBundle.properties @@ -352,3 +352,4 @@ enums.may.not.have.extends.clause=Enums may not have 'extends' clause method.0.cannot.override.method.1.in.2.overridden.method.is.final=Method ''{0}'' cannot override method ''{1}'' in ''{2}''; overridden method is final method.0.cannot.have.weaker.access.privileges.1.than.2.in.3.4=Method ''{0}'' cannot have weaker access privileges (''{1}'') than ''{2}'' in ''{3}'' (''{4}'') tuple.declaration.should.end.with.def.modifier=Tuple declaration should end with 'def' modifier +injection.should.not.contain.line.feeds=GString injection must not contain line feeds diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java index 4b5e9e7c088d..b989841822b3 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java @@ -77,6 +77,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.*; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrLiteral; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrRegex; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrString; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringInjection; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.path.GrMethodCallExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.*; @@ -1256,6 +1257,16 @@ public class GroovyAnnotator extends GroovyElementVisitor implements Annotator { return; } } + + } + + @Override + public void visitGStringInjection(GrStringInjection injection) { + if (((GrString)injection.getParent()).isPlainString()) { + if (StringUtil.indexOf(injection.getText(), '\n') != -1) { + myHolder.createErrorAnnotation(injection, GroovyBundle.message("injection.should.not.contain.line.feeds")); + } + } } private void checkStringLiteral(PsiElement literal, String text) { diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/highlighting/GroovyHighlightingTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/highlighting/GroovyHighlightingTest.groovy index 09ac11f3bdbe..ddbcae753173 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/highlighting/GroovyHighlightingTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/highlighting/GroovyHighlightingTest.groovy @@ -1098,4 +1098,17 @@ print testConfig.list[0] print testConfig.foo() ''', true, false, false, GrUnresolvedAccessInspection) } + + void testGStringInjectionLFs() { + testHighlighting('''\ +print "${ +}" + +print """${ +}""" + +print "${ """ +"""}" +''') + } } \ No newline at end of file