diff --git a/.ci/checker-framework-suppressions/checker-nullness-optional-interning-suppressions.xml b/.ci/checker-framework-suppressions/checker-nullness-optional-interning-suppressions.xml
index e6f7ea9e1b2..c60c764e250 100644
--- a/.ci/checker-framework-suppressions/checker-nullness-optional-interning-suppressions.xml
+++ b/.ci/checker-framework-suppressions/checker-nullness-optional-interning-suppressions.xml
@@ -4520,13 +4520,6 @@
result = latestDefinition == methodDef.getParent().getParent();
-
- src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/NoWhitespaceAfterCheck.java
- introduce.eliminate
- It is bad style to create an Optional just to chain methods to get a value.
- return Optional.ofNullable(referencedMemberDot).orElse(referencedClassDot);
-
-
src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/ParenPadCheck.java
not.interned
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/NoWhitespaceAfterCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/NoWhitespaceAfterCheck.java
index 4ce4716733a..2049871bf5c 100644
--- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/NoWhitespaceAfterCheck.java
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/NoWhitespaceAfterCheck.java
@@ -506,13 +506,12 @@ private static DetailAST getPreviousNodeWithParentOfTypeAst(DetailAST ast, Detai
final DetailAST previousElement;
final DetailAST ident = getIdentLastToken(parent.getParent());
final DetailAST lastTypeNode = getTypeLastNode(ast);
- final boolean isTypeCast = parent.getParent().getType() == TokenTypes.TYPECAST;
// sometimes there are ident-less sentences
// i.e. "(Object[]) null", but in casual case should be
// checked whether ident or lastTypeNode has preceding position
// determining if it is java style or C style
- if (ident == null || isTypeCast || ident.getLineNo() > ast.getLineNo()) {
+ if (ident == null || ident.getLineNo() > ast.getLineNo()) {
previousElement = lastTypeNode;
}
else if (ident.getLineNo() < ast.getLineNo()) {
@@ -544,9 +543,9 @@ else if (ident.getLineNo() < ast.getLineNo()) {
*/
private static DetailAST getIdentLastToken(DetailAST ast) {
final DetailAST result;
- final DetailAST dot = getPrecedingDot(ast);
+ final Optional dot = getPrecedingDot(ast);
// method call case
- if (dot == null || ast.getFirstChild().getType() == TokenTypes.METHOD_CALL) {
+ if (dot.isEmpty() || ast.getFirstChild().getType() == TokenTypes.METHOD_CALL) {
final DetailAST methodCall = ast.findFirstToken(TokenTypes.METHOD_CALL);
if (methodCall == null) {
result = ast.findFirstToken(TokenTypes.IDENT);
@@ -557,7 +556,7 @@ private static DetailAST getIdentLastToken(DetailAST ast) {
}
// qualified name case
else {
- result = dot.getFirstChild().getNextSibling();
+ result = dot.get().getFirstChild().getNextSibling();
}
return result;
}
@@ -569,11 +568,24 @@ private static DetailAST getIdentLastToken(DetailAST ast) {
* @param leftBracket the ast we are checking
* @return dot preceding the left bracket
*/
- private static DetailAST getPrecedingDot(DetailAST leftBracket) {
- final DetailAST referencedClassDot =
- leftBracket.getParent().findFirstToken(TokenTypes.DOT);
+ private static Optional getPrecedingDot(DetailAST leftBracket) {
final DetailAST referencedMemberDot = leftBracket.findFirstToken(TokenTypes.DOT);
- return Optional.ofNullable(referencedMemberDot).orElse(referencedClassDot);
+ final Optional result = Optional.ofNullable(referencedMemberDot);
+ return result.or(() -> getReferencedClassDot(leftBracket));
+ }
+ /**
+ * Gets the dot preceding a class reference.
+ *
+ * @param leftBracket the ast we are checking
+ * @return dot preceding the left bracket
+ */
+ private static Optional getReferencedClassDot(DetailAST leftBracket) {
+ final DetailAST parent = leftBracket.getParent();
+ Optional classDot = Optional.empty();
+ if (parent.getType() != TokenTypes.ASSIGN) {
+ classDot = Optional.ofNullable(parent.findFirstToken(TokenTypes.DOT));
+ }
+ return classDot;
}
}
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/nowhitespaceafter/InputNoWhitespaceAfterTestDefault.java b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/nowhitespaceafter/InputNoWhitespaceAfterTestDefault.java
index 005d752ae99..6917ff92ddb 100644
--- a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/nowhitespaceafter/InputNoWhitespaceAfterTestDefault.java
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/whitespace/nowhitespaceafter/InputNoWhitespaceAfterTestDefault.java
@@ -308,3 +308,30 @@ Object foo() {
int someStuff8
[]; // violation
}
+
+class QualifiedAssignment {
+
+ Object o;
+ static Object o1;
+ static QualifiedAssignment q1;
+ static int idx = 1;
+ static boolean b = true;
+
+ void some() {
+ Object oo = new Object[4];
+ Object[] oo2 = new Object[4];
+ this.o = ((Object[]) oo)[1];
+ this.o = ((java.lang.Object[]) oo)[1];
+ this.o = oo2[1];
+ QualifiedAssignment.o1 = ((Object[]) oo)[1];
+ QualifiedAssignment.o1 = ((java.lang.Object[]) oo)[1];
+ QualifiedAssignment.o1 = oo2[1];
+ QualifiedAssignment qa1 = null;
+ QualifiedAssignment[] qa2 = null;
+ (qa1 = (QualifiedAssignment)qa2[idx]).o1 = (new QualifiedAssignment[idx][idx][idx])[idx];
+ (b ? (new QualifiedAssignment().q1 = new QualifiedAssignment()) :
+ (QualifiedAssignment)(new QualifiedAssignment().q1 = new QualifiedAssignment())).q1 =
+ (new QualifiedAssignment[new QualifiedAssignment().idx = (QualifiedAssignment.idx =
+ QualifiedAssignment.idx)])[QualifiedAssignment.idx];
+ }
+}