SSR: add some existing templates demonstrating features

This commit is contained in:
Bas Leijdekkers
2018-05-18 12:55:26 +02:00
parent 90553cdc95
commit 7754aa912e
3 changed files with 45 additions and 3 deletions
@@ -36,7 +36,7 @@ class JavaPredefinedConfigurations {
createSearchTemplateInfo(SSRBundle.message("predefined.configuration.all.expressions.of.some.type"),"'_Expression:[exprtype( SomeType )]",EXPRESSION_TYPE),
createSearchTemplateInfo(SSRBundle.message("predefined.configuration.sample.method.invokation.with.constant.argument"),"Integer.parseInt('_a:[script( \"com.intellij.psi.util.PsiUtil.isConstantExpression(__context__)\" )])",EXPRESSION_TYPE),
createSearchTemplateInfo(SSRBundle.message("predefined.configuration.method.references"), "'_Qualifier::'Method", EXPRESSION_TYPE),
createSearchTemplateInfo(SSRBundle.message("predefined.configuration.string.concatenations"), "[exprtype( java\\.lang\\.String )]'_a + '_b+", EXPRESSION_TYPE),
createSearchTemplateInfo(SSRBundle.message("predefined.configuration.string.concatenations"), "[exprtype( java\\.lang\\.String )]'_a + '_b{10,}", EXPRESSION_TYPE),
createSearchTemplateInfo(SSRBundle.message("predefined.configuration.deprecated.method.calls"), "'_Instance?.'MethodCall:[ref( deprecated methods )]('_Parameter*)", EXPRESSION_TYPE),
// Operators
@@ -47,6 +47,7 @@ class JavaPredefinedConfigurations {
createSearchTemplateInfo(SSRBundle.message("predefined.configuration.foreaches"), "for ('_Type '_Variable : '_Expression) {\n '_Statement*;\n}", OPERATOR_TYPE),
createSearchTemplateInfo(SSRBundle.message("predefined.configuration.logging.without.if"), "[!within( statement in if )]LOG.debug('_Argument*);", OPERATOR_TYPE),
createSearchTemplateInfo("statement in if", "if('_condition) { 'statement*; }", OPERATOR_TYPE),
createSearchTemplateInfo(SSRBundle.message("predefined.configuration.assert.without.description"), "assert '_condition : '_description{0};", OPERATOR_TYPE),
// Class based
createSearchTemplateInfo(
@@ -182,6 +183,7 @@ class JavaPredefinedConfigurations {
createSearchTemplateInfo(SSRBundle.message("predefined.configuration.type.var.substitutions.in.intanceof.with.generic.types"),"'_Expr instanceof '_Type <'Substitutions+> ", GENERICS_TYPE),
createSearchTemplateInfo(SSRBundle.message("predefined.configuration.variables.of.generic.types"),"'_Type <'_GenericArgument+> 'Var = '_Init?;", GENERICS_TYPE),
createSearchTemplateInfo(SSRBundle.message("predefined.configuration.diamond.operators"), "new 'Class<>('_Argument*)", GENERICS_TYPE),
createSearchTemplateInfo(SSRBundle.message("predefined.configuration.method.returns.bounded.wildcard"), "[script( \"!Method.hasModifierProperty(com.intellij.psi.PsiModifier.ABSTRACT)\" )]'_Type<? extends '_Bound> 'Method('_ParameterType '_Parameter*);", GENERICS_TYPE),
// Add comments and metadata
createSearchTemplateInfo(SSRBundle.message("predefined.configuration.comments"),"/* 'CommentContent */", METADATA_TYPE),
@@ -312,6 +314,7 @@ class JavaPredefinedConfigurations {
createSearchTemplateInfo(SSRBundle.message("predefined.configuration.any.unboxing"), "'_expression:[ formal( int|boolean|long|char|short|byte ) && exprtype( Integer|Boolean|Long|Character|Short|Byte )]", INTERESTING_TYPE),
createSearchTemplateInfo(SSRBundle.message("predefined.configuration.try.without.resources"), "try ('_ResourceType '_resource{0,0} = '_init; '_expression{0,0}) {\n '_TryStatement*;\n} catch('_ExceptionType '_Exception{0,0}) {\n '_CatchStatement*;\n}", INTERESTING_TYPE),
createSearchTemplateInfo(SSRBundle.message("predefined.configuration.switch.with.branches"), "switch ('_expression) {\n case '_value{0,4}\\: '_statement*;\n}", INTERESTING_TYPE),
createSearchTemplateInfo(SSRBundle.message("predefined.configuration.labeled.break"), "break '_label;", INTERESTING_TYPE),
//createSearchTemplateInfo("methods called","'_?.'_:[ref('Method)] ('_*)", INTERESTING_TYPE),
//createSearchTemplateInfo("fields selected","'_?.'_:[ref('Field)] ", INTERESTING_TYPE),
//createSearchTemplateInfo("symbols used","'_:[ref('Symbol)] ", INTERESTING_TYPE),
@@ -102,11 +102,13 @@ predefined.configuration.bean.info.classes=Bean info classes
predefined.configuration.all.expressions.of.some.type=all expressions of some type
predefined.configuration.variables.of.generic.types=variables of generic types
predefined.configuration.diamond.operators=diamond operators
predefined.configuration.method.returns.bounded.wildcard=method returns bounded wildcard
predefined.configuration.comments=comments
predefined.configuration.fields_variables.with.given.name.pattern.updated=fields/variables with given name pattern updated
predefined.configuration.trys=try's
predefined.configuration.try.without.resources=try statements without resources and catch blocks
predefined.configuration.switch.with.branches=switch statements with few branches
predefined.configuration.labeled.break=labeled break statements
predefined.configuration.block.dcls=block dcls
predefined.configuration.methods.of.the.class=methods of the class
predefined.configuration.deprecated.methods=deprecated methods
@@ -152,7 +154,7 @@ predefined.configuration.classes.interfaces.enums=classes, interfaces \\& enums
predefined.configuration.new.expressions=new expressions
predefined.configuration.lambdas=lambdas
predefined.configuration.method.references=method references
predefined.configuration.string.concatenations=string concatenations
predefined.configuration.string.concatenations=string concatenations with many operands
predefined.configuration.deprecated.method.calls=method calls to deprecated methods
# edit variable constraint dialog options
@@ -240,6 +242,7 @@ predefined.configuration.class.static.blocks=static blocks in class
predefined.configuration.class.instance.initialization.blocks=instance initialization blocks
predefined.configuration.class.any.initialization.blocks=any class initialization block
predefined.configuration.logging.without.if=logging without if
predefined.configuration.assert.without.description=assert statement without description
predefined.configuration.class.with.parameterless.constructors=classes with parameterless constructors
predefined.configuration.static.fields.without.final=static fields that are not final
inspection.script.problem={0}\n In Structural Search inspection template ''{1}''
@@ -115,6 +115,42 @@ public class JavaPredefinedConfigurationsTest extends StructuralSearchTestCase {
" case 3:" +
" default:" +
" }")));
testCases.put(SSRBundle.message("predefined.configuration.string.concatenations"),
pair("class X {{" +
" String s = \"1\" + \"2\" + \"3\" + \"4\" + \"5\" + \"6\" + \"7\" + \"8\" + \"9\" + \"10\" + \"11\";" +
" String t = \"1\" + \"2\" + \"3\" + \"4\" + \"5\" + \"6\" + \"7\" + \"8\" + \"9\"+ \"10\";",
asList("\"1\" + \"2\" + \"3\" + \"4\" + \"5\" + \"6\" + \"7\" + \"8\" + \"9\" + \"10\" + \"11\"")));
testCases.put(SSRBundle.message("predefined.configuration.assert.without.description"),
pair("class X {{" +
" assert true;" +
" assert false : false;" +
" assert false : \"reason\";" +
"}}",
asList("assert true;")));
testCases.put(SSRBundle.message("predefined.configuration.labeled.break"),
pair("class X {{" +
" break one;" +
" break;" +
" continue;" +
" continue here;" +
"}}",
asList("break one;")));
testCases.put(SSRBundle.message("predefined.configuration.method.returns.bounded.wildcard"),
pair("abstract class X {" +
" List<? extends Number> one() {" +
" return null;" +
" }" +
" abstract List<? extends Number> ignore();" +
" List<?> two() {" +
" return null;" +
" }" +
" <T extends Number> T three() {" +
" return null;" +
" }" +
"}",
asList("List<? extends Number> one() {" +
" return null;" +
" }")));
}
public void testPredefinedConfigurations() {
@@ -125,7 +161,7 @@ public class JavaPredefinedConfigurationsTest extends StructuralSearchTestCase {
final SearchConfiguration searchConfiguration = (SearchConfiguration)template;
options = searchConfiguration.getMatchOptions();
final List<MatchResult> matches = testMatcher.testFindMatches(testCase.first, options, true, StdFileTypes.JAVA, null, false);
assertEquals(testCase.second.size(), matches.size());
assertEquals(template.getName(), testCase.second.size(), matches.size());
for (int i = 0; i < matches.size(); i++) {
final String matchText = StructuralSearchUtil.getPresentableElement(matches.get(i).getMatch()).getText();
assertEquals(template.getName(), testCase.second.get(i), matchText);