Skip to content

Commit 0eaeaaa

Browse files
committed
Bump SonarQube minimum version to 4.5.2 LTS and refactor for deprecation
1 parent d27b4d0 commit 0eaeaaa

33 files changed

+439
-196
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@
9595
<properties>
9696
<license.owner>${project.organization.name}</license.owner>
9797
<license.mailto>${project.organization.url}</license.mailto>
98-
<sonar.version>4.3</sonar.version>
98+
<sonar.version>4.5.2</sonar.version>
9999
<sslr.version>1.20</sslr.version>
100100
<orchestrator.version>3.10.1</orchestrator.version>
101101
</properties>

sonar-objective-c-plugin/src/main/java/org/sonar/objectivec/ObjectiveCAstScanner.java

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@
1919
*/
2020
package org.sonar.objectivec;
2121

22+
import com.sonar.sslr.api.Grammar;
2223
import com.sonar.sslr.impl.Parser;
23-
import org.sonar.objectivec.api.ObjectiveCGrammar;
2424
import org.sonar.objectivec.api.ObjectiveCMetric;
25+
import org.sonar.objectivec.highlighter.SonarComponents;
26+
import org.sonar.objectivec.highlighter.SyntaxHighlighterVisitor;
2527
import org.sonar.objectivec.parser.ObjectiveCParser;
2628
import org.sonar.squidbridge.AstScanner;
2729
import org.sonar.squidbridge.CommentAnalyser;
@@ -35,22 +37,25 @@
3537
import org.sonar.squidbridge.metrics.LinesOfCodeVisitor;
3638
import org.sonar.squidbridge.metrics.LinesVisitor;
3739

40+
import javax.annotation.Nullable;
3841
import java.io.File;
3942
import java.util.Collection;
4043

