Refactor.

This commit is contained in:
Pavel Talanov
2011-12-08 19:10:21 +04:00
parent cdc205cc07
commit dfe247e8f8
@@ -38,26 +38,15 @@ public final class StandardClasses {
private static void declareJavaArrayList(@NotNull StandardClasses standardClasses) { private static void declareJavaArrayList(@NotNull StandardClasses standardClasses) {
String arrayListFQName = "<java_root>.java.util.ArrayList"; String arrayListFQName = "<java_root>.java.util.ArrayList";
standardClasses.declareStandardTopLevelObject(arrayListFQName, "ArrayList"); standardClasses.declareStandardTopLevelObject(arrayListFQName, "ArrayList");
standardClasses.declareStandardInnerDeclaration(arrayListFQName, "size", "size");
standardClasses.declareStandardInnerDeclaration(arrayListFQName, "<init>", "ArrayList"); standardClasses.declareStandardInnerDeclaration(arrayListFQName, "<init>", "ArrayList");
standardClasses.declareStandardInnerDeclaration(arrayListFQName, "add", "add"); declareMethods(standardClasses, arrayListFQName, "size", "add", "get",
standardClasses.declareStandardInnerDeclaration(arrayListFQName, "get", "get"); "isEmpty", "set", "remove", "addAll");
standardClasses.declareStandardInnerDeclaration(arrayListFQName, "isEmpty", "isEmpty");
standardClasses.declareStandardInnerDeclaration(arrayListFQName, "set", "set");
standardClasses.declareStandardInnerDeclaration(arrayListFQName, "remove", "remove");
standardClasses.declareStandardInnerDeclaration(arrayListFQName, "addAll", "addAll");
} }
//TODO: more generic ways to declare standard classes
private static void bindIterator(@NotNull StandardClasses standardClasses, private static void bindIterator(@NotNull StandardClasses standardClasses,
@NotNull ClassDescriptor iteratorClass) { @NotNull ClassDescriptor iteratorClass) {
standardClasses.declareStandardTopLevelObject(iteratorClass, "ArrayIterator"); standardClasses.declareStandardTopLevelObject(iteratorClass, "ArrayIterator");
FunctionDescriptor nextFunction = declareMethods(standardClasses, getFQName(iteratorClass), "next", "hasNext");
getFunctionByName(iteratorClass.getDefaultType().getMemberScope(), "next");
standardClasses.declareStandardMethodOrProperty(nextFunction, "next");
PropertyDescriptor hasNextProperty =
getPropertyByName(iteratorClass.getDefaultType().getMemberScope(), "hasNext");
standardClasses.declareStandardMethodOrProperty(hasNextProperty, "hasNext");
} }
private static void bindArray(@NotNull StandardClasses standardClasses, private static void bindArray(@NotNull StandardClasses standardClasses,
@@ -68,7 +57,16 @@ public final class StandardClasses {
standardClasses.declareStandardTopLevelObject(nullConstructorFunction, "array"); standardClasses.declareStandardTopLevelObject(nullConstructorFunction, "array");
PropertyDescriptor sizeProperty = PropertyDescriptor sizeProperty =
getPropertyByName(arrayClass.getDefaultType().getMemberScope(), "size"); getPropertyByName(arrayClass.getDefaultType().getMemberScope(), "size");
standardClasses.declareStandardMethodOrProperty(sizeProperty, "size"); standardClasses.declareStandardInnerDeclaration(sizeProperty, "size");
}
private static void declareMethods(@NotNull StandardClasses standardClasses,
@NotNull String classFQName,
@NotNull String... methodNames) {
for (String methodName : methodNames) {
standardClasses.declareStandardInnerDeclaration(classFQName, methodName, methodName);
}
} }
@@ -95,7 +93,7 @@ public final class StandardClasses {
scopeMap.put(fullQualifiedName, new JsScope(kotlinScope, "standard object " + kotlinLibName)); scopeMap.put(fullQualifiedName, new JsScope(kotlinScope, "standard object " + kotlinLibName));
} }
private void declareStandardMethodOrProperty(@NotNull DeclarationDescriptor descriptor, private void declareStandardInnerDeclaration(@NotNull DeclarationDescriptor descriptor,
@NotNull String kotlinLibName) { @NotNull String kotlinLibName) {
String containingFQName = getFQName(getContainingDeclaration(descriptor)); String containingFQName = getFQName(getContainingDeclaration(descriptor));
declareStandardInnerDeclaration(containingFQName, descriptor.getName(), kotlinLibName); declareStandardInnerDeclaration(containingFQName, descriptor.getName(), kotlinLibName);