mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
[groovy] abstract collection with consumer
This commit is contained in:
+20
-8
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -19,6 +19,7 @@ import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.openapi.util.RecursionManager;
|
||||
import com.intellij.psi.PsiMethod;
|
||||
import com.intellij.util.Consumer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition;
|
||||
@@ -32,13 +33,14 @@ import java.util.List;
|
||||
* @author Max Medvedev
|
||||
*/
|
||||
public abstract class AstTransformContributor {
|
||||
public static final ExtensionPointName<AstTransformContributor> EP_NAME = ExtensionPointName.create("org.intellij.groovy.astTransformContributor");
|
||||
public static final ExtensionPointName<AstTransformContributor> EP_NAME =
|
||||
ExtensionPointName.create("org.intellij.groovy.astTransformContributor");
|
||||
|
||||
public void collectMethods(@NotNull final GrTypeDefinition clazz, Collection<PsiMethod> collector) {
|
||||
public void collectMethods(@NotNull final GrTypeDefinition clazz, Consumer<PsiMethod> collector) {
|
||||
|
||||
}
|
||||
|
||||
public void collectFields(@NotNull final GrTypeDefinition clazz, Collection<GrField> collector) {
|
||||
public void collectFields(@NotNull final GrTypeDefinition clazz, Consumer<GrField> collector) {
|
||||
|
||||
}
|
||||
|
||||
@@ -47,9 +49,14 @@ public abstract class AstTransformContributor {
|
||||
Collection<PsiMethod> result = RecursionManager.doPreventingRecursion(clazz, true, new Computable<Collection<PsiMethod>>() {
|
||||
@Override
|
||||
public Collection<PsiMethod> compute() {
|
||||
Collection<PsiMethod> collector = new ArrayList<PsiMethod>();
|
||||
final Collection<PsiMethod> collector = new ArrayList<PsiMethod>();
|
||||
for (final AstTransformContributor contributor : EP_NAME.getExtensions()) {
|
||||
contributor.collectMethods(clazz, collector);
|
||||
contributor.collectMethods(clazz, new Consumer<PsiMethod>() {
|
||||
@Override
|
||||
public void consume(PsiMethod method) {
|
||||
collector.add(method);
|
||||
}
|
||||
});
|
||||
}
|
||||
return collector;
|
||||
}
|
||||
@@ -62,9 +69,14 @@ public abstract class AstTransformContributor {
|
||||
List<GrField> fields = RecursionManager.doPreventingRecursion(clazz, true, new Computable<List<GrField>>() {
|
||||
@Override
|
||||
public List<GrField> compute() {
|
||||
List<GrField> collector = new ArrayList<GrField>();
|
||||
final List<GrField> collector = new ArrayList<GrField>();
|
||||
for (final AstTransformContributor contributor : EP_NAME.getExtensions()) {
|
||||
contributor.collectFields(clazz, collector);
|
||||
contributor.collectFields(clazz, new Consumer<GrField>() {
|
||||
@Override
|
||||
public void consume(GrField field) {
|
||||
collector.add(field);
|
||||
}
|
||||
});
|
||||
}
|
||||
return collector;
|
||||
}
|
||||
|
||||
+4
-5
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -18,20 +18,19 @@ package org.jetbrains.plugins.groovy.lang.resolve.ast;
|
||||
import com.intellij.psi.PsiMethod;
|
||||
import com.intellij.psi.PsiModifier;
|
||||
import com.intellij.psi.impl.light.LightMethodBuilder;
|
||||
import com.intellij.util.Consumer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* @author Max Medvedev
|
||||
*/
|
||||
public class AutoCloneContributor extends AstTransformContributor {
|
||||
|
||||
@Override
|
||||
public void collectMethods(@NotNull GrTypeDefinition clazz, @NotNull Collection<PsiMethod> collector) {
|
||||
public void collectMethods(@NotNull GrTypeDefinition clazz, @NotNull Consumer<PsiMethod> collector) {
|
||||
if (PsiImplUtil.getAnnotation(clazz, GroovyCommonClassNames.GROOVY_TRANSFORM_AUTO_CLONE) == null) return;
|
||||
|
||||
final LightMethodBuilder clone = new LightMethodBuilder(clazz.getManager(), "clone");
|
||||
@@ -39,6 +38,6 @@ public class AutoCloneContributor extends AstTransformContributor {
|
||||
clone.setContainingClass(clazz);
|
||||
clone.addException(CloneNotSupportedException.class.getName());
|
||||
clone.setOriginInfo("created by @AutoClone");
|
||||
collector.add(clone);
|
||||
collector.consume(clone);
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -17,6 +17,7 @@ package org.jetbrains.plugins.groovy.lang.resolve.ast;
|
||||
|
||||
import com.intellij.psi.PsiMethod;
|
||||
import com.intellij.psi.impl.light.LightMethodBuilder;
|
||||
import com.intellij.util.Consumer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.PsiImplUtil;
|
||||
@@ -25,7 +26,6 @@ import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInput;
|
||||
import java.io.ObjectOutput;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* @author Max Medvedev
|
||||
@@ -33,7 +33,7 @@ import java.util.Collection;
|
||||
public class AutoExternalizeContributor extends AstTransformContributor {
|
||||
|
||||
@Override
|
||||
public void collectMethods(@NotNull GrTypeDefinition clazz, @NotNull Collection<PsiMethod> collector) {
|
||||
public void collectMethods(@NotNull GrTypeDefinition clazz, @NotNull Consumer<PsiMethod> collector) {
|
||||
if (!hasGeneratedImplementations(clazz)) return;
|
||||
|
||||
final LightMethodBuilder write = new LightMethodBuilder(clazz.getManager(), "writeExternal");
|
||||
@@ -41,13 +41,13 @@ public class AutoExternalizeContributor extends AstTransformContributor {
|
||||
write.addParameter("out", ObjectOutput.class.getName());
|
||||
write.addException(IOException.class.getName());
|
||||
write.setOriginInfo("created by @AutoExternalize");
|
||||
collector.add(write);
|
||||
collector.consume(write);
|
||||
|
||||
final LightMethodBuilder read = new LightMethodBuilder(clazz.getManager(), "readExternal");
|
||||
read.setContainingClass(clazz);
|
||||
read.addParameter("oin", ObjectInput.class.getName());
|
||||
read.setOriginInfo("created by @AutoExternalize");
|
||||
collector.add(read);
|
||||
collector.consume(read);
|
||||
}
|
||||
|
||||
private static boolean hasGeneratedImplementations(GrTypeDefinition clazz) {
|
||||
|
||||
+6
-6
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -19,6 +19,7 @@ package org.jetbrains.plugins.groovy.lang.resolve.ast;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PropertyUtil;
|
||||
import com.intellij.util.Consumer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField;
|
||||
@@ -30,7 +31,6 @@ import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
|
||||
import org.jetbrains.plugins.groovy.lang.resolve.CollectClassMembersUtil;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
@@ -41,7 +41,7 @@ import java.util.Set;
|
||||
public class ConstructorAnnotationsProcessor extends AstTransformContributor {
|
||||
|
||||
@Override
|
||||
public void collectMethods(@NotNull GrTypeDefinition typeDefinition, @NotNull Collection<PsiMethod> collector) {
|
||||
public void collectMethods(@NotNull GrTypeDefinition typeDefinition, @NotNull Consumer<PsiMethod> collector) {
|
||||
if (typeDefinition.getName() == null) return;
|
||||
|
||||
PsiModifierList modifierList = typeDefinition.getModifierList();
|
||||
@@ -63,8 +63,8 @@ public class ConstructorAnnotationsProcessor extends AstTransformContributor {
|
||||
final GrLightMethodBuilder fieldsConstructor = generateFieldConstructor(typeDefinition, tupleConstructor, immutable, canonical);
|
||||
final GrLightMethodBuilder mapConstructor = generateMapConstructor(typeDefinition);
|
||||
|
||||
collector.add(fieldsConstructor);
|
||||
collector.add(mapConstructor);
|
||||
collector.consume(fieldsConstructor);
|
||||
collector.consume(mapConstructor);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -154,7 +154,7 @@ public class ConstructorAnnotationsProcessor extends AstTransformContributor {
|
||||
}
|
||||
}
|
||||
|
||||
final Map<String,PsiMethod> properties = PropertyUtil.getAllProperties(true, false, methods);
|
||||
final Map<String, PsiMethod> properties = PropertyUtil.getAllProperties(true, false, methods);
|
||||
for (PsiField field : CollectClassMembersUtil.getFields(psiClass, false)) {
|
||||
final String name = field.getName();
|
||||
if (includeFields ||
|
||||
|
||||
+6
-3
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -26,6 +26,7 @@ import com.intellij.psi.util.MethodSignature;
|
||||
import com.intellij.psi.util.MethodSignatureUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.hash.HashSet;
|
||||
import gnu.trove.THashMap;
|
||||
@@ -50,7 +51,7 @@ import java.util.*;
|
||||
*/
|
||||
public class DelegatedMethodsContributor extends AstTransformContributor {
|
||||
@Override
|
||||
public void collectMethods(@NotNull final GrTypeDefinition clazz, @NotNull Collection<PsiMethod> collector) {
|
||||
public void collectMethods(@NotNull final GrTypeDefinition clazz, @NotNull Consumer<PsiMethod> collector) {
|
||||
Set<PsiClass> processed = new HashSet<PsiClass>();
|
||||
|
||||
if (!checkForDelegate(clazz)) return;
|
||||
@@ -66,7 +67,9 @@ public class DelegatedMethodsContributor extends AstTransformContributor {
|
||||
addMethodChecked(signatures, method, PsiSubstitutor.EMPTY, result);
|
||||
}
|
||||
|
||||
collector.addAll(result);
|
||||
for (PsiMethod method : result) {
|
||||
collector.consume(method);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean checkForDelegate(GrTypeDefinition clazz) {
|
||||
|
||||
+4
-5
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -18,21 +18,20 @@ package org.jetbrains.plugins.groovy.lang.resolve.ast;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.VisibilityUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrLightMethodBuilder;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* @author Maxim.Medvedev
|
||||
*/
|
||||
public class GrInheritConstructorContributor extends AstTransformContributor {
|
||||
|
||||
@Override
|
||||
public void collectMethods(@NotNull GrTypeDefinition psiClass, @NotNull Collection<PsiMethod> collector) {
|
||||
public void collectMethods(@NotNull GrTypeDefinition psiClass, @NotNull Consumer<PsiMethod> collector) {
|
||||
if (psiClass.isAnonymous() || psiClass.isInterface() || psiClass.isEnum()) {
|
||||
return;
|
||||
}
|
||||
@@ -59,7 +58,7 @@ public class GrInheritConstructorContributor extends AstTransformContributor {
|
||||
inheritedConstructor.addParameter(name, type, false);
|
||||
}
|
||||
if (psiClass.findCodeMethodsBySignature(inheritedConstructor, false).length == 0) {
|
||||
collector.add(inheritedConstructor);
|
||||
collector.consume(inheritedConstructor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-5
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -17,6 +17,7 @@ package org.jetbrains.plugins.groovy.lang.resolve.ast;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.intellij.psi.PsiModifier;
|
||||
import com.intellij.util.Consumer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifierList;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.annotation.GrAnnotation;
|
||||
@@ -25,8 +26,6 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefini
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrLightField;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
@@ -39,7 +38,7 @@ public class LoggingContributor extends AstTransformContributor {
|
||||
build();
|
||||
|
||||
@Override
|
||||
public void collectFields(@NotNull GrTypeDefinition psiClass, @NotNull Collection<GrField> collector) {
|
||||
public void collectFields(@NotNull GrTypeDefinition psiClass, @NotNull Consumer<GrField> collector) {
|
||||
GrModifierList modifierList = psiClass.getModifierList();
|
||||
if (modifierList == null) return;
|
||||
|
||||
@@ -52,7 +51,7 @@ public class LoggingContributor extends AstTransformContributor {
|
||||
field.setNavigationElement(annotation);
|
||||
field.getModifierList().setModifiers(PsiModifier.PRIVATE, PsiModifier.FINAL, PsiModifier.STATIC);
|
||||
field.setOriginInfo("created by @" + annotation.getShortName());
|
||||
collector.add(field);
|
||||
collector.consume(field);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user