mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[groovy] delegate @Bindable support methods documentation to methods of PropertyChangeSupport
This commit is contained in:
+10
-1
@@ -19,11 +19,13 @@ import com.intellij.codeInsight.AnnotationUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.light.LightMethodBuilder;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.groovy.GroovyLanguage;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition;
|
||||
import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil;
|
||||
import org.jetbrains.plugins.groovy.transformations.AstTransformationSupport;
|
||||
import org.jetbrains.plugins.groovy.transformations.TransformationContext;
|
||||
|
||||
@@ -33,6 +35,7 @@ public class BindableTransformContributor implements AstTransformationSupport {
|
||||
|
||||
private static final String BINDABLE_FQN = "groovy.beans.Bindable";
|
||||
private static final String PCL_FQN = "java.beans.PropertyChangeListener";
|
||||
private static final String PCS_FQN = "java.beans.PropertyChangeSupport";
|
||||
public static final String ORIGIN_INFO = "via @Bindable";
|
||||
|
||||
private static boolean isApplicable(@NotNull GrTypeDefinition clazz) {
|
||||
@@ -56,7 +59,8 @@ public class BindableTransformContributor implements AstTransformationSupport {
|
||||
final PsiManager manager = clazz.getManager();
|
||||
final GlobalSearchScope scope = clazz.getResolveScope();
|
||||
|
||||
final PsiType pclType = JavaPsiFacade.getInstance(clazz.getProject()).getElementFactory().createTypeByFQClassName(PCL_FQN, scope);
|
||||
final JavaPsiFacade facade = JavaPsiFacade.getInstance(clazz.getProject());
|
||||
final PsiType pclType = facade.getElementFactory().createTypeByFQClassName(PCL_FQN, scope);
|
||||
final PsiArrayType pclArrayType = new PsiArrayType(pclType);
|
||||
final PsiType stringType = PsiType.getJavaLangString(manager, scope);
|
||||
final PsiType objectType = PsiType.getJavaLangObject(manager, scope);
|
||||
@@ -108,9 +112,14 @@ public class BindableTransformContributor implements AstTransformationSupport {
|
||||
.addParameter("name", stringType)
|
||||
);
|
||||
|
||||
PsiClass docDelegate = facade.findClass(PCS_FQN, context.getCodeClass().getResolveScope());
|
||||
|
||||
for (LightMethodBuilder method : methods) {
|
||||
method.addModifier(PsiModifier.PUBLIC);
|
||||
method.setOriginInfo(ORIGIN_INFO);
|
||||
if (docDelegate == null) continue;
|
||||
PsiMethod[] originalMethods = docDelegate.findMethodsBySignature(method, false);
|
||||
method.putUserData(ResolveUtil.DOCUMENTATION_DELEGATE, ArrayUtil.getFirstElement(originalMethods));
|
||||
}
|
||||
|
||||
context.addMethods(methods);
|
||||
|
||||
+9
-1
@@ -16,12 +16,15 @@
|
||||
package org.jetbrains.plugins.groovy
|
||||
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.projectRoots.JavaSdk
|
||||
import com.intellij.openapi.projectRoots.Sdk
|
||||
import com.intellij.openapi.roots.ContentEntry
|
||||
import com.intellij.openapi.roots.ModifiableRootModel
|
||||
import com.intellij.openapi.roots.OrderRootType
|
||||
import com.intellij.openapi.roots.libraries.Library
|
||||
import com.intellij.openapi.vfs.JarFileSystem
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.testFramework.IdeaTestUtil
|
||||
import com.intellij.testFramework.fixtures.DefaultLightProjectDescriptor
|
||||
import org.jetbrains.annotations.NotNull
|
||||
|
||||
@@ -36,7 +39,12 @@ class GroovyLightProjectDescriptor extends DefaultLightProjectDescriptor {
|
||||
public static final GroovyLightProjectDescriptor GROOVY_2_2 = new GroovyLightProjectDescriptor(mockGroovy2_2LibraryName)
|
||||
public static final GroovyLightProjectDescriptor GROOVY_2_3 = new GroovyLightProjectDescriptor(mockGroovy2_3LibraryName)
|
||||
public static final GroovyLightProjectDescriptor GROOVY_LATEST = new GroovyLightProjectDescriptor(bundledGroovyJar as String)
|
||||
|
||||
public static final GroovyLightProjectDescriptor GROOVY_LATEST_REAL_JDK = new GroovyLightProjectDescriptor(bundledGroovyJar as String) {
|
||||
@Override
|
||||
Sdk getSdk() {
|
||||
return JavaSdk.getInstance().createJdk("TEST_JDK", IdeaTestUtil.requireRealJdkHome(), false)
|
||||
}
|
||||
}
|
||||
private final String myLibPath
|
||||
|
||||
protected GroovyLightProjectDescriptor(String libPath) {
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package org.jetbrains.plugins.groovy
|
||||
|
||||
import com.intellij.testFramework.EdtTestUtil
|
||||
import com.intellij.testFramework.LightProjectDescriptor
|
||||
import groovy.transform.CompileStatic
|
||||
import org.junit.rules.TestRule
|
||||
import org.junit.runner.Description
|
||||
@@ -26,6 +27,7 @@ class SetupRule implements TestRule {
|
||||
|
||||
final LightGroovyTestCase testCase = new LightGroovyTestCase() {
|
||||
String basePath = ""
|
||||
LightProjectDescriptor projectDescriptor = GroovyLightProjectDescriptor.GROOVY_LATEST_REAL_JDK
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
@@ -25,6 +25,7 @@ import groovy.transform.CompileStatic
|
||||
import org.jetbrains.plugins.groovy.SetupRule
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyFile
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrCall
|
||||
import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil
|
||||
import org.jetbrains.plugins.groovy.lang.resolve.ast.bindable.BindableTransformContributor
|
||||
import org.junit.Before
|
||||
import org.junit.Rule
|
||||
@@ -86,6 +87,7 @@ class GrBindableSupportTest {
|
||||
assert method
|
||||
assert method.containingClass == clazz
|
||||
assert method.originInfo == BindableTransformContributor.ORIGIN_INFO
|
||||
assert method.getUserData(ResolveUtil.DOCUMENTATION_DELEGATE)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user