Fix new java nodes

This commit is contained in:
Clément Fournier
2020-03-02 20:13:56 +01:00
parent bfc704fa05
commit c8c8a04dda
11 changed files with 44 additions and 48 deletions

View File

@ -876,7 +876,6 @@ void RecordDeclaration(int modifiers):
{ {
Token t; Token t;
jjtThis.setModifiers(modifiers); jjtThis.setModifiers(modifiers);
checkForRecordType();
} }
{ {
t = <IDENTIFIER> { t = <IDENTIFIER> {
@ -884,7 +883,7 @@ void RecordDeclaration(int modifiers):
throw new ParseException("ERROR: expecting record"); throw new ParseException("ERROR: expecting record");
} }
} }
t=<IDENTIFIER> {checkForBadTypeIdentifierUsage(t.image); jjtThis.setImage(t.image);} t=<IDENTIFIER> {jjtThis.setImage(t.image);}
[ TypeParameters() ] [ TypeParameters() ]
RecordComponentList() RecordComponentList()
[ ImplementsList() ] [ ImplementsList() ]
@ -1286,7 +1285,7 @@ void EqualityExpression() #EqualityExpression(>1):
void InstanceOfExpression() #InstanceOfExpression(>1): void InstanceOfExpression() #InstanceOfExpression(>1):
{} {}
{ {
RelationalExpression() [ LOOKAHEAD(2) "instanceof" Type() [ {checkforBadInstanceOfPattern();} VariableDeclaratorId() #TypeTestPattern(2) ] ] RelationalExpression() [ LOOKAHEAD(2) "instanceof" Type() [ VariableDeclaratorId() #TypeTestPattern(2) ] ]
} }
void RelationalExpression() #RelationalExpression(>1): void RelationalExpression() #RelationalExpression(>1):

View File

@ -25,12 +25,13 @@ public final class ASTRecordBody extends AbstractJavaNode {
super(id); super(id);
} }
ASTRecordBody(JavaParser p, int id) {
super(p, id);
}
@Override @Override
public Object jjtAccept(JavaParserVisitor visitor, Object data) { public Object jjtAccept(JavaParserVisitor visitor, Object data) {
return visitor.visit(this, data); return visitor.visit(this, data);
} }
@Override
public <T> void jjtAccept(SideEffectingVisitor<T> visitor, T data) {
visitor.visit(this, data);
}
} }

View File

@ -27,15 +27,16 @@ public final class ASTRecordComponent extends AbstractJavaNode {
super(id); super(id);
} }
ASTRecordComponent(JavaParser p, int id) {
super(p, id);
}
@Override @Override
public Object jjtAccept(JavaParserVisitor visitor, Object data) { public Object jjtAccept(JavaParserVisitor visitor, Object data) {
return visitor.visit(this, data); return visitor.visit(this, data);
} }
@Override
public <T> void jjtAccept(SideEffectingVisitor<T> visitor, T data) {
visitor.visit(this, data);
}
public boolean isVarargs() { public boolean isVarargs() {
return varargs; return varargs;
} }

View File

@ -22,12 +22,13 @@ public final class ASTRecordComponentList extends AbstractJavaNode {
super(id); super(id);
} }
ASTRecordComponentList(JavaParser p, int id) {
super(p, id);
}
@Override @Override
public Object jjtAccept(JavaParserVisitor visitor, Object data) { public Object jjtAccept(JavaParserVisitor visitor, Object data) {
return visitor.visit(this, data); return visitor.visit(this, data);
} }
@Override
public <T> void jjtAccept(SideEffectingVisitor<T> visitor, T data) {
visitor.visit(this, data);
}
} }

View File

