IDEA-101503 Bad code green: a single-line GString with multiline injection

This commit is contained in:
Max Medvedev
2013-02-21 00:04:40 +04:00
parent a82225975a
commit bb500b2ebc
3 changed files with 25 additions and 0 deletions
@@ -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
@@ -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) {
@@ -1098,4 +1098,17 @@ print testConfig.list[0]
print testConfig.<warning descr="Cannot resolve symbol 'foo'">foo</warning>()
''', true, false, false, GrUnresolvedAccessInspection)
}
void testGStringInjectionLFs() {
testHighlighting('''\
print "<error descr="GString injection must not contain line feeds">${
}</error>"
print """${
}"""
print "<error descr="GString injection must not contain line feeds">${ """
"""}</error>"
''')
}
}