adding annotations checks
This commit is contained in:
Generated
+28
-24
@@ -13,13 +13,9 @@
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="f02ef53d-47a4-4f5e-a1aa-3df68aae9b20" name="Default" comment="">
|
||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/AbstractDeclarationVisitor.java" />
|
||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/JsAnnotationsUtils.java" />
|
||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/NativeDeclarationVisitor.java" />
|
||||
<change type="MOVED" beforePath="C:\Dev\Projects\jet-contrib\k2js\translator\src\org\jetbrains\k2js\translate\context\declaration\DeclarationVisitor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/KotlinDeclarationVisitor.java" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/DeclarationFacade.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/DeclarationFacade.java" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/JsAnnotationsUtils.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/JsAnnotationsUtils.java" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/NativeDeclarationVisitor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/NativeDeclarationVisitor.java" />
|
||||
</list>
|
||||
<ignored path="k2js.iws" />
|
||||
<ignored path=".idea/workspace.xml" />
|
||||
@@ -147,8 +143,10 @@
|
||||
<file leaf-file-name="KotlinDeclarationVisitor.java" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/KotlinDeclarationVisitor.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="48" column="20" selection-start="1909" selection-end="1909" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
<state line="41" column="20" selection-start="1640" selection-end="1640" vertical-scroll-proportion="0.0">
|
||||
<folding>
|
||||
<element signature="imports" expanded="false" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
@@ -156,8 +154,10 @@
|
||||
<file leaf-file-name="JsAnnotationsUtils.java" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/JsAnnotationsUtils.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="9" column="0" selection-start="170" selection-end="170" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
<state line="26" column="66" selection-start="957" selection-end="957" vertical-scroll-proportion="0.0">
|
||||
<folding>
|
||||
<element signature="imports" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
@@ -174,7 +174,7 @@
|
||||
<file leaf-file-name="NativeDeclarationVisitor.java" pinned="false" current="true" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/NativeDeclarationVisitor.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="27" column="28" selection-start="1170" selection-end="1170" vertical-scroll-proportion="0.8110687">
|
||||
<state line="40" column="73" selection-start="1825" selection-end="1825" vertical-scroll-proportion="0.5458015">
|
||||
<folding>
|
||||
<element signature="imports" expanded="true" />
|
||||
</folding>
|
||||
@@ -214,7 +214,7 @@
|
||||
<file leaf-file-name="StandardClasses.java" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="99" column="8" selection-start="3147" selection-end="3147" vertical-scroll-proportion="0.0">
|
||||
<state line="99" column="10" selection-start="3149" selection-end="3149" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
@@ -352,8 +352,8 @@
|
||||
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java" />
|
||||
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/DeclarationVisitor.java" />
|
||||
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/AbstractDeclarationVisitor.java" />
|
||||
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/JsAnnotationsUtils.java" />
|
||||
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/KotlinDeclarationVisitor.java" />
|
||||
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/JsAnnotationsUtils.java" />
|
||||
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/NativeDeclarationVisitor.java" />
|
||||
</list>
|
||||
</option>
|
||||
@@ -1191,7 +1191,7 @@
|
||||
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32977018" sideWeight="0.6570605" order="4" 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="true" weight="0.22928914" sideWeight="0.55043226" order="0" side_tool="false" content_ui="combo" />
|
||||
<window_info id="Run" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.44956774" sideWeight="0.8530198" order="2" 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.44956774" sideWeight="0.8530198" order="2" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="CodeWindow" 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="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.0908605" sideWeight="0.7146974" order="2" side_tool="false" content_ui="combo" />
|
||||
<window_info id="ResolveWindow" 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" />
|
||||
@@ -1238,7 +1238,7 @@
|
||||
<option name="CREATE_PATCH_EXPAND_DETAILS_DEFAULT" value="true" />
|
||||
<option name="SHOW_FILE_HISTORY_DETAILS" value="true" />
|
||||
<option name="FORCE_NON_EMPTY_COMMENT" value="false" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="implementing new declaration logic" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="refactoring declaration visitor" />
|
||||
<option name="MAKE_NEW_CHANGELIST_ACTIVE" value="true" />
|
||||
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="true" />
|
||||
<option name="CHECK_FILES_UP_TO_DATE_BEFORE_COMMIT" value="false" />
|
||||
@@ -1251,7 +1251,6 @@
|
||||
<option name="UPDATE_GROUP_BY_CHANGELIST" value="false" />
|
||||
<option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
|
||||
<option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
|
||||
<MESSAGE value="migrated according to the last when changes" />
|
||||
<MESSAGE value="Very big code migration started. Still in progress. Tests fail." />
|
||||
<MESSAGE value="fix most of the tests" />
|
||||
<MESSAGE value="refactor access translator logic" />
|
||||
@@ -1276,6 +1275,7 @@
|
||||
<MESSAGE value="migrated to new code" />
|
||||
<MESSAGE value="migrating code" />
|
||||
<MESSAGE value="implementing new declaration logic" />
|
||||
<MESSAGE value="refactoring declaration visitor" />
|
||||
</component>
|
||||
<component name="XDebuggerManager">
|
||||
<breakpoint-manager />
|
||||
@@ -1329,7 +1329,7 @@
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="99" column="8" selection-start="3147" selection-end="3147" vertical-scroll-proportion="0.0">
|
||||
<state line="99" column="10" selection-start="3149" selection-end="3149" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
@@ -1382,23 +1382,27 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/JsAnnotationsUtils.java">
|
||||
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/KotlinDeclarationVisitor.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="9" column="0" selection-start="170" selection-end="170" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
<state line="41" column="20" selection-start="1640" selection-end="1640" vertical-scroll-proportion="0.0">
|
||||
<folding>
|
||||
<element signature="imports" expanded="false" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/KotlinDeclarationVisitor.java">
|
||||
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/JsAnnotationsUtils.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="48" column="20" selection-start="1909" selection-end="1909" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
<state line="26" column="66" selection-start="957" selection-end="957" vertical-scroll-proportion="0.0">
|
||||
<folding>
|
||||
<element signature="imports" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/NativeDeclarationVisitor.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="27" column="28" selection-start="1170" selection-end="1170" vertical-scroll-proportion="0.8110687">
|
||||
<state line="40" column="73" selection-start="1825" selection-end="1825" vertical-scroll-proportion="0.5458015">
|
||||
<folding>
|
||||
<element signature="imports" expanded="true" />
|
||||
</folding>
|
||||
|
||||
+69
@@ -1,5 +1,13 @@
|
||||
package org.jetbrains.k2js.translate.context.declaration;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
|
||||
/**
|
||||
* @author Pavel Talanov
|
||||
*/
|
||||
@@ -8,5 +16,66 @@ public final class JsAnnotationsUtils {
|
||||
private JsAnnotationsUtils() {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String getNativeName(@NotNull FunctionDescriptor descriptor) {
|
||||
if (hasNativeFunctionAnnotation(descriptor)) {
|
||||
return getNativeFunctionName(descriptor);
|
||||
}
|
||||
if (declaredInNativeClass(descriptor)) {
|
||||
return descriptor.getName();
|
||||
}
|
||||
throw new AssertionError("Use isNativeFunction to check");
|
||||
}
|
||||
|
||||
public static boolean isNativeFunction(@NotNull FunctionDescriptor functionDescriptor) {
|
||||
return hasNativeFunctionAnnotation(functionDescriptor) || declaredInNativeClass(functionDescriptor);
|
||||
}
|
||||
|
||||
public static boolean isNativeClass(@NotNull ClassDescriptor classDescriptor) {
|
||||
return hasNativeClassAnnotation(classDescriptor);
|
||||
}
|
||||
|
||||
private static boolean declaredInNativeClass(@NotNull DeclarationDescriptor descriptor) {
|
||||
DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration();
|
||||
if (!(containingDeclaration instanceof ClassDescriptor)) return false;
|
||||
return hasNativeClassAnnotation((ClassDescriptor) containingDeclaration);
|
||||
}
|
||||
|
||||
private static boolean hasNativeFunctionAnnotation(@NotNull FunctionDescriptor annotationDescriptor) {
|
||||
return (getAnnotationByName(annotationDescriptor, "js.annotations.JavascriptNativeFunction") != null);
|
||||
}
|
||||
|
||||
private static boolean hasNativeClassAnnotation(@NotNull ClassDescriptor descriptor) {
|
||||
return (getAnnotationByName(descriptor, "JavascriptNativeClass") != null);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static String getNativeFunctionName(@NotNull DeclarationDescriptor declarationDescriptor) {
|
||||
AnnotationDescriptor annotationDescriptor =
|
||||
getAnnotationByName(declarationDescriptor, "js.annotations.JavascriptNativeFunction");
|
||||
assert annotationDescriptor != null;
|
||||
Object value = annotationDescriptor.getValueArguments().iterator().next().getValue();
|
||||
assert value instanceof String : "Native function annotation should have one String parameter";
|
||||
return (String) value;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static AnnotationDescriptor getAnnotationByName(@NotNull DeclarationDescriptor descriptor,
|
||||
@NotNull String FQName) {
|
||||
for (AnnotationDescriptor annotationDescriptor : descriptor.getAnnotations()) {
|
||||
String annotationClassFQName = getAnnotationClassFQName(annotationDescriptor);
|
||||
if (annotationClassFQName.equals(FQName)) {
|
||||
return annotationDescriptor;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static String getAnnotationClassFQName(@NotNull AnnotationDescriptor annotationDescriptor) {
|
||||
DeclarationDescriptor annotationDeclaration =
|
||||
annotationDescriptor.getType().getConstructor().getDeclarationDescriptor();
|
||||
assert annotationDeclaration != null : "Annotation supposed to have a declaration";
|
||||
return DescriptorUtils.getFQName(annotationDeclaration);
|
||||
}
|
||||
}
|
||||
|
||||
+10
-55
@@ -2,12 +2,10 @@ package org.jetbrains.k2js.translate.context.declaration;
|
||||
|
||||
import com.google.dart.compiler.backend.js.ast.JsName;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.k2js.translate.context.NamingScope;
|
||||
|
||||
/**
|
||||
@@ -32,11 +30,7 @@ public final class NativeDeclarationVisitor extends AbstractDeclarationVisitor {
|
||||
@Override
|
||||
protected JsName doDeclareName(@NotNull DeclarationDescriptor descriptor, @NotNull DeclarationContext context,
|
||||
@NotNull String recommendedName) {
|
||||
if (!(descriptor instanceof FunctionDescriptor)) {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
String nativeName = getNativeName((FunctionDescriptor) descriptor);
|
||||
assert nativeName != null;
|
||||
String nativeName = JsAnnotationsUtils.getNativeName((FunctionDescriptor) descriptor);
|
||||
JsName jsName = context.getScope().
|
||||
declareVariable(descriptor, nativeName, false);
|
||||
jsName.setObfuscatable(false);
|
||||
@@ -47,56 +41,17 @@ public final class NativeDeclarationVisitor extends AbstractDeclarationVisitor {
|
||||
|
||||
@Override
|
||||
protected boolean accept(@NotNull DeclarationDescriptor descriptor) {
|
||||
return false; //To change body of implemented methods use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private String getNativeName(@NotNull FunctionDescriptor descriptor) {
|
||||
if (isJavascriptNativeFunction(descriptor)) {
|
||||
return getNativeFunctionName(descriptor);
|
||||
if (descriptor instanceof NamespaceDescriptor) {
|
||||
return true;
|
||||
}
|
||||
if (isJavascriptNativeClass(descriptor.getContainingDeclaration())) {
|
||||
return descriptor.getName();
|
||||
if (descriptor instanceof FunctionDescriptor) {
|
||||
return JsAnnotationsUtils.isNativeFunction((FunctionDescriptor) descriptor);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean isJavascriptNativeFunction(@NotNull DeclarationDescriptor annotationDescriptor) {
|
||||
return (getAnnotationByName(annotationDescriptor, "js.annotations.JavascriptNativeFunction") != null);
|
||||
}
|
||||
|
||||
private boolean isJavascriptNativeClass(@NotNull DeclarationDescriptor descriptor) {
|
||||
assert descriptor instanceof ClassDescriptor;
|
||||
return (getAnnotationByName(descriptor, "JavascriptNativeClass") != null);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private String getNativeFunctionName(@NotNull DeclarationDescriptor declarationDescriptor) {
|
||||
AnnotationDescriptor annotationDescriptor =
|
||||
getAnnotationByName(declarationDescriptor, "js.annotations.JavascriptNativeFunction");
|
||||
assert annotationDescriptor != null;
|
||||
Object value = annotationDescriptor.getValueArguments().iterator().next().getValue();
|
||||
assert value instanceof String : "Native function annotation should have one String parameter";
|
||||
return (String) value;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private AnnotationDescriptor getAnnotationByName(@NotNull DeclarationDescriptor descriptor,
|
||||
@NotNull String FQName) {
|
||||
for (AnnotationDescriptor annotationDescriptor : descriptor.getAnnotations()) {
|
||||
String annotationClassFQName = getAnnotationClassFQName(annotationDescriptor);
|
||||
if (annotationClassFQName.equals(FQName)) {
|
||||
return annotationDescriptor;
|
||||
}
|
||||
if (descriptor instanceof ClassDescriptor) {
|
||||
return JsAnnotationsUtils.isNativeClass((ClassDescriptor) descriptor);
|
||||
}
|
||||
return null;
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private String getAnnotationClassFQName(@NotNull AnnotationDescriptor annotationDescriptor) {
|
||||
DeclarationDescriptor annotationDeclaration =
|
||||
annotationDescriptor.getType().getConstructor().getDeclarationDescriptor();
|
||||
assert annotationDeclaration != null : "Annotation supposed to have a declaration";
|
||||
return DescriptorUtils.getFQName(annotationDeclaration);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user