@@ -55,6 +55,7 @@ public class CheckstyleProfileExporter extends ProfileExporter { | |||
this(new BaseConfiguration()); | |||
} | |||
@Override | |||
public void exportProfile(RulesProfile profile, Writer writer) { | |||
try { | |||
ListMultimap<String, ActiveRule> activeRulesByConfigKey = arrangeByConfigKey(profile.getActiveRulesByRepository(CheckstyleConstants.REPOSITORY_KEY)); |
@@ -32,6 +32,7 @@ public final class SonarWayProfile extends ProfileDefinition { | |||
this.xmlProfileParser = xmlProfileParser; | |||
} | |||
@Override | |||
public RulesProfile createProfile(ValidationMessages messages) { | |||
return xmlProfileParser.parseResource(getClass().getClassLoader(), "org/sonar/plugins/checkstyle/profile-sonar-way.xml", messages); | |||
} |
@@ -33,6 +33,7 @@ public final class SunConventionsProfile extends ProfileDefinition { | |||
} | |||
@Override | |||
public RulesProfile createProfile(ValidationMessages messages) { | |||
return xmlProfileParser.parseResource(getClass().getClassLoader(), "org/sonar/plugins/checkstyle/profile-sun-conventions.xml", messages); | |||
} |
@@ -87,6 +87,7 @@ public class JacocoAntInitializer extends Initializer implements CoverageExtensi | |||
this.taskName = taskName; | |||
} | |||
@Override | |||
public boolean supportsTask(final Task task) { | |||
return taskName.equals(task.getTaskName()); | |||
} |
@@ -43,6 +43,7 @@ public class AsmClassProviderImpl extends AsmClassProvider { | |||
this.classLoader = classLoader; | |||
} | |||
@Override | |||
public AsmClass getClass(String internalName, DETAIL_LEVEL level) { | |||
if (internalName == null) { | |||
throw new IllegalStateException("You can try to load a class whose internalName = 'null'"); |
@@ -36,6 +36,7 @@ public class AsmClassVisitor extends EmptyVisitor { | |||
this.asmClass = asmClass; | |||
} | |||
@Override | |||
public void visit(int version, int accessFlags, String internalName, String signature, String superClass, String[] interfaces) { | |||
if (asmClass.getDetailLevel() == DETAIL_LEVEL.NOTHING) { | |||
asmClass.setAccessFlags(accessFlags); | |||
@@ -59,6 +60,7 @@ public class AsmClassVisitor extends EmptyVisitor { | |||
} | |||
} | |||
@Override | |||
public FieldVisitor visitField(int access, String fieldName, String description, String signature, Object value) { | |||
AsmField field = asmClass.getFieldOrCreateIt(fieldName); | |||
field.setAccessFlags(access); | |||
@@ -68,6 +70,7 @@ public class AsmClassVisitor extends EmptyVisitor { | |||
return null; | |||
} | |||
@Override | |||
public MethodVisitor visitMethod(int access, String methodName, String description, String signature, String[] exceptions) { | |||
AsmMethod method = asmClass.getMethodOrCreateIt(methodName + description); | |||
if (isInheritedMethodSignature(method.getParent(), method.getKey())) { | |||
@@ -87,6 +90,7 @@ public class AsmClassVisitor extends EmptyVisitor { | |||
return null; | |||
} | |||
@Override | |||
public void visitEnd() { | |||
asmClass.setDetailLevel(level); | |||
} |
@@ -39,6 +39,7 @@ public class AsmMethodVisitor extends EmptyVisitor { | |||
emptyMethod = true; | |||
} | |||
@Override | |||
public void visitFieldInsn(int opcode, String owner, String fieldName, String fieldDescription) { | |||
AsmClass targetClass = asmClassProvider.getClass(owner, DETAIL_LEVEL.NOTHING); | |||
AsmField targetField = targetClass.getFieldOrCreateIt(fieldName); | |||
@@ -46,6 +47,7 @@ public class AsmMethodVisitor extends EmptyVisitor { | |||
emptyMethod = false; | |||
} | |||
@Override | |||
public void visitMethodInsn(int opcode, String owner, String methodName, String methodDescription) { | |||
if (isNotCallToJavaArrayMethod(owner)) { | |||
AsmClass targetClass = asmClassProvider.getClass(owner, DETAIL_LEVEL.STRUCTURE); | |||
@@ -59,6 +61,7 @@ public class AsmMethodVisitor extends EmptyVisitor { | |||
return internalName.charAt(0) != '['; | |||
} | |||
@Override | |||
public void visitTryCatchBlock(Label start, Label end, Label handler, String exception) { | |||
if (exception != null) { | |||
AsmClass exceptionClass = asmClassProvider.getClass(exception, DETAIL_LEVEL.NOTHING); | |||
@@ -67,42 +70,51 @@ public class AsmMethodVisitor extends EmptyVisitor { | |||
emptyMethod = false; | |||
} | |||
@Override | |||
public void visitTypeInsn(int opcode, String internalName) { | |||
AsmClass usedClass = asmClassProvider.getClass(internalName, DETAIL_LEVEL.NOTHING); | |||
method.addEdge(new AsmEdge(method, usedClass, SourceCodeEdgeUsage.USES, lineNumber)); | |||
emptyMethod = false; | |||
} | |||
@Override | |||
public void visitLineNumber(final int line, final Label start) { | |||
lineNumber = line; | |||
} | |||
@Override | |||
public void visitEnd() { | |||
method.setEmpty(emptyMethod); | |||
} | |||
@Override | |||
public void visitIincInsn(int var, int increment) { | |||
emptyMethod = false; | |||
} | |||
@Override | |||
public void visitFrame(int type, int nLocal, Object[] local, int nStack, Object[] stack) { | |||
emptyMethod = false; | |||
} | |||
@Override | |||
public void visitInsn(int opcode) { | |||
if (opcode != Opcodes.RETURN) { | |||
emptyMethod = false; | |||
} | |||
} | |||
@Override | |||
public void visitIntInsn(int opcode, int operand) { | |||
emptyMethod = false; | |||
} | |||
@Override | |||
public void visitJumpInsn(int opcode, Label label) { | |||
emptyMethod = false; | |||
} | |||
@Override | |||
public void visitLdcInsn(Object cst) { | |||
if (cst instanceof Type) { | |||
Type type = (Type) cst; | |||
@@ -112,18 +124,22 @@ public class AsmMethodVisitor extends EmptyVisitor { | |||
emptyMethod = false; | |||
} | |||
@Override | |||
public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) { | |||
emptyMethod = false; | |||
} | |||
@Override | |||
public void visitMultiANewArrayInsn(String desc, int dims) { | |||
emptyMethod = false; | |||
} | |||
@Override | |||
public void visitTableSwitchInsn(int min, int max, Label dflt, Label[] labels) { | |||
emptyMethod = false; | |||
} | |||
@Override | |||
public void visitVarInsn(int opcode, int var) { | |||
emptyMethod = false; | |||
} |
@@ -24,6 +24,7 @@ import org.sonar.squid.measures.Metric; | |||
public class DITVisitor extends BytecodeVisitor { | |||
@Override | |||
public void visitClass(AsmClass asmClass) { | |||
int dit = calculateDepthOfInheritance(asmClass); | |||
@@ -39,10 +39,12 @@ public class DependenciesVisitor extends BytecodeVisitor { | |||
this.graph = graph; | |||
} | |||
@Override | |||
public void visitClass(AsmClass asmClass) { | |||
this.fromSourceClass = getSourceClass(asmClass); | |||
} | |||
@Override | |||
public void visitEdge(AsmEdge edge) { | |||
AsmClass toAsmClass = edge.getTargetAsmClass(); | |||
SourceClass toSourceClass = getSourceClass(toAsmClass); |
@@ -40,11 +40,13 @@ public class LCOM4Visitor extends BytecodeVisitor { | |||
this.fieldsToExcludeFromLcom4Calculation = conf.getFielsToExcludeFromLcom4Calculation(); | |||
} | |||
@Override | |||
public void visitClass(AsmClass asmClass) { | |||
this.asmClass = asmClass; | |||
unrelatedBlocks = new ArrayList<Set<AsmResource>>(); | |||
} | |||
@Override | |||
public void visitMethod(AsmMethod asmMethod) { | |||
if (isMethodElligibleForLCOM4Computation(asmMethod)) { | |||
ensureBlockIsCreated(asmMethod); | |||
@@ -90,6 +92,7 @@ public class LCOM4Visitor extends BytecodeVisitor { | |||
} | |||
@Override | |||
public void leaveClass(AsmClass asmClass) { | |||
removeIsolatedMethodBlocks(); | |||
@@ -24,6 +24,7 @@ import org.sonar.squid.measures.Metric; | |||
public class NOCVisitor extends BytecodeVisitor { | |||
@Override | |||
public void visitClass(AsmClass asmClass) { | |||
getSourceClass(asmClass).add(Metric.NOC, asmClass.getNumberOfChildren()); | |||
@@ -34,18 +34,21 @@ public class RFCVisitor extends BytecodeVisitor { | |||
private Set<AsmMethod> distinctCallToExternalMethods; | |||
private int rfc = 0; | |||
@Override | |||
public void visitClass(AsmClass asmClass) { | |||
rfc = 0; | |||
this.asmClass = asmClass; | |||
distinctCallToExternalMethods = new HashSet<AsmMethod>(); | |||
} | |||
@Override | |||
public void visitMethod(AsmMethod asmMethod) { | |||
if (asmMethod.isBodyLoaded() && !asmMethod.isAccessor()) { | |||
rfc++; | |||
} | |||
} | |||
@Override | |||
public void visitEdge(AsmEdge edge) { | |||
if (edge.getTargetAsmClass() != asmClass && edge.getUsage() == SourceCodeEdgeUsage.CALLS_METHOD | |||
&& !((AsmMethod) edge.getTo()).isAccessor()) { | |||
@@ -53,6 +56,7 @@ public class RFCVisitor extends BytecodeVisitor { | |||
} | |||
} | |||
@Override | |||
public void leaveClass(AsmClass asmClass) { | |||
rfc += distinctCallToExternalMethods.size(); | |||
getSourceClass(asmClass).add(Metric.RFC, rfc); |
@@ -56,6 +56,7 @@ public class CheckMessages { | |||
} | |||
private static final Ordering<CheckMessage> CHECK_MESSAGE_ORDERING = new Ordering<CheckMessage>() { | |||
@Override | |||
public int compare(CheckMessage o1, CheckMessage o2) { | |||
return ObjectUtils.compare(o1.getLine(), o2.getLine()); | |||
} |
@@ -66,10 +66,12 @@ public class DefaultProjectFileSystem2 extends DefaultProjectFileSystem { | |||
this(project, languages, def, pom, new FileFilter[0]); | |||
} | |||
@Override | |||
public File getBasedir() { | |||
return def.getBaseDir(); | |||
} | |||
@Override | |||
public File getBuildDir() { | |||
if (pom != null) { | |||
return resolvePath(pom.getBuild().getDirectory()); | |||
@@ -79,6 +81,7 @@ public class DefaultProjectFileSystem2 extends DefaultProjectFileSystem { | |||
} | |||
} | |||
@Override | |||
public File getBuildOutputDir() { | |||
if (pom != null) { | |||
return resolvePath(pom.getBuild().getOutputDirectory()); | |||
@@ -101,6 +104,7 @@ public class DefaultProjectFileSystem2 extends DefaultProjectFileSystem { | |||
/** | |||
* @deprecated since 2.6, because should be immutable | |||
*/ | |||
@Override | |||
@Deprecated | |||
public DefaultProjectFileSystem addSourceDir(File dir) { | |||
if (dir == null) { | |||
@@ -125,6 +129,7 @@ public class DefaultProjectFileSystem2 extends DefaultProjectFileSystem { | |||
/** | |||
* @deprecated since 2.6, because should be immutable | |||
*/ | |||
@Override | |||
@Deprecated | |||
public DefaultProjectFileSystem addTestDir(File dir) { | |||
if (dir == null) { | |||
@@ -140,6 +145,7 @@ public class DefaultProjectFileSystem2 extends DefaultProjectFileSystem { | |||
/** | |||
* TODO Godin: seems that used only by Cobertura and Clover | |||
*/ | |||
@Override | |||
public File getReportOutputDir() { | |||
if (pom != null) { | |||
return resolvePath(pom.getReporting().getOutputDirectory()); |
@@ -37,14 +37,17 @@ public class ServerMetadata extends Server { | |||
this.settings = settings; | |||
} | |||
@Override | |||
public String getId() { | |||
return settings.getString(CoreProperties.SERVER_ID); | |||
} | |||
@Override | |||
public String getVersion() { | |||
return settings.getString(CoreProperties.SERVER_VERSION); | |||
} | |||
@Override | |||
public Date getStartedAt() { | |||
String dateString = settings.getString(CoreProperties.SERVER_STARTTIME); | |||
if (dateString != null) { | |||
@@ -58,6 +61,7 @@ public class ServerMetadata extends Server { | |||
return null; | |||
} | |||
@Override | |||
public String getURL() { | |||
return StringUtils.removeEnd(StringUtils.defaultIfBlank(settings.getString("sonar.host.url"), "http://localhost:9000"), "/"); | |||
} |
@@ -95,6 +95,7 @@ public class DefaultIndex extends SonarIndex { | |||
} | |||
} | |||
@Override | |||
public Project getProject() { | |||
return currentProject; | |||
} | |||
@@ -134,6 +135,7 @@ public class DefaultIndex extends SonarIndex { | |||
lock.unlock(); | |||
} | |||
@Override | |||
public Measure getMeasure(Resource resource, Metric metric) { | |||
Bucket bucket = buckets.get(resource); | |||
if (bucket != null) { | |||
@@ -145,6 +147,7 @@ public class DefaultIndex extends SonarIndex { | |||
return null; | |||
} | |||
@Override | |||
public <M> M getMeasures(Resource resource, MeasuresFilter<M> filter) { | |||
Bucket bucket = buckets.get(resource); | |||
if (bucket != null) { | |||
@@ -157,6 +160,7 @@ public class DefaultIndex extends SonarIndex { | |||
/** | |||
* the measure is updated if it's already registered. | |||
*/ | |||
@Override | |||
public Measure addMeasure(Resource resource, Measure measure) { | |||
Bucket bucket = checkIndexed(resource); | |||
if (bucket != null && !bucket.isExcluded()) { | |||
@@ -182,6 +186,7 @@ public class DefaultIndex extends SonarIndex { | |||
// | |||
// | |||
@Override | |||
public Dependency addDependency(Dependency dependency) { | |||
Dependency existingDep = getEdge(dependency.getFrom(), dependency.getTo()); | |||
if (existingDep != null) { | |||
@@ -230,6 +235,7 @@ public class DefaultIndex extends SonarIndex { | |||
incomingDeps.put(dependency.getFrom(), dependency); | |||
} | |||
@Override | |||
public Set<Dependency> getDependencies() { | |||
return dependencies; | |||
} | |||
@@ -287,6 +293,7 @@ public class DefaultIndex extends SonarIndex { | |||
/** | |||
* {@inheritDoc} | |||
*/ | |||
@Override | |||
public List<Violation> getViolations(ViolationQuery violationQuery) { | |||
Resource resource = violationQuery.getResource(); | |||
if (resource == null) { | |||
@@ -308,6 +315,7 @@ public class DefaultIndex extends SonarIndex { | |||
return filteredViolations; | |||
} | |||
@Override | |||
public void addViolation(Violation violation, boolean force) { | |||
Resource resource = violation.getResource(); | |||
if (resource == null) { | |||
@@ -362,10 +370,12 @@ public class DefaultIndex extends SonarIndex { | |||
// | |||
// | |||
@Override | |||
public void addLink(ProjectLink link) { | |||
persistence.saveLink(currentProject, link); | |||
} | |||
@Override | |||
public void deleteLink(String key) { | |||
persistence.deleteLink(currentProject, key); | |||
} | |||
@@ -378,15 +388,18 @@ public class DefaultIndex extends SonarIndex { | |||
// | |||
// | |||
@Override | |||
public List<Event> getEvents(Resource resource) { | |||
// currently events are not cached in memory | |||
return persistence.getEvents(resource); | |||
} | |||
@Override | |||
public void deleteEvent(Event event) { | |||
persistence.deleteEvent(event); | |||
} | |||
@Override | |||
public Event addEvent(Resource resource, String name, String description, String category, Date date) { | |||
Event event = new Event(name, description, category); | |||
event.setDate(date); | |||
@@ -396,6 +409,7 @@ public class DefaultIndex extends SonarIndex { | |||
return null; | |||
} | |||
@Override | |||
public void setSource(Resource reference, String source) { | |||
Bucket bucket = checkIndexed(reference); | |||
if (bucket != null && !bucket.isExcluded()) { | |||
@@ -403,6 +417,7 @@ public class DefaultIndex extends SonarIndex { | |||
} | |||
} | |||
@Override | |||
public String getSource(Resource resource) { | |||
return persistence.getSource(resource); | |||
} | |||
@@ -410,11 +425,13 @@ public class DefaultIndex extends SonarIndex { | |||
/** | |||
* Does nothing if the resource is already registered. | |||
*/ | |||
@Override | |||
public Resource addResource(Resource resource) { | |||
Bucket bucket = doIndex(resource); | |||
return bucket != null ? bucket.getResource() : null; | |||
} | |||
@Override | |||
public <R extends Resource> R getResource(R reference) { | |||
Bucket bucket = buckets.get(reference); | |||
if (bucket != null) { | |||
@@ -442,6 +459,7 @@ public class DefaultIndex extends SonarIndex { | |||
return excluded; | |||
} | |||
@Override | |||
public List<Resource> getChildren(Resource resource) { | |||
return getChildren(resource, false); | |||
} | |||
@@ -459,6 +477,7 @@ public class DefaultIndex extends SonarIndex { | |||
return children; | |||
} | |||
@Override | |||
public Resource getParent(Resource resource) { | |||
Bucket bucket = getBucket(resource, false); | |||
if (bucket != null && bucket.getParent() != null) { | |||
@@ -467,6 +486,7 @@ public class DefaultIndex extends SonarIndex { | |||
return null; | |||
} | |||
@Override | |||
public boolean index(Resource resource) { | |||
Bucket bucket = doIndex(resource); | |||
return bucket != null && !bucket.isExcluded(); | |||
@@ -479,6 +499,7 @@ public class DefaultIndex extends SonarIndex { | |||
return doIndex(resource, resource.getParent()); | |||
} | |||
@Override | |||
public boolean index(Resource resource, Resource parentReference) { | |||
Bucket bucket = doIndex(resource, parentReference); | |||
return bucket != null && !bucket.isExcluded(); | |||
@@ -541,11 +562,13 @@ public class DefaultIndex extends SonarIndex { | |||
return bucket; | |||
} | |||
@Override | |||
public boolean isExcluded(Resource reference) { | |||
Bucket bucket = getBucket(reference, true); | |||
return bucket != null && bucket.isExcluded(); | |||
} | |||
@Override | |||
public boolean isIndexed(Resource reference, boolean acceptExcluded) { | |||
return getBucket(reference, acceptExcluded) != null; | |||
} |
@@ -68,6 +68,7 @@ public class ChannelDispatcher<OUTPUT> extends Channel<OUTPUT> { | |||
this.failIfNoChannelToConsumeOneCharacter = builder.failIfNoChannelToConsumeOneCharacter; | |||
} | |||
@Override | |||
public boolean consume(CodeReader code, OUTPUT output) { | |||
int nextChar = code.peek(); | |||
while (nextChar != -1) { |
@@ -33,6 +33,7 @@ public class CaseInsensitiveKeywordsTokenizer extends KeywordsTokenizer { | |||
setCaseInsensitive(true); | |||
} | |||
@Override | |||
public KeywordsTokenizer clone() { | |||
KeywordsTokenizer clone = super.clone(); | |||
clone.setCaseInsensitive(true); |
@@ -56,6 +56,7 @@ public class HtmlCodeBuilder implements Appendable { | |||
colorizedCode.append(htmlTag); | |||
} | |||
@Override | |||
public String toString() { | |||
return colorizedCode.toString(); | |||
} |
@@ -38,6 +38,7 @@ public class HtmlRenderer extends Renderer { | |||
this(HtmlOptions.DEFAULT); | |||
} | |||
@Override | |||
public String render(Reader code, List<? extends Channel<HtmlCodeBuilder>> tokenizers) { | |||
try { | |||
List<Channel<HtmlCodeBuilder>> allTokenizers = new ArrayList<Channel<HtmlCodeBuilder>>(); |
@@ -37,6 +37,7 @@ public abstract class InlineDocTokenizer extends Tokenizer { | |||
this.startToken = startToken.toCharArray(); | |||
} | |||
@Override | |||
public boolean consume(CodeReader code, HtmlCodeBuilder codeBuilder) { | |||
if (code.peek() == startToken[0] && Arrays.equals(code.peek(startToken.length), startToken)) { | |||
codeBuilder.appendWithoutTransforming(tagBefore); |
@@ -59,6 +59,7 @@ public class KeywordsTokenizer extends NotThreadSafeTokenizer { | |||
this.matcher = Pattern.compile(DEFAULT_REGEX).matcher(""); | |||
} | |||
@Override | |||
public boolean consume(CodeReader code, HtmlCodeBuilder codeBuilder) { | |||
if (code.popTo(matcher, tmpBuilder) > 0) { | |||
if (isKeyword(tmpBuilder.toString())) { | |||
@@ -87,6 +88,7 @@ public class KeywordsTokenizer extends NotThreadSafeTokenizer { | |||
this.caseInsensitive = caseInsensitive; | |||
} | |||
@Override | |||
public KeywordsTokenizer clone() { | |||
KeywordsTokenizer clone = new KeywordsTokenizer(tagBefore, tagAfter, keywords, matcher.pattern().pattern()); | |||
clone.caseInsensitive = caseInsensitive; |
@@ -55,6 +55,7 @@ public class MultilinesDocTokenizer extends Tokenizer { | |||
startToken))); | |||
} | |||
@Override | |||
public boolean consume(CodeReader code, HtmlCodeBuilder codeBuilder) { | |||
if (hasNextToken(code, codeBuilder)) { | |||
codeBuilder.appendWithoutTransforming(tagBefore); |
@@ -26,5 +26,6 @@ package org.sonar.colorizer; | |||
*/ | |||
public abstract class NotThreadSafeTokenizer extends Tokenizer implements Cloneable { | |||
@Override | |||
public abstract NotThreadSafeTokenizer clone(); | |||
} |
@@ -57,6 +57,7 @@ public class RegexpTokenizer extends NotThreadSafeTokenizer{ | |||
return false; | |||
} | |||
@Override | |||
public RegexpTokenizer clone() { | |||
return new RegexpTokenizer(tagBefore, tagAfter, matcher.pattern().pattern()); | |||
} |
@@ -60,6 +60,7 @@ public class MsSql implements Dialect { | |||
registerColumnType(Types.CLOB, "nvarchar(max)"); | |||
} | |||
@Override | |||
public String getTypeName(int code, int length, int precision, int scale) { | |||
if (code != 2005) { | |||
return super.getTypeName(code, length, precision, scale); |
@@ -45,15 +45,18 @@ public class JpaDatabaseSession extends DatabaseSession { | |||
* Note that usage of this method is discouraged, because it allows to construct and execute queries without additional exception handling, | |||
* which done in methods of this class. | |||
*/ | |||
@Override | |||
public EntityManager getEntityManager() { | |||
return entityManager; | |||
} | |||
@Override | |||
public void start() { | |||
entityManager = connector.createEntityManager(); | |||
index = 0; | |||
} | |||
@Override | |||
public void stop() { | |||
commit(); | |||
if (entityManager != null && entityManager.isOpen()) { | |||
@@ -62,6 +65,7 @@ public class JpaDatabaseSession extends DatabaseSession { | |||
} | |||
} | |||
@Override | |||
public void commit() { | |||
if (entityManager != null && inTransaction) { | |||
if (entityManager.isOpen()) { | |||
@@ -77,6 +81,7 @@ public class JpaDatabaseSession extends DatabaseSession { | |||
} | |||
} | |||
@Override | |||
public void rollback() { | |||
if (entityManager != null && inTransaction) { | |||
entityManager.getTransaction().rollback(); | |||
@@ -84,23 +89,27 @@ public class JpaDatabaseSession extends DatabaseSession { | |||
} | |||
} | |||
@Override | |||
public <T> T save(T model) { | |||
startTransaction(); | |||
internalSave(model, true); | |||
return model; | |||
} | |||
@Override | |||
public Object saveWithoutFlush(Object model) { | |||
startTransaction(); | |||
internalSave(model, false); | |||
return model; | |||
} | |||
@Override | |||
public boolean contains(Object model) { | |||
startTransaction(); | |||
return entityManager.contains(model); | |||
} | |||
@Override | |||
public void save(Object... models) { | |||
startTransaction(); | |||
for (Object model : models) { | |||
@@ -123,11 +132,13 @@ public class JpaDatabaseSession extends DatabaseSession { | |||
} | |||
} | |||
@Override | |||
public Object merge(Object model) { | |||
startTransaction(); | |||
return entityManager.merge(model); | |||
} | |||
@Override | |||
public void remove(Object model) { | |||
startTransaction(); | |||
entityManager.remove(model); | |||
@@ -136,11 +147,13 @@ public class JpaDatabaseSession extends DatabaseSession { | |||
} | |||
} | |||
@Override | |||
public void removeWithoutFlush(Object model) { | |||
startTransaction(); | |||
entityManager.remove(model); | |||
} | |||
@Override | |||
public <T> T reattach(Class<T> entityClass, Object primaryKey) { | |||
startTransaction(); | |||
return entityManager.getReference(entityClass, primaryKey); | |||
@@ -157,6 +170,7 @@ public class JpaDatabaseSession extends DatabaseSession { | |||
* Note that not recommended to directly execute {@link Query#getSingleResult()}, because it will bypass exception handling, | |||
* which done in {@link #getSingleResult(Query, Object)}. | |||
*/ | |||
@Override | |||
public Query createQuery(String hql) { | |||
startTransaction(); | |||
return entityManager.createQuery(hql); | |||
@@ -172,6 +186,7 @@ public class JpaDatabaseSession extends DatabaseSession { | |||
* @return the result or <code>defaultValue</code>, if not found | |||
* @throws NonUniqueResultException if more than one result | |||
*/ | |||
@Override | |||
public <T> T getSingleResult(Query query, T defaultValue) { | |||
/* | |||
* See http://jira.codehaus.org/browse/SONAR-2225 | |||
@@ -199,6 +214,7 @@ public class JpaDatabaseSession extends DatabaseSession { | |||
} | |||
} | |||
@Override | |||
public <T> T getEntity(Class<T> entityClass, Object id) { | |||
startTransaction(); | |||
return getEntityManager().find(entityClass, id); | |||
@@ -208,6 +224,7 @@ public class JpaDatabaseSession extends DatabaseSession { | |||
* @return the result or <code>null</code>, if not found | |||
* @throws NonUniqueResultException if more than one result | |||
*/ | |||
@Override | |||
public <T> T getSingleResult(Class<T> entityClass, Object... criterias) { | |||
try { | |||
return getSingleResult(getQueryForCriterias(entityClass, true, criterias), (T) null); | |||
@@ -219,10 +236,12 @@ public class JpaDatabaseSession extends DatabaseSession { | |||
} | |||
} | |||
@Override | |||
public <T> List<T> getResults(Class<T> entityClass, Object... criterias) { | |||
return getQueryForCriterias(entityClass, true, criterias).getResultList(); | |||
} | |||
@Override | |||
public <T> List<T> getResults(Class<T> entityClass) { | |||
return getQueryForCriterias(entityClass, false, (Object[]) null).getResultList(); | |||
} |
@@ -28,6 +28,7 @@ public final class DerbyUtils { | |||
} | |||
public static final OutputStream DEV_NULL = new OutputStream() { | |||
@Override | |||
public void write(int b) { | |||
} | |||
}; |
@@ -69,6 +69,7 @@ public class DefaultRulesManager extends RulesManager { | |||
* @param ruleKey the rule key | |||
* @return the rule | |||
*/ | |||
@Override | |||
public Rule getPluginRule(String pluginKey, String ruleKey) { | |||
Map<String, Rule> rulesByKey = getPluginRulesIndexedByKey(pluginKey); | |||
return rulesByKey.get(ruleKey); |
@@ -89,10 +89,12 @@ public class SourceCode { | |||
this.encoding = encoding; | |||
} | |||
@Override | |||
public Reader getReader() throws Exception { | |||
return new InputStreamReader(new FileInputStream(file), encoding); | |||
} | |||
@Override | |||
public String getFileName() { | |||
return this.file.getAbsolutePath(); | |||
} | |||
@@ -114,10 +116,12 @@ public class SourceCode { | |||
this.name = name; | |||
} | |||
@Override | |||
public Reader getReader() { | |||
return new StringReader(source_code); | |||
} | |||
@Override | |||
public String getFileName() { | |||
return name; | |||
} |
@@ -114,6 +114,7 @@ public class TokenEntry implements Comparable<TokenEntry> { | |||
return this.index; | |||
} | |||
@Override | |||
public int hashCode() { | |||
return hashCode; | |||
} | |||
@@ -122,6 +123,7 @@ public class TokenEntry implements Comparable<TokenEntry> { | |||
this.hashCode = hashCode; | |||
} | |||
@Override | |||
public boolean equals(Object o) { | |||
if (!(o instanceof TokenEntry)) { | |||
return false; |
@@ -26,6 +26,7 @@ import net.sourceforge.pmd.cpd.SourceCode.CodeLoader; | |||
public abstract class CodeLoaderWithoutCache extends CodeLoader { | |||
@Override | |||
public final List<String> getCode() { | |||
return load(); | |||
} |
@@ -35,10 +35,12 @@ public class FileCodeLoaderWithoutCache extends CodeLoaderWithoutCache { | |||
this.encoding = encoding; | |||
} | |||
@Override | |||
public Reader getReader() throws Exception { | |||
return new InputStreamReader(new FileInputStream(file), encoding); | |||
} | |||
@Override | |||
public String getFileName() { | |||
return this.file.getAbsolutePath(); | |||
} |
@@ -40,6 +40,7 @@ public class CloneGroupMatcher extends TypeSafeMatcher<CloneGroup> { | |||
this.expectedParts = expectedParts; | |||
} | |||
@Override | |||
public boolean matchesSafely(CloneGroup cloneGroup) { | |||
// Check length | |||
if (expectedLen != cloneGroup.getCloneUnitLength()) { |
@@ -27,6 +27,7 @@ public class StringPrintWriter { | |||
builder.append(line + " \r"); | |||
} | |||
@Override | |||
public String toString() { | |||
return builder.toString(); | |||
} |
@@ -31,6 +31,7 @@ class MarkdownOutput { | |||
return ouput.append(character); | |||
} | |||
@Override | |||
public String toString() { | |||
return ouput.toString(); | |||
} |
@@ -64,6 +64,7 @@ public final class AnnotationCheckFactory extends CheckFactory { | |||
} | |||
} | |||
@Override | |||
protected Object createCheck(ActiveRule activeRule) { | |||
Object object = checksByKey.get(activeRule.getConfigKey()); | |||
if (object != null) { |
@@ -22,10 +22,12 @@ package org.sonar.api.config; | |||
import org.apache.commons.codec.binary.Base64; | |||
final class Base64Cipher extends Cipher { | |||
@Override | |||
String encrypt(String clearText) { | |||
return new String(Base64.encodeBase64(clearText.getBytes())); | |||
} | |||
@Override | |||
String decrypt(String encryptedText) { | |||
return new String(Base64.decodeBase64(encryptedText)); | |||
} |
@@ -42,34 +42,42 @@ public class Directory extends Resource { | |||
this.language = language; | |||
} | |||
@Override | |||
public String getName() { | |||
return getKey(); | |||
} | |||
@Override | |||
public String getLongName() { | |||
return null; | |||
} | |||
@Override | |||
public String getDescription() { | |||
return null; | |||
} | |||
@Override | |||
public Language getLanguage() { | |||
return language; | |||
} | |||
@Override | |||
public String getScope() { | |||
return Scopes.DIRECTORY; | |||
} | |||
@Override | |||
public String getQualifier() { | |||
return Qualifiers.DIRECTORY; | |||
} | |||
@Override | |||
public Resource getParent() { | |||
return null; | |||
} | |||
@Override | |||
public boolean matchFilePattern(String antPattern) { | |||
WildcardPattern matcher = WildcardPattern.create(antPattern, "/"); | |||
return matcher.match(getKey()); |
@@ -96,6 +96,7 @@ public class File extends Resource<Directory> { | |||
* | |||
* @see Resource#getParent() | |||
*/ | |||
@Override | |||
public Directory getParent() { | |||
if (parent == null) { | |||
parent = new Directory(directoryKey); | |||
@@ -118,6 +119,7 @@ public class File extends Resource<Directory> { | |||
* | |||
* @see Resource#matchFilePattern(String) | |||
*/ | |||
@Override | |||
public boolean matchFilePattern(String antPattern) { | |||
WildcardPattern matcher = WildcardPattern.create(antPattern, "/"); | |||
return matcher.match(getKey()); | |||
@@ -146,6 +148,7 @@ public class File extends Resource<Directory> { | |||
* | |||
* @see Resource#getName() | |||
*/ | |||
@Override | |||
public String getName() { | |||
return filename; | |||
} | |||
@@ -155,6 +158,7 @@ public class File extends Resource<Directory> { | |||
* | |||
* @see Resource#getLongName() | |||
*/ | |||
@Override | |||
public String getLongName() { | |||
return getKey(); | |||
} | |||
@@ -164,6 +168,7 @@ public class File extends Resource<Directory> { | |||
* | |||
* @see Resource#getDescription() | |||
*/ | |||
@Override | |||
public String getDescription() { | |||
return null; | |||
} | |||
@@ -173,6 +178,7 @@ public class File extends Resource<Directory> { | |||
* | |||
* @see Resource#getLanguage() | |||
*/ | |||
@Override | |||
public Language getLanguage() { | |||
return language; | |||
} | |||
@@ -187,6 +193,7 @@ public class File extends Resource<Directory> { | |||
/** | |||
* @return SCOPE_ENTITY | |||
*/ | |||
@Override | |||
public final String getScope() { | |||
return SCOPE; | |||
} | |||
@@ -196,6 +203,7 @@ public class File extends Resource<Directory> { | |||
* | |||
* @return QUALIFIER_UNIT_TEST_CLASS | |||
*/ | |||
@Override | |||
public String getQualifier() { | |||
return qualifier; | |||
} |
@@ -105,6 +105,7 @@ public class JavaFile extends Resource<JavaPackage> { | |||
/** | |||
* {@inheritDoc} | |||
*/ | |||
@Override | |||
public JavaPackage getParent() { | |||
if (parent == null) { | |||
parent = new JavaPackage(packageKey); | |||
@@ -116,6 +117,7 @@ public class JavaFile extends Resource<JavaPackage> { | |||
/** | |||
* @return null | |||
*/ | |||
@Override | |||
public String getDescription() { | |||
return null; | |||
} | |||
@@ -123,6 +125,7 @@ public class JavaFile extends Resource<JavaPackage> { | |||
/** | |||
* @return Java | |||
*/ | |||
@Override | |||
public Language getLanguage() { | |||
return Java.INSTANCE; | |||
} | |||
@@ -130,6 +133,7 @@ public class JavaFile extends Resource<JavaPackage> { | |||
/** | |||
* {@inheritDoc} | |||
*/ | |||
@Override | |||
public String getName() { | |||
return filename; | |||
} | |||
@@ -137,6 +141,7 @@ public class JavaFile extends Resource<JavaPackage> { | |||
/** | |||
* {@inheritDoc} | |||
*/ | |||
@Override | |||
public String getLongName() { | |||
return longName; | |||
} | |||
@@ -144,6 +149,7 @@ public class JavaFile extends Resource<JavaPackage> { | |||
/** | |||
* @return SCOPE_ENTITY | |||
*/ | |||
@Override | |||
public String getScope() { | |||
return Scopes.FILE; | |||
} | |||
@@ -151,6 +157,7 @@ public class JavaFile extends Resource<JavaPackage> { | |||
/** | |||
* @return QUALIFIER_UNIT_TEST_CLASS or QUALIFIER_CLASS depending whether it is a unit test class | |||
*/ | |||
@Override | |||
public String getQualifier() { | |||
return unitTest ? Qualifiers.UNIT_TEST_FILE : Qualifiers.CLASS; | |||
} | |||
@@ -165,6 +172,7 @@ public class JavaFile extends Resource<JavaPackage> { | |||
/** | |||
* {@inheritDoc} | |||
*/ | |||
@Override | |||
public boolean matchFilePattern(String antPattern) { | |||
if (unitTest) { | |||
return false; |
@@ -58,6 +58,7 @@ public class JavaPackage extends Resource { | |||
/** | |||
* {@inheritDoc} | |||
*/ | |||
@Override | |||
public boolean matchFilePattern(String antPattern) { | |||
return false; | |||
} | |||
@@ -65,6 +66,7 @@ public class JavaPackage extends Resource { | |||
/** | |||
* {@inheritDoc} | |||
*/ | |||
@Override | |||
public String getDescription() { | |||
return null; | |||
} | |||
@@ -72,6 +74,7 @@ public class JavaPackage extends Resource { | |||
/** | |||
* @return SCOPE_SPACE | |||
*/ | |||
@Override | |||
public String getScope() { | |||
return Scopes.DIRECTORY; | |||
} | |||
@@ -79,6 +82,7 @@ public class JavaPackage extends Resource { | |||
/** | |||
* @return QUALIFIER_PACKAGE | |||
*/ | |||
@Override | |||
public String getQualifier() { | |||
return Qualifiers.PACKAGE; | |||
} | |||
@@ -86,6 +90,7 @@ public class JavaPackage extends Resource { | |||
/** | |||
* {@inheritDoc} | |||
*/ | |||
@Override | |||
public String getName() { | |||
return getKey(); | |||
} | |||
@@ -93,6 +98,7 @@ public class JavaPackage extends Resource { | |||
/** | |||
* {@inheritDoc} | |||
*/ | |||
@Override | |||
public Resource<?> getParent() { | |||
return null; | |||
} | |||
@@ -100,6 +106,7 @@ public class JavaPackage extends Resource { | |||
/** | |||
* {@inheritDoc} | |||
*/ | |||
@Override | |||
public String getLongName() { | |||
return null; | |||
} | |||
@@ -107,6 +114,7 @@ public class JavaPackage extends Resource { | |||
/** | |||
* @return Java | |||
*/ | |||
@Override | |||
public Language getLanguage() { | |||
return Java.INSTANCE; | |||
} |
@@ -154,14 +154,17 @@ public class Project extends Resource { | |||
return packaging; | |||
} | |||
@Override | |||
public String getName() { | |||
return name; | |||
} | |||
@Override | |||
public String getLongName() { | |||
return name; | |||
} | |||
@Override | |||
public String getDescription() { | |||
return description; | |||
} | |||
@@ -243,6 +246,7 @@ public class Project extends Resource { | |||
/** | |||
* @return the project language | |||
*/ | |||
@Override | |||
public Language getLanguage() { | |||
return language; | |||
} | |||
@@ -286,6 +290,7 @@ public class Project extends Resource { | |||
/** | |||
* @return the scope of the current object | |||
*/ | |||
@Override | |||
public String getScope() { | |||
return Scopes.PROJECT; | |||
} | |||
@@ -293,6 +298,7 @@ public class Project extends Resource { | |||
/** | |||
* @return the qualifier of the current object | |||
*/ | |||
@Override | |||
public String getQualifier() { | |||
return isRoot() ? Qualifiers.PROJECT : Qualifiers.MODULE; | |||
} | |||
@@ -302,6 +308,7 @@ public class Project extends Resource { | |||
return false; | |||
} | |||
@Override | |||
public Project getParent() { | |||
return parent; | |||
} |
@@ -129,6 +129,7 @@ public final class DateUtils { | |||
} | |||
private final ThreadLocal<Reference<DateFormat>> cache = new ThreadLocal<Reference<DateFormat>>() { | |||
@Override | |||
public Reference<DateFormat> get() { | |||
Reference<DateFormat> softRef = super.get(); | |||
if (softRef == null || softRef.get() == null) { | |||
@@ -143,10 +144,12 @@ public final class DateUtils { | |||
return (DateFormat) ((Reference) cache.get()).get(); | |||
} | |||
@Override | |||
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) { | |||
return getDateFormat().format(date, toAppendTo, fieldPosition); | |||
} | |||
@Override | |||
public Date parse(String source, ParsePosition pos) { | |||
return getDateFormat().parse(source, pos); | |||
} |
@@ -194,6 +194,7 @@ class ProxyAuthenticator extends Authenticator { | |||
auth = new PasswordAuthentication(user, password == null ? new char[0] : password.toCharArray()); | |||
} | |||
@Override | |||
protected PasswordAuthentication getPasswordAuthentication() { | |||
return auth; | |||
} |
@@ -46,6 +46,7 @@ public class LocalizedMessages extends ResourceBundle { | |||
} | |||
} | |||
@Override | |||
public Locale getLocale() { | |||
return locale; | |||
} |
@@ -111,6 +111,7 @@ public class DateUtilsTest { | |||
final List<Throwable> throwables = Lists.newArrayList(); | |||
final ThreadGroup tg = new ThreadGroup("shouldBeThreadSafe") { | |||
@Override | |||
public void uncaughtException(Thread t, Throwable e) { | |||
throwables.add(e); | |||
super.uncaughtException(t, e); | |||
@@ -123,6 +124,7 @@ public class DateUtilsTest { | |||
for (int i = 0; i < threads.length; ++i) { | |||
threads[i] = new Thread(tg, "JUnit Thread " + i) { | |||
@Override | |||
public void run() { | |||
int i = 0; | |||
try { |
@@ -31,6 +31,7 @@ public class FakeServlet extends GenericServlet { | |||
int count = 0; | |||
@Override | |||
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { | |||
count++; | |||
Properties props = new Properties(); |
@@ -28,6 +28,7 @@ import java.io.IOException; | |||
public class RedirectServlet extends GenericServlet { | |||
@Override | |||
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { | |||
((HttpServletResponse)response).sendRedirect("/"); | |||
} |
@@ -60,18 +60,22 @@ public final class ServerImpl extends Server { | |||
} | |||
} | |||
@Override | |||
public String getPermanentServerId() { | |||
return settings.getString(CoreProperties.PERMANENT_SERVER_ID); | |||
} | |||
@Override | |||
public String getId() { | |||
return id; | |||
} | |||
@Override | |||
public String getVersion() { | |||
return version; | |||
} | |||
@Override | |||
public Date getStartedAt() { | |||
return startedAt; | |||
} | |||
@@ -96,6 +100,7 @@ public final class ServerImpl extends Server { | |||
return StringUtils.defaultIfEmpty(result, ""); | |||
} | |||
@Override | |||
public String getURL() { | |||
return null; | |||
} |
@@ -84,22 +84,27 @@ public class ServerLifecycleNotifierTest { | |||
class FakeServer extends Server { | |||
@Override | |||
public String getId() { | |||
return null; | |||
} | |||
@Override | |||
public String getVersion() { | |||
return null; | |||
} | |||
@Override | |||
public Date getStartedAt() { | |||
return null; | |||
} | |||
@Override | |||
public String getURL() { | |||
return null; | |||
} | |||
@Override | |||
public String getPermanentServerId() { | |||
return null; | |||
} |
@@ -246,6 +246,7 @@ class FakeRepository extends RuleRepository { | |||
super("fake", "java"); | |||
} | |||
@Override | |||
public List<Rule> createRules() { | |||
Rule rule1 = Rule.create("fake", "rule1", "One"); | |||
rule1.setDescription("Description of One"); | |||
@@ -267,6 +268,7 @@ class RuleWithoutNameRepository extends RuleRepository { | |||
super("rule-without-name-repo", "java"); | |||
} | |||
@Override | |||
public List<Rule> createRules() { | |||
// Rules must not have empty name | |||
Rule rule1 = Rule.create("fake", "rule1", null); | |||
@@ -279,6 +281,7 @@ class RuleWithoutDescriptionRepository extends RuleRepository { | |||
super("rule-without-description-repo", "java"); | |||
} | |||
@Override | |||
public List<Rule> createRules() { | |||
// Rules must not have empty description | |||
Rule rule1 = Rule.create("fake", "rule1", "Rule 1"); | |||
@@ -293,6 +296,7 @@ class VolumeRepository extends RuleRepository { | |||
super("volume", "java"); | |||
} | |||
@Override | |||
public List<Rule> createRules() { | |||
List<Rule> rules = new ArrayList<Rule>(); | |||
for (int i = 0; i < SIZE; i++) { |
@@ -33,11 +33,13 @@ import java.util.Set; | |||
public final class JdkUtils extends WSUtils { | |||
@Override | |||
public String format(Date date, String format) { | |||
SimpleDateFormat dateFormat = new SimpleDateFormat(format); | |||
return dateFormat.format(date); | |||
} | |||
@Override | |||
public String encodeUrl(String url) { | |||
try { | |||
return URLEncoder.encode(url, "UTF-8"); |
@@ -69,18 +69,22 @@ public class HttpClient3Connector extends Connector { | |||
} | |||
} | |||
@Override | |||
public String execute(Query<?> query) { | |||
return executeRequest(newGetRequest(query)); | |||
} | |||
@Override | |||
public String execute(CreateQuery<?> query) { | |||
return executeRequest(newPostRequest(query)); | |||
} | |||
@Override | |||
public String execute(UpdateQuery<?> query) { | |||
return executeRequest(newPutRequest(query)); | |||
} | |||
@Override | |||
public String execute(DeleteQuery query) { | |||
return executeRequest(newDeleteRequest(query)); | |||
} |
@@ -70,18 +70,22 @@ public class HttpClient4Connector extends Connector { | |||
this.server = server; | |||
} | |||
@Override | |||
public String execute(Query<?> query) { | |||
return executeRequest(newGetMethod(query)); | |||
} | |||
@Override | |||
public String execute(CreateQuery<?> query) { | |||
return executeRequest(newPostMethod(query)); | |||
} | |||
@Override | |||
public String execute(UpdateQuery<?> query) { | |||
return executeRequest(newPutMethod(query)); | |||
} | |||
@Override | |||
public String execute(DeleteQuery query) { | |||
return executeRequest(newDeleteMethod(query)); | |||
} |
@@ -26,6 +26,7 @@ import org.sonar.wsclient.services.WSUtils; | |||
public class TimeMachineUnmarshaller extends AbstractUnmarshaller<TimeMachine> { | |||
@Override | |||
protected TimeMachine parse(Object json) { | |||
WSUtils utils = WSUtils.getINSTANCE(); | |||
Object cols = utils.getField(json, "cols"); |
@@ -123,10 +123,12 @@ public class SonarTest { | |||
} | |||
static class EmptyQuery extends Query<Metric> { | |||
@Override | |||
public String getUrl() { | |||
return "/api/empty"; | |||
} | |||
@Override | |||
public Class<Metric> getModelClass() { | |||
return Metric.class; | |||
} |