fixed issue with full name constructor invocation

This commit is contained in:
Sergey Ignatov
2011-11-17 16:06:49 +04:00
parent 62bfb55973
commit c5c3e92b4e
16 changed files with 114 additions and 11 deletions
@@ -9,23 +9,28 @@ import org.jetbrains.annotations.Nullable;
public class NewClassExpression extends Expression {
private final Element myName;
private final Element myArguments;
private Expression myQualifier;
private AnonymousClass myAnonymousClass = null;
public NewClassExpression(Element name, Element arguments) {
myName = name;
myQualifier = EMPTY_EXPRESSION;
myArguments = arguments;
}
public NewClassExpression(Element name, Element arguments, @Nullable AnonymousClass anonymousClass) {
public NewClassExpression(Expression qualifier, Element name, Element arguments, @Nullable AnonymousClass anonymousClass) {
this(name, arguments);
myQualifier = qualifier;
myAnonymousClass = anonymousClass;
}
@NotNull
@Override
public String toKotlin() {
final String callOperator = myQualifier.isNullable() ? QUESTDOT : DOT;
final String qualifier = myQualifier.isEmpty() ? EMPTY : myQualifier.toKotlin() + callOperator;
return myAnonymousClass != null ?
myName.toKotlin() + "(" + myArguments.toKotlin() + ")" + myAnonymousClass.toKotlin() :
myName.toKotlin() + "(" + myArguments.toKotlin() + ")";
qualifier + myName.toKotlin() + "(" + myArguments.toKotlin() + ")" + myAnonymousClass.toKotlin() :
qualifier + myName.toKotlin() + "(" + myArguments.toKotlin() + ")";
}
}
@@ -42,7 +42,19 @@ public class ElementVisitor extends JavaElementVisitor {
@Override
public void visitReferenceElement(PsiJavaCodeReferenceElement reference) {
super.visitReferenceElement(reference);
myResult = new IdentifierImpl(reference.getQualifiedName()); // TODO
if (!reference.isQualified())
myResult = new IdentifierImpl(reference.getReferenceName());
else {
String result = reference.getReferenceName();
PsiElement qualifier = reference.getQualifier();
while (qualifier != null){
final PsiJavaCodeReferenceElement p = (PsiJavaCodeReferenceElement) qualifier;
result = p.getReferenceName() + "." + result; // TODO: maybe need to replace by safe call?
qualifier = p.getQualifier();
}
myResult = new IdentifierImpl(result);
}
}
@Override
@@ -196,6 +196,7 @@ public class ExpressionVisitor extends StatementVisitor {
} else { // new Class(): common case
final PsiAnonymousClass anonymousClass = expression.getAnonymousClass();
myResult = new NewClassExpression(
expressionToExpression(expression.getQualifier()),
elementToElement(expression.getClassOrAnonymousClassReference()),
elementToElement(expression.getArgumentList()),
anonymousClass != null ? anonymousClassToAnonymousClass(anonymousClass) : null
@@ -369,4 +370,4 @@ public class ExpressionVisitor extends StatementVisitor {
getOperatorString(expression.getOperationTokenType())
);
}
}
}
@@ -31,13 +31,13 @@ _lastName = lastName
return this
}
open public fun Build() : Customer? {
return org.test.customer.Customer(_firstName, _lastName)
return Customer(_firstName, _lastName)
}
}
public open class User() {
class object {
open public fun main() : Unit {
var customer : Customer? = org.test.customer.CustomerBuilder().WithFirstName("Homer")?.WithLastName("Simpson")?.Build()
var customer : Customer? = CustomerBuilder().WithFirstName("Homer")?.WithLastName("Simpson")?.Build()
System.out?.println(customer?.getFirstName())
System.out?.println(customer?.getLastName())
}
@@ -1 +0,0 @@
new myApp.Foo();
@@ -1 +0,0 @@
myApp.Foo()
@@ -1,4 +1,4 @@
java.lang.Runnable() {
Runnable() {
override public fun run() : Unit {
System.out?.println("Run")
}
@@ -0,0 +1,9 @@
package test;
import java.util.List;
class User {
void main() {
List list = new java.util.LinkedList();
}
}
@@ -0,0 +1,8 @@
namespace test {
import java.util.List
open class User() {
open fun main() : Unit {
var list : List? = java.util.LinkedList()
}
}
}
@@ -3,7 +3,7 @@ open class Library() {
}
open class User() {
open fun main() : Unit {
var lib : Library? = org.test.Library()
var lib : Library? = Library()
}
}
}
@@ -0,0 +1,11 @@
class OuterClass {
class InnerClass {
}
}
class User {
void main() {
OuterClass outerObject = new OuterClass();
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
}
}
@@ -0,0 +1,10 @@
open class OuterClass() {
open class InnerClass() {
}
}
open class User() {
open fun main() : Unit {
var outerObject : OuterClass? = OuterClass()
var innerObject : InnerClass? = outerObject?.InnerClass()
}
}
@@ -0,0 +1,13 @@
package org.test;
import java.util.List;
import java.util.LinkedList;
class Member {}
class User {
void main() {
List<Member> members = new LinkedList<Member>();
members.add(new Member());
}
}
@@ -0,0 +1,12 @@
namespace org.test {
import java.util.List
import java.util.LinkedList
open class Member() {
}
open class User() {
open fun main() : Unit {
var members : List<Member?>? = LinkedList()
members?.add(Member())
}
}
}
@@ -0,0 +1,11 @@
package demo;
class Foo {
static class Bar {}
}
class User {
void main() {
Foo.Bar boo = new Foo.Bar();
}
}
@@ -0,0 +1,13 @@
namespace demo {
open class Foo() {
class object {
open class Bar() {
}
}
}
open class User() {
open fun main() : Unit {
var boo : Bar? = Foo.Bar()
}
}
}