mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-123484 abstract modifier for trait methods, some code duplicates removed
This commit is contained in:
@@ -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();
|
||||
|
||||
|
||||
+2
-2
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user