fixed issue with full name constructor invocation
This commit is contained in:
@@ -9,23 +9,28 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
public class NewClassExpression extends Expression {
|
public class NewClassExpression extends Expression {
|
||||||
private final Element myName;
|
private final Element myName;
|
||||||
private final Element myArguments;
|
private final Element myArguments;
|
||||||
|
private Expression myQualifier;
|
||||||
private AnonymousClass myAnonymousClass = null;
|
private AnonymousClass myAnonymousClass = null;
|
||||||
|
|
||||||
public NewClassExpression(Element name, Element arguments) {
|
public NewClassExpression(Element name, Element arguments) {
|
||||||
myName = name;
|
myName = name;
|
||||||
|
myQualifier = EMPTY_EXPRESSION;
|
||||||
myArguments = arguments;
|
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);
|
this(name, arguments);
|
||||||
|
myQualifier = qualifier;
|
||||||
myAnonymousClass = anonymousClass;
|
myAnonymousClass = anonymousClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public String toKotlin() {
|
public String toKotlin() {
|
||||||
|
final String callOperator = myQualifier.isNullable() ? QUESTDOT : DOT;
|
||||||
|
final String qualifier = myQualifier.isEmpty() ? EMPTY : myQualifier.toKotlin() + callOperator;
|
||||||
return myAnonymousClass != null ?
|
return myAnonymousClass != null ?
|
||||||
myName.toKotlin() + "(" + myArguments.toKotlin() + ")" + myAnonymousClass.toKotlin() :
|
qualifier + myName.toKotlin() + "(" + myArguments.toKotlin() + ")" + myAnonymousClass.toKotlin() :
|
||||||
myName.toKotlin() + "(" + myArguments.toKotlin() + ")";
|
qualifier + myName.toKotlin() + "(" + myArguments.toKotlin() + ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -42,7 +42,19 @@ public class ElementVisitor extends JavaElementVisitor {
|
|||||||
@Override
|
@Override
|
||||||
public void visitReferenceElement(PsiJavaCodeReferenceElement reference) {
|
public void visitReferenceElement(PsiJavaCodeReferenceElement reference) {
|
||||||
super.visitReferenceElement(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
|
@Override
|
||||||
|
|||||||
@@ -196,6 +196,7 @@ public class ExpressionVisitor extends StatementVisitor {
|
|||||||
} else { // new Class(): common case
|
} else { // new Class(): common case
|
||||||
final PsiAnonymousClass anonymousClass = expression.getAnonymousClass();
|
final PsiAnonymousClass anonymousClass = expression.getAnonymousClass();
|
||||||
myResult = new NewClassExpression(
|
myResult = new NewClassExpression(
|
||||||
|
expressionToExpression(expression.getQualifier()),
|
||||||
elementToElement(expression.getClassOrAnonymousClassReference()),
|
elementToElement(expression.getClassOrAnonymousClassReference()),
|
||||||
elementToElement(expression.getArgumentList()),
|
elementToElement(expression.getArgumentList()),
|
||||||
anonymousClass != null ? anonymousClassToAnonymousClass(anonymousClass) : null
|
anonymousClass != null ? anonymousClassToAnonymousClass(anonymousClass) : null
|
||||||
@@ -369,4 +370,4 @@ public class ExpressionVisitor extends StatementVisitor {
|
|||||||
getOperatorString(expression.getOperationTokenType())
|
getOperatorString(expression.getOperationTokenType())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -31,13 +31,13 @@ _lastName = lastName
|
|||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
open public fun Build() : Customer? {
|
open public fun Build() : Customer? {
|
||||||
return org.test.customer.Customer(_firstName, _lastName)
|
return Customer(_firstName, _lastName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public open class User() {
|
public open class User() {
|
||||||
class object {
|
class object {
|
||||||
open public fun main() : Unit {
|
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?.getFirstName())
|
||||||
System.out?.println(customer?.getLastName())
|
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 {
|
override public fun run() : Unit {
|
||||||
System.out?.println("Run")
|
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 class User() {
|
||||||
open fun main() : Unit {
|
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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user