4144
public class ObjectiveCAstScanner {
4245

4346
private ObjectiveCAstScanner() {
47+
// prevents outside instantiation
4448
}
4549

4650
/**
4751
* Helper method for testing checks without having to deploy them on a Sonar instance.
4852
*/
49-
public static SourceFile scanSingleFile(File file, SquidAstVisitor<ObjectiveCGrammar>... visitors) {
53+
@SafeVarargs
54+
public static SourceFile scanSingleFile(File file, SquidAstVisitor<Grammar>... visitors) {
5055
if (!file.isFile()) {
5156
throw new IllegalArgumentException("File '" + file + "' not found.");
5257
}
53-
AstScanner<ObjectiveCGrammar> scanner = create(new ObjectiveCConfiguration(), visitors);
58+
AstScanner<Grammar> scanner = create(new ObjectiveCConfiguration(), null, visitors);
5459
scanner.scanFile(file);
5560
Collection<SourceCode> sources = scanner.getIndex().search(new QueryByType(SourceFile.class));
5661
if (sources.size() != 1) {
@@ -59,12 +64,13 @@ public static SourceFile scanSingleFile(File file, SquidAstVisitor<ObjectiveCGra
5964
return (SourceFile) sources.iterator().next();
6065
}
6166

62-
public static AstScanner<ObjectiveCGrammar> create(ObjectiveCConfiguration conf,
63-
SquidAstVisitor<ObjectiveCGrammar>... visitors) {
64-
final SquidAstVisitorContextImpl<ObjectiveCGrammar> context = new SquidAstVisitorContextImpl<ObjectiveCGrammar>(new SourceProject("Objective-C Project"));
65-
final Parser<ObjectiveCGrammar> parser = ObjectiveCParser.create(conf);
67+
@SafeVarargs
68+
public static AstScanner<Grammar> create(ObjectiveCConfiguration conf,
69+
@Nullable SonarComponents sonarComponents, SquidAstVisitor<Grammar>... visitors) {
70+
final SquidAstVisitorContextImpl<Grammar> context = new SquidAstVisitorContextImpl<>(new SourceProject("Objective-C Project"));
71+
final Parser<Grammar> parser = ObjectiveCParser.create(conf);
6672

67-
AstScanner.Builder<ObjectiveCGrammar> builder = AstScanner.<ObjectiveCGrammar>builder(context).setBaseParser(parser);
73+
AstScanner.Builder<Grammar> builder = AstScanner.builder(context).setBaseParser(parser);
6874

6975
/* Metrics */
7076
builder.withMetrics(ObjectiveCMetric.values());
@@ -92,13 +98,23 @@ public String getContents(String comment) {
9298
builder.setFilesMetric(ObjectiveCMetric.FILES);
9399

94100
/* Metrics */
95-
builder.withSquidAstVisitor(new LinesVisitor<ObjectiveCGrammar>(ObjectiveCMetric.LINES));
96-
builder.withSquidAstVisitor(new LinesOfCodeVisitor<ObjectiveCGrammar>(ObjectiveCMetric.LINES_OF_CODE));
97-
builder.withSquidAstVisitor(CommentsVisitor.<ObjectiveCGrammar>builder().withCommentMetric(ObjectiveCMetric.COMMENT_LINES)
101+
builder.withSquidAstVisitor(new LinesVisitor<>(ObjectiveCMetric.LINES));
102+
builder.withSquidAstVisitor(new LinesOfCodeVisitor<>(ObjectiveCMetric.LINES_OF_CODE));
103+
builder.withSquidAstVisitor(CommentsVisitor.builder().withCommentMetric(ObjectiveCMetric.COMMENT_LINES)
98104
.withNoSonar(true)
99105
.withIgnoreHeaderComment(conf.getIgnoreHeaderComments())
100106
.build());
101107

108+
/* Syntax highlighter */
109+
if (sonarComponents != null) {
110+
builder.withSquidAstVisitor(new SyntaxHighlighterVisitor(sonarComponents, conf.getCharset()));
111+
}
112+
113+
/* External visitors */
114+
for (SquidAstVisitor<Grammar> visitor : visitors) {
115+
builder.withSquidAstVisitor(visitor);
116+
}
117+
102118
return builder.build();
103119
}
104120

sonar-objective-c-plugin/src/main/java/org/sonar/objectivec/ObjectiveCConfiguration.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public class ObjectiveCConfiguration extends SquidConfiguration {
2828
private boolean ignoreHeaderComments;
2929

3030
public ObjectiveCConfiguration() {
31+
// no-op
3132
}
3233

3334
public ObjectiveCConfiguration(Charset charset) {

sonar-objective-c-plugin/src/main/java/org/sonar/objectivec/api/ObjectiveCGrammar.java

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,22 @@
2020
package org.sonar.objectivec.api;
2121

2222
import com.sonar.sslr.api.Grammar;
23-
import com.sonar.sslr.api.Rule;
23+
import org.sonar.sslr.grammar.GrammarRuleKey;
24+
import org.sonar.sslr.grammar.LexerfulGrammarBuilder;
2425

25-
public class ObjectiveCGrammar extends Grammar {
26+
import static com.sonar.sslr.api.GenericTokenType.EOF;
2627

27-
public Rule identifierName;
28+
public enum ObjectiveCGrammar implements GrammarRuleKey {
2829

29-
// A.1 Lexical
30+
COMPILATION_UNIT;
3031

31-
public Rule literal;
32-
public Rule nullLiteral;
33-
public Rule booleanLiteral;
34-
public Rule stringLiteral;
32+
public static Grammar create() {
33+
LexerfulGrammarBuilder b = LexerfulGrammarBuilder.create();
3534

36-
public Rule program;
35+
b.rule(COMPILATION_UNIT).is(b.zeroOrMore(b.nextNot(EOF), b.anyToken()), EOF);
36+
b.setRootRule(COMPILATION_UNIT);
3737

38-
public Rule sourceElements;
39-
public Rule sourceElement;
40-
41-
@Override
42-
public Rule getRootRule() {
43-
return program;
38+
return b.buildWithMemoizationOfMatchesForAllRules();
4439
}
4540

4641
}

sonar-objective-c-plugin/src/main/java/org/sonar/objectivec/api/ObjectiveCKeyword.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,14 +154,17 @@ public enum ObjectiveCKeyword implements TokenType {
154154
this.value = value;
155155
}
156156

157+
@Override
157158
public String getName() {
158159
return name();
159160
}
160161

162+
@Override
161163
public String getValue() {
162164
return value;
163165
}
164166

167+
@Override
165168
public boolean hasToBeSkippedFromAst(AstNode node) {
166169
return false;
167170
}

sonar-objective-c-plugin/src/main/java/org/sonar/objectivec/api/ObjectiveCMetric.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,27 @@ public enum ObjectiveCMetric implements MetricDef {
3030
COMPLEXITY,
3131
FUNCTIONS;
3232

33+
@Override
3334
public String getName() {
3435
return name();
3536
}
3637

38+
@Override
3739
public boolean isCalculatedMetric() {
3840
return false;
3941
}
4042

43+
@Override
4144
public boolean aggregateIfThereIsAlreadyAValue() {
4245
return true;
4346
}
4447

48+
@Override
4549
public boolean isThereAggregationFormula() {
4650
return true;
4751
}
4852

53+
@Override
4954
public CalculatedMetricFormula getCalculatedMetricFormula() {
5055
return null;
5156
}

sonar-objective-c-plugin/src/main/java/org/sonar/objectivec/api/ObjectiveCPunctuator.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,18 +93,21 @@ public enum ObjectiveCPunctuator implements TokenType {
9393

9494
private final String value;
9595

96-
private ObjectiveCPunctuator(String word) {
96+
/*private*/ ObjectiveCPunctuator(String word) {
9797
this.value = word;
9898
}
9999

100+
@Override
100101
public String getName() {
101102
return name();
102103
}
103104

105+
@Override
104106
public String getValue() {
105107
return value;
106108
}
107109

110+
@Override
108111
public boolean hasToBeSkippedFromAst(AstNode node) {
109112
return false;
110113
}

sonar-objective-c-plugin/src/main/java/org/sonar/objectivec/api/ObjectiveCTokenType.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,17 @@ public enum ObjectiveCTokenType implements TokenType {
2626

2727
NUMERIC_LITERAL;
2828

29+
@Override
2930
public String getName() {
3031
return name();
3132
}
3233

34+
@Override
3335
public String getValue() {
3436
return name();
3537
}
3638

39+
@Override
3740
public boolean hasToBeSkippedFromAst(AstNode node) {
3841
return false;
3942
}

sonar-objective-c-plugin/src/main/java/org/sonar/objectivec/checks/CheckList.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ public final class CheckList {
2727

2828
public static final String REPOSITORY_KEY = "objectivec";
2929

30-
public static final String SONAR_WAY_PROFILE = "Sonar way";
30+
public static final String SONAR_WAY_PROFILE = "SonarQube way";
3131

3232
private CheckList() {
3333
}
3434

3535
public static List<Class> getChecks() {
36-
return ImmutableList.<Class>of(
36+
return ImmutableList.of(
3737
// Add checks here
3838
);
3939
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* SonarQube Objective-C (Community) Plugin
3+
* Copyright (C) 2012-2016 OCTO Technology, Backelite, and contributors
4+
5+
*
6+
* This program is free software; you can redistribute it and/or
7+
* modify it under the terms of the GNU Lesser General Public
8+
* License as published by the Free Software Foundation; either
9+
* version 3 of the License, or (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14+
* Lesser General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU Lesser General Public License
17+
* along with this program; if not, write to the Free Software Foundation,
18+
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19+
*/
20+
package org.sonar.objectivec.highlighter;
21+
22+
import org.sonar.api.BatchExtension;
23+
import org.sonar.api.batch.fs.FileSystem;
24+
import org.sonar.api.batch.fs.InputFile;
25+
import org.sonar.api.component.ResourcePerspectives;
26+
import org.sonar.api.source.Highlightable;
27+
28+
import javax.annotation.CheckForNull;
29+
import java.io.File;
30+
31+
public class SonarComponents implements BatchExtension {
32+
33+
private final ResourcePerspectives resourcePerspectives;
34+
private final FileSystem fs;
35+
36+
public SonarComponents(ResourcePerspectives resourcePerspectives, FileSystem fs) {
37+
this.resourcePerspectives = resourcePerspectives;
38+
this.fs = fs;
39+
}
40+
41+
@CheckForNull
42+
public InputFile inputFileFor(File file) {
43+
return fs.inputFile(fs.predicates().hasAbsolutePath(file.getAbsolutePath()));
44+
}
45+
46+
public Highlightable highlightableFor(InputFile inputFile) {
47+
return resourcePerspectives.as(Highlightable.class, inputFile);
48+
}
49+
}

0 commit comments

Comments
 (0)