From 28adf89fed62dd252a68aadbad77c0ab907277aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Mon, 20 Apr 2020 11:42:10 +0200 Subject: [PATCH] Move scala parser into ast package --- .../pmd/lang/scala/ScalaLanguageHandler.java | 1 + .../pmd/lang/scala/{ => ast}/ScalaParser.java | 9 +- .../scala/{ => ast}/ScalaTreeBuilder.java | 143 +----------------- 3 files changed, 15 insertions(+), 138 deletions(-) rename pmd-scala/src/main/java/net/sourceforge/pmd/lang/scala/{ => ast}/ScalaParser.java (89%) rename pmd-scala/src/main/java/net/sourceforge/pmd/lang/scala/{ => ast}/ScalaTreeBuilder.java (59%) diff --git a/pmd-scala/src/main/java/net/sourceforge/pmd/lang/scala/ScalaLanguageHandler.java b/pmd-scala/src/main/java/net/sourceforge/pmd/lang/scala/ScalaLanguageHandler.java index 369520b613..f8601c5b73 100644 --- a/pmd-scala/src/main/java/net/sourceforge/pmd/lang/scala/ScalaLanguageHandler.java +++ b/pmd-scala/src/main/java/net/sourceforge/pmd/lang/scala/ScalaLanguageHandler.java @@ -6,6 +6,7 @@ package net.sourceforge.pmd.lang.scala; import net.sourceforge.pmd.lang.AbstractPmdLanguageVersionHandler; import net.sourceforge.pmd.lang.ParserOptions; +import net.sourceforge.pmd.lang.scala.ast.ScalaParser; import scala.meta.Dialect; diff --git a/pmd-scala/src/main/java/net/sourceforge/pmd/lang/scala/ScalaParser.java b/pmd-scala/src/main/java/net/sourceforge/pmd/lang/scala/ast/ScalaParser.java similarity index 89% rename from pmd-scala/src/main/java/net/sourceforge/pmd/lang/scala/ScalaParser.java rename to pmd-scala/src/main/java/net/sourceforge/pmd/lang/scala/ast/ScalaParser.java index 7247ec0e0a..a445838337 100644 --- a/pmd-scala/src/main/java/net/sourceforge/pmd/lang/scala/ScalaParser.java +++ b/pmd-scala/src/main/java/net/sourceforge/pmd/lang/scala/ast/ScalaParser.java @@ -2,7 +2,11 @@ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -package net.sourceforge.pmd.lang.scala; +/* + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.scala.ast; import java.io.IOException; import java.io.Reader; @@ -12,7 +16,6 @@ import org.apache.commons.io.IOUtils; import net.sourceforge.pmd.lang.AbstractParser; import net.sourceforge.pmd.lang.ParserOptions; import net.sourceforge.pmd.lang.ast.ParseException; -import net.sourceforge.pmd.lang.scala.ast.ASTSource; import scala.meta.Dialect; import scala.meta.Source; @@ -24,7 +27,7 @@ import scala.meta.internal.parsers.ScalametaParser; * Scalameta. This parser then wraps all of ScalaMeta's Nodes in Java versions * for compatibility. */ -public class ScalaParser extends AbstractParser { +public final class ScalaParser extends AbstractParser { private final Dialect dialect; /** diff --git a/pmd-scala/src/main/java/net/sourceforge/pmd/lang/scala/ScalaTreeBuilder.java b/pmd-scala/src/main/java/net/sourceforge/pmd/lang/scala/ast/ScalaTreeBuilder.java similarity index 59% rename from pmd-scala/src/main/java/net/sourceforge/pmd/lang/scala/ScalaTreeBuilder.java rename to pmd-scala/src/main/java/net/sourceforge/pmd/lang/scala/ast/ScalaTreeBuilder.java index 1729e7a912..51eaa5fe88 100644 --- a/pmd-scala/src/main/java/net/sourceforge/pmd/lang/scala/ScalaTreeBuilder.java +++ b/pmd-scala/src/main/java/net/sourceforge/pmd/lang/scala/ast/ScalaTreeBuilder.java @@ -2,7 +2,11 @@ * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ -package net.sourceforge.pmd.lang.scala; +/* + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.scala.ast; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; @@ -10,136 +14,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Stack; -import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.lang.ast.Node; -import net.sourceforge.pmd.lang.scala.ast.ASTCase; -import net.sourceforge.pmd.lang.scala.ast.ASTCtorPrimary; -import net.sourceforge.pmd.lang.scala.ast.ASTCtorSecondary; -import net.sourceforge.pmd.lang.scala.ast.ASTDeclDef; -import net.sourceforge.pmd.lang.scala.ast.ASTDeclType; -import net.sourceforge.pmd.lang.scala.ast.ASTDeclVal; -import net.sourceforge.pmd.lang.scala.ast.ASTDeclVar; -import net.sourceforge.pmd.lang.scala.ast.ASTDefnClass; -import net.sourceforge.pmd.lang.scala.ast.ASTDefnDef; -import net.sourceforge.pmd.lang.scala.ast.ASTDefnMacro; -import net.sourceforge.pmd.lang.scala.ast.ASTDefnObject; -import net.sourceforge.pmd.lang.scala.ast.ASTDefnTrait; -import net.sourceforge.pmd.lang.scala.ast.ASTDefnType; -import net.sourceforge.pmd.lang.scala.ast.ASTDefnVal; -import net.sourceforge.pmd.lang.scala.ast.ASTDefnVar; -import net.sourceforge.pmd.lang.scala.ast.ASTEnumeratorGenerator; -import net.sourceforge.pmd.lang.scala.ast.ASTEnumeratorGuard; -import net.sourceforge.pmd.lang.scala.ast.ASTEnumeratorVal; -import net.sourceforge.pmd.lang.scala.ast.ASTImport; -import net.sourceforge.pmd.lang.scala.ast.ASTImporteeName; -import net.sourceforge.pmd.lang.scala.ast.ASTImporteeRename; -import net.sourceforge.pmd.lang.scala.ast.ASTImporteeUnimport; -import net.sourceforge.pmd.lang.scala.ast.ASTImporteeWildcard; -import net.sourceforge.pmd.lang.scala.ast.ASTImporter; -import net.sourceforge.pmd.lang.scala.ast.ASTInit; -import net.sourceforge.pmd.lang.scala.ast.ASTLitBoolean; -import net.sourceforge.pmd.lang.scala.ast.ASTLitByte; -import net.sourceforge.pmd.lang.scala.ast.ASTLitChar; -import net.sourceforge.pmd.lang.scala.ast.ASTLitDouble; -import net.sourceforge.pmd.lang.scala.ast.ASTLitFloat; -import net.sourceforge.pmd.lang.scala.ast.ASTLitInt; -import net.sourceforge.pmd.lang.scala.ast.ASTLitLong; -import net.sourceforge.pmd.lang.scala.ast.ASTLitNull; -import net.sourceforge.pmd.lang.scala.ast.ASTLitShort; -import net.sourceforge.pmd.lang.scala.ast.ASTLitString; -import net.sourceforge.pmd.lang.scala.ast.ASTLitSymbol; -import net.sourceforge.pmd.lang.scala.ast.ASTLitUnit; -import net.sourceforge.pmd.lang.scala.ast.ASTModAbstract; -import net.sourceforge.pmd.lang.scala.ast.ASTModAnnot; -import net.sourceforge.pmd.lang.scala.ast.ASTModCase; -import net.sourceforge.pmd.lang.scala.ast.ASTModContravariant; -import net.sourceforge.pmd.lang.scala.ast.ASTModCovariant; -import net.sourceforge.pmd.lang.scala.ast.ASTModFinal; -import net.sourceforge.pmd.lang.scala.ast.ASTModImplicit; -import net.sourceforge.pmd.lang.scala.ast.ASTModInline; -import net.sourceforge.pmd.lang.scala.ast.ASTModLazy; -import net.sourceforge.pmd.lang.scala.ast.ASTModOverride; -import net.sourceforge.pmd.lang.scala.ast.ASTModPrivate; -import net.sourceforge.pmd.lang.scala.ast.ASTModProtected; -import net.sourceforge.pmd.lang.scala.ast.ASTModSealed; -import net.sourceforge.pmd.lang.scala.ast.ASTModValParam; -import net.sourceforge.pmd.lang.scala.ast.ASTModVarParam; -import net.sourceforge.pmd.lang.scala.ast.ASTNameAnonymous; -import net.sourceforge.pmd.lang.scala.ast.ASTNameIndeterminate; -import net.sourceforge.pmd.lang.scala.ast.ASTPatAlternative; -import net.sourceforge.pmd.lang.scala.ast.ASTPatBind; -import net.sourceforge.pmd.lang.scala.ast.ASTPatExtract; -import net.sourceforge.pmd.lang.scala.ast.ASTPatExtractInfix; -import net.sourceforge.pmd.lang.scala.ast.ASTPatInterpolate; -import net.sourceforge.pmd.lang.scala.ast.ASTPatSeqWildcard; -import net.sourceforge.pmd.lang.scala.ast.ASTPatTuple; -import net.sourceforge.pmd.lang.scala.ast.ASTPatTyped; -import net.sourceforge.pmd.lang.scala.ast.ASTPatVar; -import net.sourceforge.pmd.lang.scala.ast.ASTPatWildcard; -import net.sourceforge.pmd.lang.scala.ast.ASTPatXml; -import net.sourceforge.pmd.lang.scala.ast.ASTPkg; -import net.sourceforge.pmd.lang.scala.ast.ASTPkgObject; -import net.sourceforge.pmd.lang.scala.ast.ASTQuasi; -import net.sourceforge.pmd.lang.scala.ast.ASTSelf; -import net.sourceforge.pmd.lang.scala.ast.ASTSource; -import net.sourceforge.pmd.lang.scala.ast.ASTTemplate; -import net.sourceforge.pmd.lang.scala.ast.ASTTermAnnotate; -import net.sourceforge.pmd.lang.scala.ast.ASTTermApply; -import net.sourceforge.pmd.lang.scala.ast.ASTTermApplyInfix; -import net.sourceforge.pmd.lang.scala.ast.ASTTermApplyType; -import net.sourceforge.pmd.lang.scala.ast.ASTTermApplyUnary; -import net.sourceforge.pmd.lang.scala.ast.ASTTermAscribe; -import net.sourceforge.pmd.lang.scala.ast.ASTTermAssign; -import net.sourceforge.pmd.lang.scala.ast.ASTTermBlock; -import net.sourceforge.pmd.lang.scala.ast.ASTTermDo; -import net.sourceforge.pmd.lang.scala.ast.ASTTermEta; -import net.sourceforge.pmd.lang.scala.ast.ASTTermFor; -import net.sourceforge.pmd.lang.scala.ast.ASTTermForYield; -import net.sourceforge.pmd.lang.scala.ast.ASTTermFunction; -import net.sourceforge.pmd.lang.scala.ast.ASTTermIf; -import net.sourceforge.pmd.lang.scala.ast.ASTTermInterpolate; -import net.sourceforge.pmd.lang.scala.ast.ASTTermMatch; -import net.sourceforge.pmd.lang.scala.ast.ASTTermName; -import net.sourceforge.pmd.lang.scala.ast.ASTTermNew; -import net.sourceforge.pmd.lang.scala.ast.ASTTermNewAnonymous; -import net.sourceforge.pmd.lang.scala.ast.ASTTermParam; -import net.sourceforge.pmd.lang.scala.ast.ASTTermPartialFunction; -import net.sourceforge.pmd.lang.scala.ast.ASTTermPlaceholder; -import net.sourceforge.pmd.lang.scala.ast.ASTTermRepeated; -import net.sourceforge.pmd.lang.scala.ast.ASTTermReturn; -import net.sourceforge.pmd.lang.scala.ast.ASTTermSelect; -import net.sourceforge.pmd.lang.scala.ast.ASTTermSuper; -import net.sourceforge.pmd.lang.scala.ast.ASTTermThis; -import net.sourceforge.pmd.lang.scala.ast.ASTTermThrow; -import net.sourceforge.pmd.lang.scala.ast.ASTTermTry; -import net.sourceforge.pmd.lang.scala.ast.ASTTermTryWithHandler; -import net.sourceforge.pmd.lang.scala.ast.ASTTermTuple; -import net.sourceforge.pmd.lang.scala.ast.ASTTermWhile; -import net.sourceforge.pmd.lang.scala.ast.ASTTermXml; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeAnd; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeAnnotate; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeApply; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeApplyInfix; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeBounds; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeByName; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeExistential; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeFunction; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeImplicitFunction; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeLambda; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeMethod; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeName; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeOr; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeParam; -import net.sourceforge.pmd.lang.scala.ast.ASTTypePlaceholder; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeProject; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeRefine; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeRepeated; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeSelect; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeSingleton; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeTuple; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeVar; -import net.sourceforge.pmd.lang.scala.ast.ASTTypeWith; -import net.sourceforge.pmd.lang.scala.ast.ScalaNode; import scala.meta.Case; import scala.meta.Ctor; @@ -167,7 +42,6 @@ import scala.meta.Type; * Translates Scala's AST to a PMD-compatible AST. * */ -@InternalApi class ScalaTreeBuilder { private static final Map, Constructor>> NODE_TYPE_TO_NODE_ADAPTER_TYPE = new HashMap<>(); @@ -303,12 +177,12 @@ class ScalaTreeBuilder { } // The nodes having children built. - private Stack nodes = new Stack<>(); + private final Stack nodes = new Stack<>(); private static void register(Class nodeType, Class> nodeAdapterType) { try { - NODE_TYPE_TO_NODE_ADAPTER_TYPE.put(nodeType, nodeAdapterType.getConstructor(nodeType)); + NODE_TYPE_TO_NODE_ADAPTER_TYPE.put(nodeType, nodeAdapterType.getDeclaredConstructor(nodeType)); } catch (SecurityException | NoSuchMethodException e) { throw new RuntimeException(e); } @@ -327,8 +201,7 @@ class ScalaTreeBuilder { // translation between Scala Traits and Java Classes for (Class treeClass : NODE_TYPE_TO_NODE_ADAPTER_TYPE.keySet()) { if (treeClass.isInstance(node)) { - constructor = (Constructor>) NODE_TYPE_TO_NODE_ADAPTER_TYPE - .get(treeClass); + constructor = (Constructor>) NODE_TYPE_TO_NODE_ADAPTER_TYPE.get(treeClass); } }