import java.util.Collection;
import java.util.List;
-@SuppressWarnings("unused")
public interface TransformationContext {
+ @NotNull
+ Project getProject();
+
+ @NotNull
+ PsiManager getManager();
+
+ @NotNull
+ JavaPsiFacade getPsiFacade();
+
@NotNull
GrTypeDefinition getCodeClass();
+ @NotNull
+ PsiClassType getClassType();
+
@NotNull
Collection<PsiMethod> getMethods();
return ContainerUtil.concat(getExtendsTypes(), getImplementsTypes());
}
- @NotNull
- default Project getProject() {
- return getCodeClass().getProject();
- }
-
- @NotNull
- default JavaPsiFacade getPsiFacade() {
- return JavaPsiFacade.getInstance(getProject());
- }
-
- @NotNull
- default PsiManager getManager() {
- return getCodeClass().getManager();
- }
-
@NotNull
default GlobalSearchScope getResolveScope() {
return getCodeClass().getResolveScope();
@Nullable
PsiAnnotation getAnnotation(@NotNull String fqn);
- default boolean hasAnnotation(@NotNull String fqn) {
- return getAnnotation(fqn) != null;
- }
-
default boolean isInheritor(@NotNull String fqn) {
PsiClass baseClass = getPsiFacade().findClass(fqn, getResolveScope());
return baseClass != null && isInheritor(baseClass);
*/
package org.jetbrains.plugins.groovy.transformations;
+import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.impl.light.LightMethodBuilder;
import com.intellij.psi.impl.light.LightPsiClassBuilder;
public class TransformationContextImpl implements TransformationContext {
+ private final @NotNull Project myProject;
+ private final @NotNull PsiManager myPsiManager;
+ private final @NotNull JavaPsiFacade myPsiFacade;
private final @NotNull GrTypeDefinition myCodeClass;
+ private final @NotNull PsiClassType myClassType;
+
private final LinkedList<PsiMethod> myMethods = ContainerUtil.newLinkedList();
private final Collection<GrField> myFields = ContainerUtil.newArrayList();
private final Collection<PsiClass> myInnerClasses = ContainerUtil.newArrayList();
});
public TransformationContextImpl(@NotNull GrTypeDefinition codeClass) {
+ myProject = codeClass.getProject();
+ myPsiManager = codeClass.getManager();
+ myPsiFacade = JavaPsiFacade.getInstance(myProject);
myCodeClass = codeClass;
+ myClassType = getPsiFacade().getElementFactory().createType(getCodeClass());
+
ContainerUtil.addAll(myFields, codeClass.getCodeFields());
ContainerUtil.addAll(myMethods, flatten(map(codeClass.getCodeMethods(), m -> expandReflectedMethods(m))));
ContainerUtil.addAll(myInnerClasses, codeClass.getCodeInnerClasses());
ContainerUtil.addAll(myExtendsTypes, GrClassImplUtil.getReferenceListTypes(codeClass.getExtendsClause()));
}
+ @NotNull
+ @Override
+ public Project getProject() {
+ return myProject;
+ }
+
+ @NotNull
+ @Override
+ public PsiManager getManager() {
+ return myPsiManager;
+ }
+
+ @NotNull
+ @Override
+ public JavaPsiFacade getPsiFacade() {
+ return myPsiFacade;
+ }
+
@Override
@NotNull
public GrTypeDefinition getCodeClass() {
return myCodeClass;
}
+ @NotNull
+ @Override
+ public PsiClassType getClassType() {
+ return myClassType;
+ }
+
@Override
@NotNull
public Collection<GrField> getFields() {