From 60edf1a6c1fcee2d6b6219f95a11831fc6732923 Mon Sep 17 00:00:00 2001 From: Pavel Talanov Date: Mon, 30 Jan 2012 16:13:41 +0400 Subject: [PATCH] refactoring declaration visitor --- .idea/workspace.xml | 256 +++++++++--------- .../translate/context/StandardClasses.java | 2 +- ...r.java => AbstractDeclarationVisitor.java} | 79 ++++-- .../declaration/DeclarationFacade.java | 4 +- .../declaration/JsAnnotationsUtils.java | 12 + .../declaration/KotlinDeclarationVisitor.java | 44 +++ .../declaration/NativeDeclarationVisitor.java | 102 +++++++ 7 files changed, 345 insertions(+), 154 deletions(-) rename translator/src/org/jetbrains/k2js/translate/context/declaration/{DeclarationVisitor.java => AbstractDeclarationVisitor.java} (74%) create mode 100644 translator/src/org/jetbrains/k2js/translate/context/declaration/JsAnnotationsUtils.java create mode 100644 translator/src/org/jetbrains/k2js/translate/context/declaration/KotlinDeclarationVisitor.java create mode 100644 translator/src/org/jetbrains/k2js/translate/context/declaration/NativeDeclarationVisitor.java diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 09e29f49917..8625a031ae1 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -13,15 +13,13 @@ - - - - + + + + - - - - + + @@ -121,42 +119,44 @@ - + - - - - - - - - - - + - + - - + + - + + + + + + + + + + + + - - + + - + @@ -165,25 +165,27 @@ - + - - + + - - + + + + - - + + - + @@ -200,19 +202,19 @@ - - + + - + - - + + - + @@ -276,19 +278,19 @@ - + - + - + - + @@ -337,22 +339,22 @@ @@ -1188,8 +1190,8 @@ - - + + @@ -1236,7 +1238,7 @@ @@ -1283,55 +1285,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1353,15 +1306,6 @@ - - - - - - - - - @@ -1369,15 +1313,6 @@ - - - - - - - - - @@ -1385,20 +1320,91 @@ - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java b/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java index e6a77550517..1e27949f65d 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java +++ b/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java @@ -97,7 +97,7 @@ public final class StandardClasses { declareJetObjects(standardClasses); declareJavaUtilObjects(standardClasses); declareTopLevelFunctions(standardClasses); - declareJQuery(standardClasses); + // declareJQuery(standardClasses); return standardClasses; } diff --git a/translator/src/org/jetbrains/k2js/translate/context/declaration/DeclarationVisitor.java b/translator/src/org/jetbrains/k2js/translate/context/declaration/AbstractDeclarationVisitor.java similarity index 74% rename from translator/src/org/jetbrains/k2js/translate/context/declaration/DeclarationVisitor.java rename to translator/src/org/jetbrains/k2js/translate/context/declaration/AbstractDeclarationVisitor.java index 901b5b48680..7730ef3ab91 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/declaration/DeclarationVisitor.java +++ b/translator/src/org/jetbrains/k2js/translate/context/declaration/AbstractDeclarationVisitor.java @@ -15,57 +15,76 @@ import static org.jetbrains.k2js.translate.utils.DescriptorUtils.getOwnDeclarati /** * @author Pavel Talanov */ -public final class DeclarationVisitor extends DeclarationDescriptorVisitor { +public abstract class AbstractDeclarationVisitor extends DeclarationDescriptorVisitor { @NotNull private final Declarations declarations; - private final boolean shouldObfuscate; - /*package*/ DeclarationVisitor(@NotNull Declarations declarations, boolean obfuscateNames) { + /*package*/ AbstractDeclarationVisitor(@NotNull Declarations declarations) { this.declarations = declarations; - this.shouldObfuscate = obfuscateNames; } + abstract protected NamingScope doDeclareScope(@NotNull DeclarationDescriptor descriptor, + @NotNull DeclarationContext context, + @NotNull String recommendedName); + @NotNull - private DeclarationContext declareClass(@NotNull ClassDescriptor descriptor, - @NotNull DeclarationContext context) { - NamingScope classScope = declareScope(descriptor, context, "class " + descriptor.getName()); - JsName className = declareName(descriptor, context); - return context.innerDeclaration(classScope, className); - } + abstract protected JsName doDeclareName(@NotNull DeclarationDescriptor descriptor, + @NotNull DeclarationContext context, + @NotNull String recommendedName); - private NamingScope declareScope(@NotNull DeclarationDescriptor descriptor, @NotNull DeclarationContext context, - @NotNull String scopeName) { - NamingScope innerScope = context.getScope().innerScope(scopeName); - declarations.putScope(descriptor, innerScope); - return innerScope; - } + abstract protected boolean accept(@NotNull DeclarationDescriptor descriptor); @NotNull - private JsName declareName(@NotNull DeclarationDescriptor descriptor, @NotNull DeclarationContext context, - @NotNull String name) { - JsName jsName = context.getScope().declareVariable(descriptor, name, shouldObfuscate); - jsName.setObfuscatable(false); - declarations.putName(descriptor, jsName); - declarations.putQualifier(descriptor, context.getQualifier()); - return jsName; + protected Declarations declarations() { + return declarations; } - @NotNull + @Nullable private JsName declareName(@NotNull DeclarationDescriptor descriptor, @NotNull DeclarationContext context) { return declareName(descriptor, context, descriptor.getName()); } + @Nullable + private JsName declareName(@NotNull DeclarationDescriptor descriptor, + @NotNull DeclarationContext context, + @NotNull String name) { + if (!accept(descriptor)) { + return null; + } + return doDeclareName(descriptor, context, name); + } + + @Nullable + private NamingScope declareScope(@NotNull DeclarationDescriptor descriptor, + @NotNull DeclarationContext context, + @NotNull String name) { + if (!accept(descriptor)) { + return null; + } + return doDeclareScope(descriptor, context, name); + } @Override public Void visitClassDescriptor(@NotNull ClassDescriptor descriptor, @NotNull DeclarationContext context) { + if (!accept(descriptor)) { + return null; + } DeclarationContext classContext = declareClass(descriptor, context); declareClassConstructor(descriptor, context); declareClassMembers(descriptor, classContext); return null; } + @NotNull + private DeclarationContext declareClass(@NotNull ClassDescriptor descriptor, + @NotNull DeclarationContext context) { + NamingScope classScope = doDeclareScope(descriptor, context, "class " + descriptor.getName()); + JsName className = doDeclareName(descriptor, context, descriptor.getName()); + return context.innerDeclaration(classScope, className); + } + private void declareClassMembers(@NotNull ClassDescriptor descriptor, @NotNull DeclarationContext context) { for (DeclarationDescriptor memberDescriptor : getOwnDeclarations(descriptor)) { memberDescriptor.accept(this, context); @@ -81,6 +100,9 @@ public final class DeclarationVisitor extends DeclarationDescriptorVisitor