From d86a1d47261a6f1e660e66109b0f105e0437ebf3 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 10 May 2017 12:26:28 +0200 Subject: [PATCH] UAST visitor visits constructor parameters of Java anonymous class creation expression (IDEA-172643) --- .../expressions/UObjectLiteralExpression.kt | 1 + .../Simple/AnonymousClassWIthParameters.java | 16 +++++++++++++ .../AnonymousClassWIthParameters.log.txt | 23 +++++++++++++++++++ .../AnonymousClassWIthParameters.render.txt | 13 +++++++++++ .../uast/test/java/SimpleJavaRenderLogTest.kt | 2 ++ 5 files changed, 55 insertions(+) create mode 100644 uast/uast-tests/java/Simple/AnonymousClassWIthParameters.java create mode 100644 uast/uast-tests/java/Simple/AnonymousClassWIthParameters.log.txt create mode 100644 uast/uast-tests/java/Simple/AnonymousClassWIthParameters.render.txt diff --git a/uast/uast-common/src/org/jetbrains/uast/expressions/UObjectLiteralExpression.kt b/uast/uast-common/src/org/jetbrains/uast/expressions/UObjectLiteralExpression.kt index 4456f85dbfc3..f00d073aa0d6 100644 --- a/uast/uast-common/src/org/jetbrains/uast/expressions/UObjectLiteralExpression.kt +++ b/uast/uast-common/src/org/jetbrains/uast/expressions/UObjectLiteralExpression.kt @@ -52,6 +52,7 @@ interface UObjectLiteralExpression : UCallExpression { override fun accept(visitor: UastVisitor) { if (visitor.visitObjectLiteralExpression(this)) return annotations.acceptList(visitor) + valueArguments.acceptList(visitor) declaration.accept(visitor) visitor.afterVisitObjectLiteralExpression(this) } diff --git a/uast/uast-tests/java/Simple/AnonymousClassWIthParameters.java b/uast/uast-tests/java/Simple/AnonymousClassWIthParameters.java new file mode 100644 index 000000000000..2980eeb3238c --- /dev/null +++ b/uast/uast-tests/java/Simple/AnonymousClassWIthParameters.java @@ -0,0 +1,16 @@ +public abstract class Foo { + private T name; + + public Foo(T name) { + this.name = name; + } + + public abstract void bar(); + + public static void test() { + new Foo("Name") { + @Override public void bar() { + } + }.bar(); + } +} diff --git a/uast/uast-tests/java/Simple/AnonymousClassWIthParameters.log.txt b/uast/uast-tests/java/Simple/AnonymousClassWIthParameters.log.txt new file mode 100644 index 000000000000..f58031347d06 --- /dev/null +++ b/uast/uast-tests/java/Simple/AnonymousClassWIthParameters.log.txt @@ -0,0 +1,23 @@ +UFile (package = ) + UClass (name = Foo) + UField (name = name) + UMethod (name = Foo) + UParameter (name = name) + UBlockExpression + UBinaryExpression (operator = =) + UQualifiedReferenceExpression + UThisExpression (label = null) + USimpleNameReferenceExpression (identifier = name) + USimpleNameReferenceExpression (identifier = name) + UMethod (name = bar) + UMethod (name = test) + UBlockExpression + UQualifiedReferenceExpression + UObjectLiteralExpression + ULiteralExpression (value = "Name") + UClass (name = null) + UMethod (name = bar) + UAnnotation (fqName = java.lang.Override) + UBlockExpression + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) + UIdentifier (Identifier (bar)) diff --git a/uast/uast-tests/java/Simple/AnonymousClassWIthParameters.render.txt b/uast/uast-tests/java/Simple/AnonymousClassWIthParameters.render.txt new file mode 100644 index 000000000000..e8ac3087067d --- /dev/null +++ b/uast/uast-tests/java/Simple/AnonymousClassWIthParameters.render.txt @@ -0,0 +1,13 @@ +public abstract class Foo { + private var name: T + public fun Foo(name: T) { + this.name = name + } + public abstract fun bar() : void = UastEmptyExpression + public static fun test() : void { + anonymous Foo("Name") { + @Override public void bar() { + } + }.bar() + } +} diff --git a/uast/uast-tests/test/org/jetbrains/uast/test/java/SimpleJavaRenderLogTest.kt b/uast/uast-tests/test/org/jetbrains/uast/test/java/SimpleJavaRenderLogTest.kt index c7c08b98e6dd..88abd395d59a 100644 --- a/uast/uast-tests/test/org/jetbrains/uast/test/java/SimpleJavaRenderLogTest.kt +++ b/uast/uast-tests/test/org/jetbrains/uast/test/java/SimpleJavaRenderLogTest.kt @@ -35,4 +35,6 @@ class SimpleJavaRenderLogTest : AbstractJavaRenderLogTest() { @Test fun testEnumValueMembers() = doTest("Simple/EnumValueMembers.java") @Test fun testQualifiedConstructorCall() = doTest("Simple/QualifiedConstructorCall.java") + + @Test fun testAnonymousClassWithParameters() = doTest("Simple/AnonymousClassWithParameters.java") }