Hello guys,
I found an issue when analyzing open-source project 'spring' (https://github.com/spring-projects/spring-framework). Can you please take a look?
PMD version:
5.5.2
Rule Set:
java-basic
Description:
Error while processing file: spring-framework\spring-web-reactive\src\main\java\org\springframework\web\reactive\function\BodyExtractors.java
net.sourceforge.pmd.lang.java.ast.ParseException: Encountered " "::" ":: "" at line 121, column 52.
Was expecting one of:
")" ...
"," ...
"++" ...
"--" ...
at net.sourceforge.pmd.lang.java.ast.JavaParser.generateParseException(JavaParser.java:10875)
at net.sourceforge.pmd.lang.java.ast.JavaParser.jj_consume_token(JavaParser.java:10759)
at net.sourceforge.pmd.lang.java.ast.JavaParser.Arguments(JavaParser.java:4187)
at net.sourceforge.pmd.lang.java.ast.JavaParser.PrimarySuffix(JavaParser.java:4016)
at net.sourceforge.pmd.lang.java.ast.JavaParser.PrimaryExpression(JavaParser.java:3668)
at net.sourceforge.pmd.lang.java.ast.JavaParser.PostfixExpression(JavaParser.java:3502)
at net.sourceforge.pmd.lang.java.ast.JavaParser.UnaryExpressionNotPlusMinus(JavaParser.java:3464)
at net.sourceforge.pmd.lang.java.ast.JavaParser.UnaryExpression(JavaParser.java:3316)
at net.sourceforge.pmd.lang.java.ast.JavaParser.MultiplicativeExpression(JavaParser.java:3231)
at net.sourceforge.pmd.lang.java.ast.JavaParser.AdditiveExpression(JavaParser.java:3178)
at net.sourceforge.pmd.lang.java.ast.JavaParser.ShiftExpression(JavaParser.java:3123)
at net.sourceforge.pmd.lang.java.ast.JavaParser.RelationalExpression(JavaParser.java:3062)
at net.sourceforge.pmd.lang.java.ast.JavaParser.InstanceOfExpression(JavaParser.java:3026)
at net.sourceforge.pmd.lang.java.ast.JavaParser.EqualityExpression(JavaParser.java:2973)
at net.sourceforge.pmd.lang.java.ast.JavaParser.AndExpression(JavaParser.java:2933)
at net.sourceforge.pmd.lang.java.ast.JavaParser.ExclusiveOrExpression(JavaParser.java:2893)
at net.sourceforge.pmd.lang.java.ast.JavaParser.InclusiveOrExpression(JavaParser.java:2853)
at net.sourceforge.pmd.lang.java.ast.JavaParser.ConditionalAndExpression(JavaParser.java:2813)
at net.sourceforge.pmd.lang.java.ast.JavaParser.ConditionalOrExpression(JavaParser.java:2773)
at net.sourceforge.pmd.lang.java.ast.JavaParser.ConditionalExpression(JavaParser.java:2734)
at net.sourceforge.pmd.lang.java.ast.JavaParser.Expression(JavaParser.java:2593)
at net.sourceforge.pmd.lang.java.ast.JavaParser.ReturnStatement(JavaParser.java:5396)
at net.sourceforge.pmd.lang.java.ast.JavaParser.Statement(JavaParser.java:4488)
at net.sourceforge.pmd.lang.java.ast.JavaParser.BlockStatement(JavaParser.java:4617)
at net.sourceforge.pmd.lang.java.ast.JavaParser.Block(JavaParser.java:4575)
at net.sourceforge.pmd.lang.java.ast.JavaParser.MethodDeclaration(JavaParser.java:1554)
at net.sourceforge.pmd.lang.java.ast.JavaParser.ClassOrInterfaceBodyDeclaration(JavaParser.java:1246)
at net.sourceforge.pmd.lang.java.ast.JavaParser.ClassOrInterfaceBody(JavaParser.java:1162)
at net.sourceforge.pmd.lang.java.ast.JavaParser.ClassOrInterfaceDeclaration(JavaParser.java:586)
at net.sourceforge.pmd.lang.java.ast.JavaParser.TypeDeclaration(JavaParser.java:476)
at net.sourceforge.pmd.lang.java.ast.JavaParser.CompilationUnit(JavaParser.java:222)
at net.sourceforge.pmd.lang.java.AbstractJavaParser.parse(AbstractJavaParser.java:56)
at net.sourceforge.pmd.SourceCodeProcessor.parse(SourceCodeProcessor.java:95)
at net.sourceforge.pmd.SourceCodeProcessor.processSource(SourceCodeProcessor.java:142)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:80)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:47)
at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:79)
at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:25)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Code Sample demonstrating the issue:
private static <T, S extends Publisher<T>> S readWithMessageReaders(
ReactiveHttpInputMessage inputMessage,
BodyExtractor.Context context,
ResolvableType elementType,
Function<HttpMessageReader<T>, S> readerFunction,
Function<Throwable, S> unsupportedError) {
MediaType contentType = contentType(inputMessage);
Supplier<Stream<HttpMessageReader<?>>> messageReaders = context.messageReaders();
return messageReaders.get()
.filter(r -> r.canRead(elementType, contentType))
.findFirst()
.map(BodyExtractors::<T>cast)
.map(readerFunction)
.orElseGet(() -> {
List<MediaType> supportedMediaTypes = messageReaders.get()
.flatMap(reader -> reader.getReadableMediaTypes().stream())
.collect(Collectors.toList());
UnsupportedMediaTypeException error =
new UnsupportedMediaTypeException(contentType, supportedMediaTypes);
return unsupportedError.apply(error);
});
}
also happens for another file (BodyInserters.java):
private static HttpMessageWriter<Resource> resourceHttpMessageWriter(BodyInserter.Context context) {
return context.messageWriters().get()
.filter(messageWriter -> messageWriter.canWrite(RESOURCE_TYPE, null))
.findFirst()
.map(BodyInserters::<Resource>cast)
.orElseThrow(() -> new IllegalStateException(
"Could not find HttpMessageWriter that supports Resources."));
}
and another file (RouterFunctionsTests.java):
@Test
public void toHttpHandler() throws Exception {
HandlerStrategies strategies = mock(HandlerStrategies.class);
when(strategies.messageReaders()).thenReturn(
Stream::<HttpMessageReader<?>>empty);
when(strategies.messageWriters()).thenReturn(
Stream::<HttpMessageWriter<?>>empty);
when(strategies.viewResolvers()).thenReturn(
Stream::<ViewResolver>empty);
ServerRequest request = mock(ServerRequest.class);
ServerResponse response = mock(ServerResponse.class);
when(response.writeTo(any(ServerWebExchange.class), eq(strategies))).thenReturn(Mono.empty());
HandlerFunction<ServerResponse> handlerFunction = mock(HandlerFunction.class);
when(handlerFunction.handle(any(ServerRequest.class))).thenReturn(Mono.just(response));
RouterFunction<ServerResponse> routerFunction = mock(RouterFunction.class);
when(routerFunction.route(any(ServerRequest.class))).thenReturn(Mono.just(handlerFunction));
RequestPredicate requestPredicate = mock(RequestPredicate.class);
when(requestPredicate.test(request)).thenReturn(false);
HttpHandler result = RouterFunctions.toHttpHandler(routerFunction, strategies);
assertNotNull(result);
MockServerHttpRequest httpRequest =
new MockServerHttpRequest(HttpMethod.GET, "http://localhost");
MockServerHttpResponse serverHttpResponse = new MockServerHttpResponse();
result.handle(httpRequest, serverHttpResponse);
}
Running PMD through: [CLI]
java -cp * net.sourceforge.pmd.PMD -d "spring-framework\spring-web-reactive\src\main\java\org\springframewor
k\web\reactive\function" -f text -R java-basic -verbose
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4