@ -12,8 +12,8 @@ import net.sourceforge.pmd.annotation.Experimental;
* *
* <pre class="grammar"> * <pre class="grammar">
* *
* RecordConstructorDeclaration ::= ({@linkplain ASTTypeAnnotation TypeAnnotation})* * RecordConstructorDeclaration ::= ({@linkplain ASTAnnotation TypeAnnotation})*
* {@linkplain ASTModifiers Modifiers} * {@linkplain ASTModifierList Modifiers}
* {@linkplain ASTTypeParameters TypeParameters}? * {@linkplain ASTTypeParameters TypeParameters}?
* &lt;IDENTIFIER&gt; * &lt;IDENTIFIER&gt;
* ( "throws" {@linkplain ASTNameList NameList} )? * ( "throws" {@linkplain ASTNameList NameList} )?
@ -28,15 +28,16 @@ public final class ASTRecordConstructorDeclaration extends AbstractJavaAccessNod
super(id); super(id);
} }
ASTRecordConstructorDeclaration(JavaParser p, int id) {
super(p, id);
}
@Override @Override
public Object jjtAccept(JavaParserVisitor visitor, Object data) { public Object jjtAccept(JavaParserVisitor visitor, Object data) {
return visitor.visit(this, data); return visitor.visit(this, data);
} }
@Override
public <T> void jjtAccept(SideEffectingVisitor<T> visitor, T data) {
visitor.visit(this, data);
}
@Override @Override
public ASTRecordConstructorDeclaration getDeclarationNode() { public ASTRecordConstructorDeclaration getDeclarationNode() {
return this; return this;

View File

@ -33,15 +33,16 @@ public final class ASTRecordDeclaration extends AbstractAnyTypeDeclaration {
super(id); super(id);
} }
ASTRecordDeclaration(JavaParser p, int id) {
super(p, id);
}
@Override @Override
public Object jjtAccept(JavaParserVisitor visitor, Object data) { public Object jjtAccept(JavaParserVisitor visitor, Object data) {
return visitor.visit(this, data); return visitor.visit(this, data);
} }
@Override
public <T> void jjtAccept(SideEffectingVisitor<T> visitor, T data) {
visitor.visit(this, data);
}
@Override @Override
public TypeKind getTypeKind() { public TypeKind getTypeKind() {
return TypeKind.RECORD; return TypeKind.RECORD;

View File

@ -24,16 +24,16 @@ public final class ASTTypeTestPattern extends AbstractJavaNode implements ASTPat
super(id); super(id);
} }
ASTTypeTestPattern(JavaParser p, int id) {
super(p, id);
}
@Override @Override
public Object jjtAccept(JavaParserVisitor visitor, Object data) { public Object jjtAccept(JavaParserVisitor visitor, Object data) {
return visitor.visit(this, data); return visitor.visit(this, data);
} }
@Override
public <T> void jjtAccept(SideEffectingVisitor<T> visitor, T data) {
visitor.visit(this, data);
}
/** /**
* Gets the type against which the expression is tested. * Gets the type against which the expression is tested.

View File

@ -55,7 +55,7 @@ import net.sourceforge.pmd.lang.java.ast.SideEffectingVisitorAdapter;
*/ */
public class LanguageLevelChecker<T> { public class LanguageLevelChecker<T> {
private static final Pattern SPACE_ESCAPE_PATTERN = Pattern.compile("(?!\\\\)\\\\s"); private static final Pattern SPACE_ESCAPE_PATTERN = Pattern.compile("(?<!\\\\)\\\\s");
private final int jdkVersion; private final int jdkVersion;
private final boolean preview; private final boolean preview;
@ -121,8 +121,7 @@ public class LanguageLevelChecker<T> {
/** \s */ /** \s */
SPACE_STRING_ESCAPES(14, 14, false), SPACE_STRING_ESCAPES(14, 14, false),
RECORD_DECLARATIONS(14, 14, false), RECORD_DECLARATIONS(14, 14, false),
TYPE_TEST_PATTERNS_IN_INSTANCEOF(14, 14, false), TYPE_TEST_PATTERNS_IN_INSTANCEOF(14, 14, false);
;
private final int minPreviewVersion; private final int minPreviewVersion;
@ -148,7 +147,7 @@ public class LanguageLevelChecker<T> {
String message = StringUtils.capitalize(displayNameLower(name())); String message = StringUtils.capitalize(displayNameLower(name()));
if (canBePreview) { if (canBePreview) {
message += " is a only a preview feature on JDK " + jdk; message += " is a preview feature of JDK " + jdk;
} else if (wasStandardized) { } else if (wasStandardized) {
message = message + " was only standardized in Java " + (maxPreviewVersion + 1); message = message + " was only standardized in Java " + (maxPreviewVersion + 1);
} else if (minPreviewVersion == maxPreviewVersion) { } else if (minPreviewVersion == maxPreviewVersion) {
@ -166,8 +165,7 @@ public class LanguageLevelChecker<T> {
ENUM_AS_AN_IDENTIFIER(5, "enum"), ENUM_AS_AN_IDENTIFIER(5, "enum"),
UNDERSCORE_AS_AN_IDENTIFIER(9, "_"), UNDERSCORE_AS_AN_IDENTIFIER(9, "_"),
VAR_AS_A_TYPE_NAME(10, "var"), VAR_AS_A_TYPE_NAME(10, "var"),
RECORD_AS_A_TYPE_NAME(14, "record") // TODO RECORD_AS_A_TYPE_NAME(14, "record");
;
private final int maxJdkVersion; private final int maxJdkVersion;
private final String reserved; private final String reserved;
@ -280,7 +278,7 @@ public class LanguageLevelChecker<T> {
@Override @Override
public void visit(ASTYieldStatement node, T data) { public void visit(ASTYieldStatement node, T data) {
check(node, PreviewFeature.RECORD_DECLARATIONS, data); check(node, PreviewFeature.YIELD_STATEMENTS, data);
visitChildren(node, data); visitChildren(node, data);
} }

View File

@ -292,11 +292,4 @@ public class UselessOverridingMethodRule extends AbstractJavaRule {
|| elevatingIntoDifferentPackage; || elevatingIntoDifferentPackage;
} }
/**
* @deprecated this method will be removed. Just use {@link Node#findChildrenOfType(Class)} directly.
*/
@Deprecated
public <T> List<T> findFirstDegreeChaildrenOfType(Node n, Class<T> targetType) {
return n.findChildrenOfType(targetType);
}
} }

View File

@ -1,5 +1,6 @@
package net.sourceforge.pmd.lang.java.ast package net.sourceforge.pmd.lang.java.ast
import io.kotlintest.matchers.string.shouldContain
import net.sourceforge.pmd.lang.ast.test.shouldBe import net.sourceforge.pmd.lang.ast.test.shouldBe
import net.sourceforge.pmd.lang.java.ast.JavaVersion.J14__PREVIEW import net.sourceforge.pmd.lang.java.ast.JavaVersion.J14__PREVIEW
import java.io.IOException import java.io.IOException
@ -8,8 +9,10 @@ class ASTPatternTest : ParserTestSpec({
parserTest("Test patterns only available on JDK 14 (preview)", javaVersions = !J14__PREVIEW) { parserTest("Test patterns only available on JDK 14 (preview)", javaVersions = !J14__PREVIEW) {
expectParseException("Cannot use type test patterns in instanceof when running in JDK other than 14-preview") { inContext(ExpressionParsingCtx) {
parseAstExpression("obj instanceof Class c") "obj instanceof Class c" should throwParseException {
it.message.shouldContain("Type test patterns in instanceof is a preview feature of JDK 14, you should select your language version accordingly")
}
} }
} }

View File

@ -8,9 +8,7 @@ import io.kotlintest.matchers.string.shouldContain
import io.kotlintest.shouldThrow import io.kotlintest.shouldThrow
import net.sourceforge.pmd.lang.ast.Node import net.sourceforge.pmd.lang.ast.Node
import net.sourceforge.pmd.lang.ast.ParseException import net.sourceforge.pmd.lang.ast.ParseException
import net.sourceforge.pmd.lang.ast.test.Assertions import net.sourceforge.pmd.lang.ast.test.*
import net.sourceforge.pmd.lang.ast.test.NodeSpec
import net.sourceforge.pmd.lang.ast.test.matchNode
import net.sourceforge.pmd.lang.ast.test.shouldMatchNode import net.sourceforge.pmd.lang.ast.test.shouldMatchNode
import net.sourceforge.pmd.lang.java.JavaParsingHelper import net.sourceforge.pmd.lang.java.JavaParsingHelper
import java.beans.PropertyDescriptor import java.beans.PropertyDescriptor