added visitors

This commit is contained in:
Pavel Talanov
2011-11-02 15:56:28 +04:00
parent 6a57080c47
commit eca501966a
5 changed files with 93 additions and 194 deletions
+82 -119
View File
@@ -98,28 +98,10 @@
<splitter split-orientation="horizontal" split-proportion="0.4299611">
<split-first>
<leaf>
<file leaf-file-name="DeclarationTranslator.java" pinned="false" current="false" current-in-tab="false">
<file leaf-file-name="DeclarationTranslator.java" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/org/jetbrains/k2js/translate/DeclarationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="26" column="16" selection-start="679" selection-end="679" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="JetVisitor.java" pinned="false" current="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="12" column="54" selection-start="280" selection-end="280" vertical-scroll-proportion="0.35416666">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="JetNamespaceBody.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamespaceBody.java">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="13" selection-start="216" selection-end="216" vertical-scroll-proportion="0.0">
<state line="75" column="30" selection-start="2696" selection-end="2696" vertical-scroll-proportion="1.5930233">
<folding />
</state>
</provider>
@@ -134,10 +116,30 @@
</provider>
</entry>
</file>
<file leaf-file-name="JsToStringGenerationVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/com/google/dart/compiler/backend/js/JsToStringGenerationVisitor.java">
<file leaf-file-name="K2JsVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/org/jetbrains/k2js/translate/K2JsVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="665" column="0" selection-start="17342" selection-end="17342" vertical-scroll-proportion="0.0">
<state line="18" column="52" selection-start="550" selection-end="550" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="JetVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="39" column="35" selection-start="1120" selection-end="1120" vertical-scroll-proportion="-8.692307">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="JetNamespaceBody.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamespaceBody.java">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="13" selection-start="216" selection-end="216" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -192,10 +194,10 @@
</split-first>
<split-second>
<leaf>
<file leaf-file-name="ExpressionTranslator.java" pinned="false" current="false" current-in-tab="false">
<file leaf-file-name="ExpressionTranslator.java" pinned="false" current="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/org/jetbrains/k2js/translate/ExpressionTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="28" column="11" selection-start="865" selection-end="865" vertical-scroll-proportion="0.0">
<state line="29" column="5" selection-start="876" selection-end="876" vertical-scroll-proportion="0.53543305">
<folding />
</state>
</provider>
@@ -204,7 +206,7 @@
<file leaf-file-name="ExpressionVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/org/jetbrains/k2js/translate/ExpressionVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="20" column="46" selection-start="686" selection-end="686" vertical-scroll-proportion="-11.48">
<state line="15" column="57" selection-start="493" selection-end="493" vertical-scroll-proportion="-10.2">
<folding>
<element signature="imports" expanded="true" />
</folding>
@@ -239,19 +241,10 @@
</provider>
</entry>
</file>
<file leaf-file-name="JsNameRef.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/com/google/dart/compiler/backend/js/ast/JsNameRef.java">
<provider selected="true" editor-type-id="text-editor">
<state line="9" column="25" selection-start="362" selection-end="362" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="test.kt" pinned="false" current="true" current-in-tab="true">
<file leaf-file-name="test.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/test_files/test.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="18" column="1" selection-start="271" selection-end="271" vertical-scroll-proportion="0.48188975">
<state line="17" column="42" selection-start="269" selection-end="269" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -301,8 +294,6 @@
<component name="IdeDocumentHistory">
<option name="changedFiles">
<list>
<option value="$PROJECT_DIR$/src/org/jetbrains/k2js/translate/Translator.java" />
<option value="$PROJECT_DIR$/src/org/jetbrains/k2js/translate/GenerationState.java" />
<option value="$PROJECT_DIR$/src/org/jetbrains/k2js/translate/OperationTranslator.java" />
<option value="$PROJECT_DIR$/src/com/google/dart/compiler/backend/js/ast/JsFunction.java" />
<option value="$PROJECT_DIR$/src/org/jetbrains/k2js/translate/AbstractTranslator.java" />
@@ -313,10 +304,12 @@
<option value="$PROJECT_DIR$/src/org/jetbrains/k2js/translate/FunctionTranslator.java" />
<option value="$PROJECT_DIR$/test_files/test.kt" />
<option value="$PROJECT_DIR$/src/org/jetbrains/k2js/K2JSTranslator.java" />
<option value="$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitor.java" />
<option value="$PROJECT_DIR$/src/org/jetbrains/k2js/translate/TranslationContext.java" />
<option value="$PROJECT_DIR$/src/org/jetbrains/k2js/translate/ExpressionTranslator.java" />
<option value="$PROJECT_DIR$/src/org/jetbrains/k2js/translate/K2JsVisitor.java" />
<option value="$PROJECT_DIR$/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" />
<option value="$PROJECT_DIR$/src/org/jetbrains/k2js/translate/DeclarationVisitor.java" />
<option value="$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitor.java" />
</list>
</option>
</component>
@@ -393,38 +386,6 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="test_files" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="test" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
@@ -490,7 +451,7 @@
<property name="options.splitter.main.proportions" value="0.3" />
<property name="recentsLimit" value="5" />
<property name="MemberChooser.sorted" value="false" />
<property name="options.lastSelected" value="fileTemplates" />
<property name="options.lastSelected" value="preferences.pluginManager" />
<property name="project.structure.side.proportion" value="0.2" />
<property name="MemberChooser.copyJavadoc" value="false" />
<property name="GoToClass.toSaveIncludeLibraries" value="false" />
@@ -669,7 +630,7 @@
</component>
<component name="ToolWindowManager">
<frame x="-8" y="-8" width="1936" height="1176" extended-state="6" />
<editor active="false" />
<editor active="true" />
<layout>
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
@@ -683,9 +644,9 @@
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3997862" sideWeight="0.6705998" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.17540108" sideWeight="0.6719057" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.17540108" sideWeight="0.6719057" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.3280943" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.3280943" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="JsTestDriver Server" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
@@ -745,34 +706,6 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/org/jetbrains/k2js/translate/ContextType.java">
<provider selected="true" editor-type-id="text-editor">
<state line="22" column="63" selection-start="800" selection-end="800" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/com/google/dart/compiler/util/AstUtil.java">
<provider selected="true" editor-type-id="text-editor">
<state line="126" column="20" selection-start="4197" selection-end="4197" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/com/google/dart/compiler/backend/js/ast/JsVars.java">
<provider selected="true" editor-type-id="text-editor">
<state line="15" column="13" selection-start="463" selection-end="463" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/com/google/dart/compiler/backend/js/JsSourceGenerationVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="24" column="0" selection-start="837" selection-end="837" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/org/jetbrains/k2js/translate/NamespaceTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="38" column="69" selection-start="1402" selection-end="1402" vertical-scroll-proportion="0.0">
@@ -808,13 +741,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/org/jetbrains/k2js/translate/DeclarationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="26" column="16" selection-start="679" selection-end="679" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/org/jetbrains/k2js/translate/TranslationContext.java">
<provider selected="true" editor-type-id="text-editor">
<state line="6" column="36" selection-start="273" selection-end="274" vertical-scroll-proportion="-0.65384614">
@@ -829,32 +755,69 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/org/jetbrains/k2js/translate/ExpressionTranslator.java">
<entry file="file://$PROJECT_DIR$/test_files/test.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="28" column="11" selection-start="865" selection-end="865" vertical-scroll-proportion="0.0">
<state line="17" column="42" selection-start="269" selection-end="269" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/org/jetbrains/k2js/translate/ExpressionVisitor.java">
<entry file="file://$PROJECT_DIR$/src/org/jetbrains/k2js/translate/K2JsVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="20" column="46" selection-start="686" selection-end="686" vertical-scroll-proportion="-11.48">
<state line="18" column="52" selection-start="550" selection-end="550" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitor.java">
<entry file="file://$PROJECT_DIR$/src/com/google/dart/compiler/backend/js/ast/JsNameRef.java">
<provider selected="true" editor-type-id="text-editor">
<state line="12" column="54" selection-start="280" selection-end="280" vertical-scroll-proportion="0.35416666">
<state line="9" column="25" selection-start="362" selection-end="362" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/test_files/test.kt">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="18" column="1" selection-start="271" selection-end="271" vertical-scroll-proportion="0.48188975">
<state line="39" column="35" selection-start="1120" selection-end="1120" vertical-scroll-proportion="-8.692307">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/com/google/dart/compiler/backend/js/JsToStringGenerationVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="665" column="0" selection-start="17342" selection-end="17342" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/org/jetbrains/k2js/translate/FunctionTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="38" column="15" selection-start="1475" selection-end="1475" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/org/jetbrains/k2js/translate/ExpressionVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="15" column="57" selection-start="493" selection-end="493" vertical-scroll-proportion="-10.2">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/org/jetbrains/k2js/translate/ExpressionTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="29" column="5" selection-start="876" selection-end="876" vertical-scroll-proportion="0.53543305">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/org/jetbrains/k2js/translate/DeclarationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="75" column="30" selection-start="2696" selection-end="2696" vertical-scroll-proportion="1.5930233">
<folding />
</state>
</provider>
+2 -1
View File
@@ -1,5 +1,6 @@
package org.jetbrains.k2js;
import com.google.common.base.Predicates;
import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
@@ -83,7 +84,7 @@ public class K2JSTranslator {
}
BindingContext bindingContext = AnalyzingUtils.getInstance(JavaDefaultImports.JAVA_DEFAULT_IMPORTS)
.analyzeNamespaces(project, namespaces, JetControlFlowDataTraceFactory.EMPTY);
.analyzeNamespaces(project, namespaces, Predicates.<PsiFile>alwaysTrue(), JetControlFlowDataTraceFactory.EMPTY);
ErrorCollector errorCollector = new ErrorCollector(bindingContext);
errorCollector.report();
@@ -16,6 +16,8 @@ import java.util.List;
*/
class ExpressionTranslator extends AbstractTranslator {
final private ExpressionVisitor visitor = new ExpressionVisitor();
public ExpressionTranslator(TranslationContext context) {
super(context);
}
@@ -23,80 +25,7 @@ class ExpressionTranslator extends AbstractTranslator {
@NotNull
public JsNode translate(JetExpression jetExpression) {
assert jetExpression != null;
if (jetExpression instanceof JetConstantExpression) {
return translateConstantExpression((JetConstantExpression) jetExpression);
}
if (jetExpression instanceof JetReturnExpression) {
return translateReturn((JetReturnExpression) jetExpression);
}
if (jetExpression instanceof JetBlockExpression) {
return translateBlock((JetBlockExpression) jetExpression);
}
if (jetExpression instanceof JetBinaryExpression) {
return translateBinaryExpression((JetBinaryExpression)jetExpression);
}
if (jetExpression instanceof JetParenthesizedExpression) {
return translate(((JetParenthesizedExpression)(jetExpression)).getExpression());
}
if (jetExpression instanceof JetProperty) {
DeclarationTranslator declarationTranslator = new DeclarationTranslator(translationContext());
return declarationTranslator.translateProperty((JetProperty)jetExpression);
}
if (jetExpression instanceof JetSimpleNameExpression) {
return translateSimpleNameExpression((JetSimpleNameExpression)jetExpression);
}
throw new RuntimeException("Unexpected expression encountered:" + jetExpression.toString());
}
return jetExpression.accept(visitor, translationContext());
private JsNameRef translateSimpleNameExpression(JetSimpleNameExpression jetSimpleNameExpression) {
String referencedName = jetSimpleNameExpression.getReferencedName();
return new JsNameRef(getJSName(referencedName));
}
@NotNull
private JsExpression translateConstantExpression(JetConstantExpression expression) {
JsExpression result = null;
Object value;
CompileTimeConstant<?> compileTimeValue = bindingContext().get(BindingContext.COMPILE_TIME_VALUE, expression);
assert compileTimeValue != null;
value = compileTimeValue.getValue();
if (value instanceof Integer) {
result = program().getNumberLiteral((Integer) value);
}
assert result != null;
return result;
}
@NotNull
private JsReturn translateReturn(JetReturnExpression jetReturnExpression) {
JsExpression jsExpression = (JsExpression) translate(jetReturnExpression.getReturnedExpression());
JsReturn jsReturnExpression = new JsReturn(jsExpression);
return jsReturnExpression;
}
@NotNull
private JsBlock translateBlock(JetBlockExpression jetBlock) {
List<JetElement> jetElements = jetBlock.getStatements();
JsBlock jsBlock = new JsBlock();
ExpressionTranslator expressionTranslator =
new ExpressionTranslator(translationContext().newBlock(jsBlock));
for (JetElement jetElement : jetElements) {
//TODO hack alert
JetExpression jetExpression = (JetExpression) jetElement;
JsNode jsNode = expressionTranslator.translate(jetExpression);
jsBlock.addStatement(AstUtil.convertToStatement(jsNode));
}
return jsBlock;
}
private JsBinaryOperation translateBinaryExpression(JetBinaryExpression jetBinaryExpression) {
JsExpression left = AstUtil.convertToExpression(translate(jetBinaryExpression.getLeft()));
JsExpression right = AstUtil.convertToExpression(translate(jetBinaryExpression.getRight()));
//TODO cast dangerous?
JetToken jetOperationToken = (JetToken)jetBinaryExpression.getOperationToken();
JsBinaryOperation jsBinaryOperation =
new JsBinaryOperation(OperationTranslator.getBinaryOperator(jetOperationToken), left, right);
return jsBinaryOperation;
}
}
@@ -73,6 +73,12 @@ public class TranslationContext {
return new JsNameRef(name);
}
@NotNull
public JsName getJSName(String jetName) {
//TODO dummy implemetation
return new JsName(program().getScope(), jetName, jetName, jetName);
}
@NotNull
public BindingContext bindingContext() {
return context;