IDEA-123484 abstract modifier for trait methods, some code duplicates removed

This commit is contained in:
Max Medvedev
2014-04-16 17:54:44 +04:00
parent bc38735b1e
commit f13e5bf6e2
6 changed files with 13 additions and 8 deletions
@@ -591,7 +591,7 @@ public class GroovyAnnotator extends GroovyElementVisitor {
public void visitOpenBlock(GrOpenBlock block) {
if (block.getParent() instanceof GrMethod) {
final GrMethod method = (GrMethod)block.getParent();
if (method.hasModifierProperty(ABSTRACT)) {
if (method.hasModifierProperty(ABSTRACT) && !PsiImplUtil.isTrait(method.getContainingClass())) {
final Annotation annotation = myHolder.createErrorAnnotation(block, GroovyBundle.message("abstract.methods.must.not.have.body"));
registerMakeAbstractMethodNotAbstractFix(annotation, method, true);
}
@@ -1750,8 +1750,9 @@ public class GroovyAnnotator extends GroovyElementVisitor {
if (typeDefinition.isAnnotationType()) return;
if (typeDefinition instanceof GrTypeParameter) return;
PsiMethod abstractMethod = ClassUtil.getAnyAbstractMethod(typeDefinition);
if (abstractMethod== null) return;
if (abstractMethod == null) return;
String notImplementedMethodName = abstractMethod.getName();
@@ -28,7 +28,7 @@ import com.intellij.util.Processor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
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.psi.impl.PsiImplUtil;
import org.jetbrains.plugins.groovy.lang.resolve.CollectClassMembersUtil;
/**
@@ -56,7 +56,7 @@ public class GroovyTraitFieldSearcher extends QueryExecutorBase<PsiReference, Re
if (target instanceof GrField && ((GrField)target).hasModifierProperty(PsiModifier.PUBLIC)) {
PsiClass aClass = ((GrField)target).getContainingClass();
if (aClass instanceof GrTypeDefinition && ((GrTypeDefinition)aClass).isTrait()) {
if (PsiImplUtil.isTrait(aClass)) {
String prefix = CollectClassMembersUtil.getTraitFieldPrefix(aClass);
return prefix + ((GrField)target).getName();
@@ -37,6 +37,7 @@ import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.reference.SoftReference;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.groovy.codeInspection.utils.ControlFlowUtils;
@@ -882,7 +883,8 @@ public class PsiImplUtil {
return null;
}
public static boolean isTrait(PsiClass aClass) {
@Contract("null->false")
public static boolean isTrait(@Nullable PsiClass aClass) {
return aClass instanceof GrTypeDefinition && ((GrTypeDefinition)aClass).isTrait();
}
}
@@ -195,9 +195,9 @@ public class GrModifierListImpl extends GrStubElementBase<GrModifierListStub> im
if (owner instanceof GrMethod && owner.getParent() instanceof GrTypeDefinitionBody) {
PsiElement parent = owner.getParent().getParent();
if (parent instanceof GrTypeDefinition && ((GrTypeDefinition)parent).isInterface() && !((GrTypeDefinition)parent).isTrait()) {
if (parent instanceof GrTypeDefinition && ((GrTypeDefinition)parent).isInterface()) {
if (GrModifier.ABSTRACT.equals(modifier)) return true;
if (GrModifier.PUBLIC.equals(modifier)) return true;
if (!((GrTypeDefinition)parent).isTrait() && GrModifier.PUBLIC.equals(modifier)) return true;
}
}
@@ -335,6 +335,7 @@ public abstract class GrMethodBaseImpl extends GrStubElementBase<GrMethodStub> i
@Nullable
public PsiCodeBlock getBody() {
if (PsiImplUtil.isTrait(getContainingClass())) return null;
return PsiImplUtil.getOrCreatePsiCodeBlock(getBlock());
}
@@ -28,6 +28,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifierList;
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.psi.impl.PsiImplUtil;
import java.util.ArrayList;
import java.util.List;
@@ -154,7 +155,7 @@ public class CollectClassMembersUtil {
if (!visitedClasses.add(aClass)) return;
String fieldPrefix = aClass instanceof GrTypeDefinition && ((GrTypeDefinition)aClass).isTrait() ? getTraitFieldPrefix(aClass) : null;
String fieldPrefix = PsiImplUtil.isTrait(aClass) ? getTraitFieldPrefix(aClass) : null;
for (PsiField field : getFields(aClass, includeSynthetic)) {
String originalName = field.getName();