diff --git a/aop-common/src/main/java/com/intellij/aop/JavaArgNamesManipulator.java b/aop-common/src/main/java/com/intellij/aop/JavaArgNamesManipulator.java index 317e64b2..3667f045 100644 --- a/aop-common/src/main/java/com/intellij/aop/JavaArgNamesManipulator.java +++ b/aop-common/src/main/java/com/intellij/aop/JavaArgNamesManipulator.java @@ -10,11 +10,10 @@ import com.intellij.jam.JamStringAttributeElement; import com.intellij.java.language.psi.PsiAnnotationMemberValue; import com.intellij.java.language.psi.PsiParameter; +import consulo.annotation.access.RequiredReadAction; import consulo.language.psi.PsiElement; import consulo.language.psi.PsiReference; import consulo.language.util.IncorrectOperationException; -import org.jetbrains.annotations.NonNls; - import jakarta.annotation.Nonnull; import jakarta.annotation.Nullable; @@ -30,39 +29,44 @@ public JavaArgNamesManipulator(@Nonnull PointcutContainer advice) { } @Nullable + @Override public String getArgNames() { return myContainer.getArgNames().getStringValue(); } @Nonnull + @Override + @RequiredReadAction public PsiElement getArgNamesProblemElement() { PsiAnnotationMemberValue value = myContainer.getArgNames().getPsiElement(); return value == null ? getCommonProblemElement() : value; } @Nonnull + @Override + @RequiredReadAction public PsiElement getCommonProblemElement() { return myContainer.getAnnotation().getNameReferenceElement(); } @Override public PsiParameter getReturningParameter() { - return myContainer instanceof AopAfterReturningAdviceImpl ? ((AopAfterReturningAdviceImpl)myContainer).getReturning().getValue() : null; - + return myContainer instanceof AopAfterReturningAdviceImpl afterReturningAdvice ? afterReturningAdvice.getReturning().getValue() : null; } @Override public PsiParameter getThrowingParameter() { - return myContainer instanceof AopAfterThrowingAdviceImpl ? ((AopAfterThrowingAdviceImpl)myContainer).getThrowing().getValue() : null; + return myContainer instanceof AopAfterThrowingAdviceImpl afterThrowingAdvice ? afterThrowingAdvice.getThrowing().getValue() : null; } @Nonnull - @NonNls + @Override public String getArgNamesAttributeName() { return AopConstants.ARG_NAMES_PARAM; } @Nullable + @Override public PsiReference getReturningReference() { if (!(myContainer instanceof AopAfterReturningAdviceImpl)) return null; @@ -72,19 +76,21 @@ public PsiReference getReturningReference() { } @Nullable + @Override public PsiReference getThrowingReference() { if (!(myContainer instanceof AopAfterThrowingAdviceImpl)) return null; JamStringAttributeElement throwing = ((AopAfterThrowingAdviceImpl)myContainer).getThrowing(); PsiReference[] references = throwing.getConverter().createReferences(throwing); return references.length == 0 ? null : references[0]; - } + @Override public AopAdviceType getAdviceType() { - return myContainer instanceof AopAdvice ? ((AopAdvice)myContainer).getAdviceType() : null; + return myContainer instanceof AopAdvice advice ? advice.getAdviceType() : null; } + @Override public void setArgNames(@Nullable String argNames) throws IncorrectOperationException { myContainer.getArgNames().setStringValue(argNames); diff --git a/aop-common/src/main/java/com/intellij/aop/LocalAopModel.java b/aop-common/src/main/java/com/intellij/aop/LocalAopModel.java index e921669a..30e05a82 100644 --- a/aop-common/src/main/java/com/intellij/aop/LocalAopModel.java +++ b/aop-common/src/main/java/com/intellij/aop/LocalAopModel.java @@ -7,23 +7,24 @@ import com.intellij.aop.jam.AopModuleService; import com.intellij.java.language.psi.PsiMethod; import com.intellij.java.language.psi.PsiParameter; +import consulo.annotation.access.RequiredReadAction; import consulo.application.util.NotNullLazyValue; import consulo.language.psi.PsiElement; -import consulo.language.util.ModuleUtilCore; import consulo.util.collection.ContainerUtil; import consulo.util.collection.SmartList; -import org.jetbrains.annotations.NonNls; - import jakarta.annotation.Nonnull; import jakarta.annotation.Nullable; + import java.util.List; /** * @author peter */ public class LocalAopModel implements AopModel { - private final NotNullLazyValue myDelegate = new NotNullLazyValue() { + private final NotNullLazyValue myDelegate = new NotNullLazyValue<>() { @Nonnull + @Override + @RequiredReadAction protected AopModel compute() { return getAopModel(); } @@ -31,8 +32,9 @@ protected AopModel compute() { private final AopAdvisedElementsSearcher myAdvisedElementsSearcher; + @RequiredReadAction private AopModel getAopModel() { - return AopModuleService.getAopModel(myHost != null ? ModuleUtilCore.findModuleForPsiElement(myHost) : null); + return AopModuleService.getAopModel(myHost != null ? myHost.getModule() : null); } private final PsiMethod myMethod; @@ -52,16 +54,18 @@ protected PsiElement getHost() { return myHost; } + @Override public List getAspects() { return myDelegate.getValue().getAspects(); } + @Override public List getPointcuts() { return myDelegate.getValue().getPointcuts(); } public List getIntroductions() { - consulo.util.collection.SmartList introductions = new SmartList(); + List introductions = new SmartList<>(); for (AopAspect aspect : getAspects()) { introductions.addAll(aspect.getIntroductions()); } @@ -74,7 +78,7 @@ public PsiMethod getPointcutMethod() { } @Nonnull - public List resolveParameters(@Nonnull @NonNls String name) { + public List resolveParameters(@Nonnull String name) { return ContainerUtil.createMaybeSingletonList(findParameter(name, getPointcutMethod())); } diff --git a/aop-common/src/main/java/com/intellij/aop/psi/GenericPattern.java b/aop-common/src/main/java/com/intellij/aop/psi/GenericPattern.java index 30e2dfc5..1a1a316a 100644 --- a/aop-common/src/main/java/com/intellij/aop/psi/GenericPattern.java +++ b/aop-common/src/main/java/com/intellij/aop/psi/GenericPattern.java @@ -28,6 +28,7 @@ public AopPsiTypePattern[] getParameters() { return myParameters; } + @Override public boolean accepts(@Nonnull PsiType type) { return accepts(type, false); } @@ -55,6 +56,7 @@ private boolean accepts(@Nonnull PsiType type, boolean allowWildcardAssignabilit } @Nonnull + @Override public PointcutMatchDegree canBeAssignableFrom(@Nonnull PsiType type) { if (accepts(type, true)) return PointcutMatchDegree.TRUE; boolean maybe = false; @@ -65,5 +67,4 @@ public PointcutMatchDegree canBeAssignableFrom(@Nonnull PsiType type) { } return maybe ? PointcutMatchDegree.MAYBE : PointcutMatchDegree.FALSE; } - } diff --git a/aop-common/src/main/java/com/intellij/aop/psi/MethodPatternPointcut.java b/aop-common/src/main/java/com/intellij/aop/psi/MethodPatternPointcut.java index 4f3e457d..35cd6a46 100644 --- a/aop-common/src/main/java/com/intellij/aop/psi/MethodPatternPointcut.java +++ b/aop-common/src/main/java/com/intellij/aop/psi/MethodPatternPointcut.java @@ -4,6 +4,7 @@ */ package com.intellij.aop.psi; +import consulo.annotation.access.RequiredReadAction; import consulo.language.ast.ASTNode; import jakarta.annotation.Nonnull; @@ -16,44 +17,54 @@ * @author peter */ public abstract class MethodPatternPointcut extends AopElementBase implements PsiPointcutExpression { - public MethodPatternPointcut(@Nonnull ASTNode node) { - super(node); - } - - @Nullable - public AopReferenceHolder getReturnType() { - return findChildByClass(AopReferenceHolder.class); - } - - @Nullable - public AopModifierList getModifierList() { - return findChildByClass(AopModifierList.class); - } - - @Nullable - public AopMemberReferenceExpression getMethodReference() { - return findChildByClass(AopMemberReferenceExpression.class); - } - - @Nullable - public AopParameterList getParameterList() { - return findChildByClass(AopParameterList.class); - } - - @Nullable - public AopThrowsList getThrowsList() { - return findChildByClass(AopThrowsList.class); - } - - @Nullable - public AopAnnotationHolder getAnnotationHolder() { - return findChildByClass(AopAnnotationHolder.class); - } - - @Nonnull - public Collection getPatterns() { - AopMemberReferenceExpression methodReference = getMethodReference(); - if (methodReference == null) return Arrays.asList(AopPsiTypePattern.FALSE); - return methodReference.getQualifierPatterns(); - } + public MethodPatternPointcut(@Nonnull ASTNode node) { + super(node); + } + + @Nullable + @RequiredReadAction + public AopReferenceHolder getReturnType() { + return findChildByClass(AopReferenceHolder.class); + } + + @Nullable + @RequiredReadAction + public AopModifierList getModifierList() { + return findChildByClass(AopModifierList.class); + } + + @Nullable + @RequiredReadAction + public AopMemberReferenceExpression getMethodReference() { + return findChildByClass(AopMemberReferenceExpression.class); + } + + @Nullable + @RequiredReadAction + public AopParameterList getParameterList() { + return findChildByClass(AopParameterList.class); + } + + @Nullable + @RequiredReadAction + public AopThrowsList getThrowsList() { + return findChildByClass(AopThrowsList.class); + } + + @Nullable + @RequiredReadAction + public AopAnnotationHolder getAnnotationHolder() { + return findChildByClass(AopAnnotationHolder.class); + } + + @Nonnull + @Override + @RequiredReadAction + public Collection getPatterns() { + AopMemberReferenceExpression methodReference = getMethodReference(); + if (methodReference == null) { + return Arrays.asList(AopPsiTypePattern.FALSE); + } + return methodReference.getQualifierPatterns(); + } } diff --git a/aop-common/src/main/java/com/intellij/aop/psi/MethodPointcutDescriptor.java b/aop-common/src/main/java/com/intellij/aop/psi/MethodPointcutDescriptor.java index 168a21ef..f6c2efe9 100644 --- a/aop-common/src/main/java/com/intellij/aop/psi/MethodPointcutDescriptor.java +++ b/aop-common/src/main/java/com/intellij/aop/psi/MethodPointcutDescriptor.java @@ -4,10 +4,11 @@ */ package com.intellij.aop.psi; -import com.intellij.aop.AopBundle; +import consulo.aop.localize.AopLocalize; import consulo.language.ast.IElementType; import consulo.language.pratt.MutableMarker; import consulo.language.pratt.PrattBuilder; +import consulo.localize.LocalizeValue; import org.jetbrains.annotations.NonNls; import static com.intellij.aop.psi.AopElementTypes.*; @@ -16,87 +17,94 @@ /** * @author peter -*/ -public abstract class MethodPointcutDescriptor extends PointcutDescriptor{ - private final boolean myConstructorOnly; - - protected MethodPointcutDescriptor(@NonNls String tokenText, boolean constructorOnly) { - super(tokenText); - myConstructorOnly = constructorOnly; - } + */ +public abstract class MethodPointcutDescriptor extends PointcutDescriptor { + private final boolean myConstructorOnly; - public void parseToken(PrattBuilder builder) { - if (builder.assertToken(AOP_LEFT_PAR, AopBundle.message("error.0.expected", "("))) { - parseAnnotationsWithModifiers(builder); + protected MethodPointcutDescriptor(@NonNls String tokenText, boolean constructorOnly) { + super(tokenText); + myConstructorOnly = constructorOnly; + } - MutableMarker type = builder.mark(); - String message = myConstructorOnly - ? AopBundle.message("error.constructor.pattern.expected") - : AopBundle.message("error.method.return.type.expected"); - IElementType result = builder.parseChildren(TYPE_PATTERN, message); - boolean isConstructor = result == AOP_CONSTRUCTOR_REFERENCE_EXPRESSION; - if (!isConstructor) { - if (myConstructorOnly) { - builder.error(AopBundle.message("error.0.expected", ".new")); - type.finish(AOP_CONSTRUCTOR_REFERENCE_EXPRESSION); - } else { - type.finish(AOP_REFERENCE_HOLDER); - } - } else { - type.drop(); - } + @Override + public void parseToken(PrattBuilder builder) { + if (builder.assertToken(AOP_LEFT_PAR, AopLocalize.error0Expected("(").get())) { + parseAnnotationsWithModifiers(builder); - if (!isConstructor && !myConstructorOnly) { - MutableMarker methodRef = builder.mark(); - builder.parseChildren(TYPE_PATTERN, AopBundle.message("error.method.name.pattern.expected")); - methodRef.finish(AOP_MEMBER_REFERENCE_EXPRESSION); - } + MutableMarker type = builder.mark(); + LocalizeValue message = myConstructorOnly + ? AopLocalize.errorConstructorPatternExpected() + : AopLocalize.errorMethodReturnTypeExpected(); + IElementType result = builder.parseChildren(TYPE_PATTERN, message.get()); + boolean isConstructor = result == AOP_CONSTRUCTOR_REFERENCE_EXPRESSION; + if (!isConstructor) { + if (myConstructorOnly) { + builder.error(AopLocalize.error0Expected(".new").get()); + type.finish(AOP_CONSTRUCTOR_REFERENCE_EXPRESSION); + } + else { + type.finish(AOP_REFERENCE_HOLDER); + } + } + else { + type.drop(); + } - if (builder.assertToken(AOP_LEFT_PAR, AopBundle.message("error.0.expected", "("))) { - AopPointcutTypes.parseParameterList(builder, TYPE_PATTERN, AopBundle.message("error.method.args.pattern.expected")); + if (!isConstructor && !myConstructorOnly) { + MutableMarker methodRef = builder.mark(); + builder.parseChildren(TYPE_PATTERN, AopLocalize.errorMethodNamePatternExpected().get()); + methodRef.finish(AOP_MEMBER_REFERENCE_EXPRESSION); + } - if (builder.assertToken(AOP_RIGHT_PAR, AopBundle.message("error.0.expected", ")"))) { - if (builder.isToken(AOP_THROWS)) { - MutableMarker throwsList = builder.mark(); - builder.advance(); - while (true) { - MutableMarker exc = builder.mark(); - builder.parseChildren(TYPE_PATTERN, AopBundle.message("error.type.name.pattern.expected")); - exc.finish(AOP_REFERENCE_HOLDER); - if (!builder.checkToken(AOP_COMMA)) break; - } - throwsList.finish(AOP_THROWS_LIST); - } - } - } - builder.assertToken(AOP_RIGHT_PAR, AopBundle.message("error.0.expected", ")")); - } + if (builder.assertToken(AOP_LEFT_PAR, AopLocalize.error0Expected("(").get())) { + AopPointcutTypes.parseParameterList(builder, TYPE_PATTERN, AopLocalize.errorMethodArgsPatternExpected().get()); + if (builder.assertToken(AOP_RIGHT_PAR, AopLocalize.error0Expected(")").get())) { + if (builder.isToken(AOP_THROWS)) { + MutableMarker throwsList = builder.mark(); + builder.advance(); + while (true) { + MutableMarker exc = builder.mark(); + builder.parseChildren(TYPE_PATTERN, AopLocalize.errorTypeNamePatternExpected().get()); + exc.finish(AOP_REFERENCE_HOLDER); + if (!builder.checkToken(AOP_COMMA)) { + break; + } + } + throwsList.finish(AOP_THROWS_LIST); + } + } + } + builder.assertToken(AOP_RIGHT_PAR, AopLocalize.error0Expected(")").get()); + } } - public static void parseAnnotationsWithModifiers(PrattBuilder builder) { - if (builder.isToken(AOP_AT) || builder.isToken(AOP_NOT)) { - parseAnnotations(builder); - } + public static void parseAnnotationsWithModifiers(PrattBuilder builder) { + if (builder.isToken(AOP_AT) || builder.isToken(AOP_NOT)) { + parseAnnotations(builder); + } - MutableMarker modList = builder.mark(); - while (true) { - if (AOP_NOT == builder.getTokenType()) { - MutableMarker not = builder.mark(); - builder.advance(); - if (builder.isToken(AopElementTypes.AOP_MODIFIER)) { - builder.advance(); - not.finish(AOP_NOT_EXPRESSION); - } else { - not.rollback(); - break; + MutableMarker modList = builder.mark(); + while (true) { + if (AOP_NOT == builder.getTokenType()) { + MutableMarker not = builder.mark(); + builder.advance(); + if (builder.isToken(AopElementTypes.AOP_MODIFIER)) { + builder.advance(); + not.finish(AOP_NOT_EXPRESSION); + } + else { + not.rollback(); + break; + } + } + else if (builder.isToken(AopElementTypes.AOP_MODIFIER)) { + builder.advance(); + } + else { + break; + } } - } else if (builder.isToken(AopElementTypes.AOP_MODIFIER)) { - builder.advance(); - } else { - break; - } + modList.finish(AOP_MODIFIER_LIST); } - modList.finish(AOP_MODIFIER_LIST); - } } diff --git a/aop-common/src/main/java/com/intellij/aop/psi/ParserUtil.java b/aop-common/src/main/java/com/intellij/aop/psi/ParserUtil.java index 14227b68..565d1bb7 100644 --- a/aop-common/src/main/java/com/intellij/aop/psi/ParserUtil.java +++ b/aop-common/src/main/java/com/intellij/aop/psi/ParserUtil.java @@ -3,13 +3,12 @@ */ package com.intellij.aop.psi; -import consulo.language.parser.PsiBuilder; -import com.intellij.aop.AopBundle; -import consulo.language.ast.TokenSet; +import consulo.aop.localize.AopLocalize; import consulo.language.ast.IElementType; -import org.jetbrains.annotations.NonNls; -import jakarta.annotation.Nullable; +import consulo.language.ast.TokenSet; +import consulo.language.parser.PsiBuilder; import jakarta.annotation.Nonnull; +import jakarta.annotation.Nullable; /** * @author peter @@ -17,6 +16,7 @@ public class ParserUtil { protected static ParsingCommand sequence(final ParsingCommand... commands) { return new ParsingCommand() { + @Override public boolean perform(PsiBuilder builder) { for (ParsingCommand command : commands) { if (!command.perform(builder)) return false; @@ -34,38 +34,41 @@ protected static PsiBuilder.Marker doAndPrecedeMarker(PsiBuilder.Marker marker, protected static ParsingCommand token(final String text) { return new ParsingCommand() { + @Override public boolean perform(PsiBuilder builder) { if (text.equals(builder.getTokenText())) { builder.advanceLexer(); return true; } - builder.error(AopBundle.message("error.0.expected", text)); + builder.error(AopLocalize.error0Expected(text)); return false; } }; } - protected static ParsingCommand token(final AopElementType tokenType, final @NonNls @Nullable String expected) { + protected static ParsingCommand token(final AopElementType tokenType, final @Nullable String expected) { return new ParsingCommand() { + @Override public boolean perform(PsiBuilder builder) { if (tokenType.equals(builder.getTokenType())) { builder.advanceLexer(); return true; } - builder.error(AopBundle.message("error.0.expected", expected)); + builder.error(AopLocalize.error0Expected(expected)); return false; } }; } - protected static ParsingCommand token(final TokenSet set, final @NonNls String expected) { + protected static ParsingCommand token(final TokenSet set, final String expected) { return new ParsingCommand() { + @Override public boolean perform(PsiBuilder builder) { if (set.contains(builder.getTokenType())) { builder.advanceLexer(); return true; } - builder.error(AopBundle.message("error.0.expected", expected)); + builder.error(AopLocalize.error0Expected(expected)); return false; } }; @@ -87,6 +90,7 @@ protected static boolean doMarker(boolean result, PsiBuilder.Marker marker, IEle protected static ParsingCommand condition(final IElementType type, final ParsingCommand then, final ParsingCommand elze) { return new ParsingCommand() { + @Override public boolean perform(PsiBuilder builder) { return builder.getTokenType() == type ? then.perform(builder) : elze.perform(builder); } @@ -99,6 +103,7 @@ protected static ParsingCommand or(ParsingCommand... commands) { private static ParsingCommand or(final int main, final ParsingCommand... commands) { return new ParsingCommand() { + @Override public boolean perform(PsiBuilder myBuilder) { for (ParsingCommand command : commands) { PsiBuilder.Marker marker = myBuilder.mark(); @@ -116,6 +121,7 @@ public boolean perform(PsiBuilder myBuilder) { protected static ParsingCommand parseList(@Nonnull final ParsingCommand member, @Nullable final ParsingCommand separator, @Nullable final IElementType endType, final boolean canBeEmpty) { return new ParsingCommand() { + @Override public boolean perform(PsiBuilder builder) { if (canBeEmpty) { if (!tryParse(member, builder, endType)) return true; @@ -151,6 +157,7 @@ protected static ParsingCommand optional(ParsingCommand command) { protected static ParsingCommand handleError(final ParsingCommand command, final String message) { return new ParsingCommand() { + @Override public boolean perform(PsiBuilder builder) { int offset = builder.getCurrentOffset(); PsiBuilder.Marker marker = builder.mark(); @@ -171,6 +178,7 @@ public boolean perform(PsiBuilder builder) { protected static ParsingCommand parseBinary(final AopElementType exprType, final IElementType separatorType, final ParsingCommand lower) { return new ParsingCommand() { + @Override public boolean perform(PsiBuilder builder) { PsiBuilder.Marker expr = builder.mark(); if (!lower.perform(builder)) return dropMarker(expr); @@ -188,6 +196,7 @@ public boolean perform(PsiBuilder builder) { protected static ParsingCommand wrap(final ParsingCommand inner, final IElementType type) { return new ParsingCommand() { + @Override public boolean perform(PsiBuilder builder) { return doMarker(inner, builder.mark(), type, builder); } @@ -197,6 +206,7 @@ public boolean perform(PsiBuilder builder) { protected static abstract class ParsingCommand { public static ParsingCommand TRUE = new ParsingCommand() { + @Override public boolean perform(PsiBuilder builder) { return true; } @@ -214,5 +224,4 @@ public String toString() { public abstract boolean perform(PsiBuilder builder); } - } diff --git a/aop-common/tests/com/intellij/aop/psi/MockAopAdvice.java b/aop-common/tests/com/intellij/aop/psi/MockAopAdvice.java index a6cc6f6b..b078fbbd 100644 --- a/aop-common/tests/com/intellij/aop/psi/MockAopAdvice.java +++ b/aop-common/tests/com/intellij/aop/psi/MockAopAdvice.java @@ -3,24 +3,23 @@ */ package com.intellij.aop.psi; -import jakarta.annotation.Nonnull; - import com.intellij.aop.AopAdvice; import com.intellij.aop.AopAdviceType; import com.intellij.aop.AopAdvisedElementsSearcher; +import com.intellij.java.language.psi.PsiMethod; import consulo.language.psi.PsiElement; import consulo.language.psi.PsiFile; import consulo.language.psi.PsiManager; -import consulo.module.Module; -import com.intellij.psi.xml.XmlTag; import consulo.language.util.IncorrectOperationException; -import com.intellij.util.xml.MockDomElement; - +import consulo.module.Module; +import consulo.xml.language.psi.XmlElementFactory; +import consulo.xml.language.psi.XmlTag; +import jakarta.annotation.Nonnull; import jakarta.annotation.Nullable; /** * @author peter -*/ + */ public class MockAopAdvice extends MockDomElement implements AopAdvice { private final PsiPointcutExpression myPointcutExpression; private final XmlTag myXmlTag; @@ -31,48 +30,58 @@ public MockAopAdvice(PsiPointcutExpression pointcutExpression) throws IncorrectO } @Nullable + @Override public PsiPointcutExpression getPointcutExpression() { return myPointcutExpression; } @Nonnull + @Override public AopAdviceType getAdviceType() { throw new UnsupportedOperationException("Method getAdviceType is not yet implemented in " + getClass().getName()); } + @Override public PointcutMatchDegree accepts(PsiMethod method) { PsiPointcutExpression expression = getPointcutExpression(); return expression != null ? expression.acceptsSubject(new PointcutContext(expression), method) : PointcutMatchDegree.FALSE; } + @Override public boolean isValid() { throw new UnsupportedOperationException("Method isValid is not yet implemented in " + getClass().getName()); } @Nullable + @Override public XmlTag getXmlTag() { return myXmlTag; } + @Override public PsiManager getPsiManager() { throw new UnsupportedOperationException("Method getPsiManager is not yet implemented in " + getClass().getName()); } + @Override public AopAdvisedElementsSearcher getSearcher() { return myPointcutExpression.getContainingFile().getAopModel().getAdvisedElementsSearcher(); } @Nullable + @Override public Module getModule() { throw new UnsupportedOperationException("Method getModule is not yet implemented in " + getClass().getName()); } @Nullable + @Override public PsiElement getIdentifyingPsiElement() { return getXmlTag(); } @Nullable + @Override public PsiFile getContainingFile() { throw new UnsupportedOperationException("Method getContainingFile is not yet implemented in " + getClass().getName()); } diff --git a/aop-common/tests/com/intellij/aop/psi/MockAopModel.java b/aop-common/tests/com/intellij/aop/psi/MockAopModel.java index c96d4a0d..c5d33281 100644 --- a/aop-common/tests/com/intellij/aop/psi/MockAopModel.java +++ b/aop-common/tests/com/intellij/aop/psi/MockAopModel.java @@ -7,28 +7,26 @@ import com.intellij.aop.AopAspect; import com.intellij.aop.AopPointcut; import com.intellij.aop.LocalAopModel; -import com.intellij.mock.MockXmlTag; -import com.intellij.psi.PsiClass; +import com.intellij.jam.model.common.ReadOnlyGenericValue; +import com.intellij.java.language.psi.PsiClass; +import com.intellij.java.language.psi.PsiMethod; import consulo.language.psi.PsiElement; -import com.intellij.psi.PsiMethod; -import consulo.application.util.function.Processor; -import com.intellij.util.xml.GenericValue; -import com.intellij.util.xml.ReadOnlyGenericValue; -import org.jetbrains.annotations.NonNls; +import consulo.xml.dom.GenericValue; import jakarta.annotation.Nonnull; import jakarta.annotation.Nullable; import java.util.Collections; import java.util.List; +import java.util.function.Predicate; /** * @author peter */ public abstract class MockAopModel extends LocalAopModel { - protected MockAopModel(@Nullable PsiElement host, @Nonnull final PsiMethod pointcutMethod) { super(host, pointcutMethod, new AopAdvisedElementsSearcher(pointcutMethod.getManager()) { - public boolean process(Processor processor) { + @Override + public boolean test(Predicate processor) { throw new UnsupportedOperationException("Method doProcess is not yet implemented"); } }); @@ -38,32 +36,38 @@ protected MockAopModel(AopAdvisedElementsSearcher searcher) { super(null, null, searcher); } + @Override public List getAspects() { return Collections.emptyList(); } - protected AopPointcut createMockPointcut(@NonNls String qname) { - return createMockPointcut(qname, null, new MockXmlTag()); + protected AopPointcut createMockPointcut(String qName) { + return createMockPointcut(qName, null, new MockXmlTag()); } - protected AopPointcut createMockPointcut(@NonNls final String qname, final PsiPointcutExpression expression, final PsiElement element) { + protected AopPointcut createMockPointcut(final String qName, final PsiPointcutExpression expression, final PsiElement element) { return new AopPointcut() { + @Override public GenericValue getExpression() { - return new ReadOnlyGenericValue() { + return new ReadOnlyGenericValue<>() { + @Override public PsiPointcutExpression getValue() { return expression; } }; } + @Override public GenericValue getQualifiedName() { - return ReadOnlyGenericValue.getInstance(qname); + return ReadOnlyGenericValue.getInstance(qName); } + @Override public PsiElement getIdentifyingPsiElement() { return element; } + @Override public int getParameterCount() { return -1; } diff --git a/java-ex-impl/src/main/java/consulo/java/ex/facet/LibraryDownloadInfo.java b/java-ex-impl/src/main/java/consulo/java/ex/facet/LibraryDownloadInfo.java index 57713c1f..228c34e4 100644 --- a/java-ex-impl/src/main/java/consulo/java/ex/facet/LibraryDownloadInfo.java +++ b/java-ex-impl/src/main/java/consulo/java/ex/facet/LibraryDownloadInfo.java @@ -13,14 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package consulo.java.ex.facet; -import consulo.util.lang.Comparing; -import org.jetbrains.annotations.NonNls; - import jakarta.annotation.Nonnull; import jakarta.annotation.Nullable; +import org.jetbrains.annotations.NonNls; + +import java.util.Objects; /** * @author nik @@ -102,27 +101,27 @@ public String getPresentableUrl(String mirror) { return myPresentableUrl != null ? myPresentableUrl : mirror; } - public boolean equals(Object o) { + @Override + public boolean equals(@Nullable Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; LibraryDownloadInfo that = (LibraryDownloadInfo)o; - if (!myFileNamePrefix.equals(that.myFileNamePrefix)) return false; - if (!myFileNameSuffix.equals(that.myFileNameSuffix)) return false; - if (!Comparing.equal(myPresentableUrl, that.myPresentableUrl)) return false; - if (!myRelativeDownloadUrl.equals(that.myRelativeDownloadUrl)) return false; - if (!Comparing.equal(myRemoteRepository, that.myRemoteRepository)) return false; - - return true; + return myFileNamePrefix.equals(that.myFileNamePrefix) + && myFileNameSuffix.equals(that.myFileNameSuffix) + && Objects.equals(myPresentableUrl, that.myPresentableUrl) + && myRelativeDownloadUrl.equals(that.myRelativeDownloadUrl) + && Objects.equals(myRemoteRepository, that.myRemoteRepository); } + @Override public int hashCode() { - int result = myRemoteRepository != null ? myRemoteRepository.hashCode() : 0; - result = 31 * result + (myRelativeDownloadUrl != null ? myRelativeDownloadUrl.hashCode() : 0); - result = 31 * result + (myFileNamePrefix != null ? myFileNamePrefix.hashCode() : 0); - result = 31 * result + (myFileNameSuffix != null ? myFileNameSuffix.hashCode() : 0); - result = 31 * result + (myPresentableUrl != null ? myPresentableUrl.hashCode() : 0); + int result = Objects.hashCode(myRemoteRepository); + result = 31 * result + Objects.hashCode(myRelativeDownloadUrl); + result = 31 * result + Objects.hashCode(myFileNamePrefix); + result = 31 * result + Objects.hashCode(myFileNameSuffix); + result = 31 * result + Objects.hashCode(myPresentableUrl); return result; } } diff --git a/java-ex-impl/src/main/java/consulo/java/ex/facet/LibraryInfo.java b/java-ex-impl/src/main/java/consulo/java/ex/facet/LibraryInfo.java index e64fdbc8..4da4025b 100644 --- a/java-ex-impl/src/main/java/consulo/java/ex/facet/LibraryInfo.java +++ b/java-ex-impl/src/main/java/consulo/java/ex/facet/LibraryInfo.java @@ -13,13 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package consulo.java.ex.facet; -import org.jetbrains.annotations.NonNls; - import jakarta.annotation.Nullable; + import java.util.Arrays; +import java.util.Objects; /** * @author nik @@ -27,15 +26,18 @@ public class LibraryInfo { public static final LibraryInfo[] EMPTY_ARRAY = new LibraryInfo[0]; - private @Nullable - final LibraryDownloadInfo myDownloadInfo; - private @NonNls final String myName; - @Nullable private String myMd5; - private @NonNls final String[] myRequiredClasses; - - public LibraryInfo(@NonNls String name, - @Nullable @NonNls String downloadingUrl, - @Nullable String presentableUrl, @Nullable String md5, @NonNls String... requiredClasses) { + private final @Nullable LibraryDownloadInfo myDownloadInfo; + private final String myName; + private @Nullable String myMd5; + private final String[] myRequiredClasses; + + public LibraryInfo( + String name, + @Nullable String downloadingUrl, + @Nullable String presentableUrl, + @Nullable String md5, + String... requiredClasses + ) { myName = name; myMd5 = md5; myRequiredClasses = requiredClasses; @@ -50,18 +52,16 @@ public LibraryInfo(@NonNls String name, } } - public LibraryInfo(@NonNls String name, @Nullable LibraryDownloadInfo downloadInfo, String... requiredClasses) { + public LibraryInfo(String name, @Nullable LibraryDownloadInfo downloadInfo, String... requiredClasses) { myName = name; myRequiredClasses = requiredClasses; myDownloadInfo = downloadInfo; } - @NonNls public String getName() { return myName; } - @NonNls public String[] getRequiredClasses() { return myRequiredClasses; } @@ -71,19 +71,19 @@ public LibraryDownloadInfo getDownloadingInfo() { return myDownloadInfo; } - public boolean equals(Object o) { + @Override + public boolean equals(@Nullable Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; LibraryInfo that = (LibraryInfo)o; - if (myDownloadInfo != null ? !myDownloadInfo.equals(that.myDownloadInfo) : that.myDownloadInfo != null) return false; - if (!myName.equals(that.myName)) return false; - if (!Arrays.equals(myRequiredClasses, that.myRequiredClasses)) return false; - - return true; + return Objects.equals(myDownloadInfo, that.myDownloadInfo) + && myName.equals(that.myName) + && Arrays.equals(myRequiredClasses, that.myRequiredClasses); } + @Override public int hashCode() { int result; result = (myDownloadInfo != null ? myDownloadInfo.hashCode() : 0); diff --git a/obsolete/spring-tests/testData/highlighting/MyComparator.java b/obsolete/spring-tests/testData/highlighting/MyComparator.java index 0ae13520..2a977224 100644 --- a/obsolete/spring-tests/testData/highlighting/MyComparator.java +++ b/obsolete/spring-tests/testData/highlighting/MyComparator.java @@ -1,7 +1,7 @@ import java.util.Comparator; public class MyComparator implements Comparator { - + @Override public int compare(Object o1, Object o2) { return 0; //To change body of implemented methods use File | Settings | File Templates. } diff --git a/plugin/src/main/java/com/intellij/spring/impl/ide/ListOrSetExtender.java b/plugin/src/main/java/com/intellij/spring/impl/ide/ListOrSetExtender.java index 86e9efdf..f4255f84 100644 --- a/plugin/src/main/java/com/intellij/spring/impl/ide/ListOrSetExtender.java +++ b/plugin/src/main/java/com/intellij/spring/impl/ide/ListOrSetExtender.java @@ -15,6 +15,7 @@ public Class getElementClass() { return ListOrSet.class; } + @Override public void registerExtensions(@Nonnull ListOrSet element, @Nonnull DomExtensionsRegistrar registrar) { SpringDefaultDomExtender.registerDefaultBeanExtensions(registrar); } diff --git a/plugin/src/main/java/com/intellij/spring/impl/ide/factories/resolvers/JndiObjectFactoryBeanTypeResolver.java b/plugin/src/main/java/com/intellij/spring/impl/ide/factories/resolvers/JndiObjectFactoryBeanTypeResolver.java index 03daadf0..80c0b725 100644 --- a/plugin/src/main/java/com/intellij/spring/impl/ide/factories/resolvers/JndiObjectFactoryBeanTypeResolver.java +++ b/plugin/src/main/java/com/intellij/spring/impl/ide/factories/resolvers/JndiObjectFactoryBeanTypeResolver.java @@ -1,22 +1,22 @@ package com.intellij.spring.impl.ide.factories.resolvers; -import consulo.util.lang.StringUtil; import com.intellij.spring.impl.ide.model.xml.CommonSpringBean; import com.intellij.spring.impl.ide.model.xml.jee.JndiLookup; import com.intellij.spring.impl.ide.model.xml.jee.SpringJeeElement; -import org.jetbrains.annotations.NonNls; +import consulo.util.lang.StringUtil; import jakarta.annotation.Nonnull; import java.util.*; public class JndiObjectFactoryBeanTypeResolver extends AbstractJeeSchemaTypeResolver { - @NonNls private static final String FACTORY_CLASS = "org.springframework.jndi.JndiObjectFactoryBean"; + private static final String FACTORY_CLASS = "org.springframework.jndi.JndiObjectFactoryBean"; - @NonNls private static final String[] myProperties = new String[] {"proxyInterface","expectedType"}; + private static final String[] myProperties = new String[] {"proxyInterface","expectedType"}; @Nonnull + @Override protected Set getJeeObjectType(CommonSpringBean context) { - Set result = new HashSet(); + Set result = new HashSet<>(); if (context instanceof SpringJeeElement) { JndiLookup jndiLookup = (JndiLookup)context; if (StringUtil.isNotEmpty(jndiLookup.getProxyInterface().getStringValue())) { @@ -28,10 +28,12 @@ protected Set getJeeObjectType(CommonSpringBean context) { return result; } + @Override protected List getProperties() { return Arrays.asList(myProperties); } + @Override protected List getFactoryClasses() { return Collections.singletonList(FACTORY_CLASS); } diff --git a/plugin/src/main/java/com/intellij/spring/impl/ide/model/actions/GenerateSpringBeanDependenciesActionHandler.java b/plugin/src/main/java/com/intellij/spring/impl/ide/model/actions/GenerateSpringBeanDependenciesActionHandler.java index 881a4cb4..1fd9135b 100644 --- a/plugin/src/main/java/com/intellij/spring/impl/ide/model/actions/GenerateSpringBeanDependenciesActionHandler.java +++ b/plugin/src/main/java/com/intellij/spring/impl/ide/model/actions/GenerateSpringBeanDependenciesActionHandler.java @@ -12,6 +12,7 @@ import consulo.language.psi.PsiFile; import consulo.language.psi.util.PsiTreeUtil; import consulo.project.Project; +import consulo.ui.annotation.RequiredUIAccess; import consulo.util.lang.Pair; import java.util.List; @@ -27,6 +28,8 @@ public boolean isSetterDependency() { return mySetterDependency; } + @Override + @RequiredUIAccess public void invoke(Project project, Editor editor, PsiFile file) { int offset = editor.getCaretModel().getOffset(); PsiElement element = file.findElementAt(offset); @@ -34,6 +37,8 @@ public void invoke(Project project, Editor editor, PsiFile file) { final PsiClass psiClass = PsiTreeUtil.getParentOfType(element, PsiClass.class); List> list = new WriteCommandAction>>(psiClass.getProject()) { + @Override + @RequiredUIAccess protected void run(Result>> result) throws Throwable { List> list = GenerateSpringBeanDependenciesUtil .generateDependenciesFor(GenerateSpringBeanDependenciesUtil.getSpringModel(psiClass), psiClass, mySetterDependency); @@ -48,6 +53,7 @@ protected void run(Result 0; } + @RequiredReadAction public static boolean acceptPsiClass(PsiClass psiClass, boolean isSetterDependency) { SpringModel model = getSpringModel(psiClass); if (model == null) return false; @@ -57,22 +58,21 @@ public static boolean acceptPsiClass(PsiClass psiClass, boolean isSetterDependen return beansByPsiClass != null && beansByPsiClass.size() > 0 && getCandidates(model, psiClass, isSetterDependency).size() > 0; } + @RequiredUIAccess public static List> generateDependenciesFor(@Nullable SpringModel springModel, @Nullable PsiClass psiClass, boolean isSetterDependency) { - List> createdProperties = - new ArrayList>(); + List> createdProperties = new ArrayList<>(); if (springModel != null && psiClass != null) { List list = SpringUtils.findBeansByClassName(springModel.getAllCommonBeans(true), psiClass.getQualifiedName()); if (list.size() > 0) { for (SpringBeanPointer pointer : list) { - CommonSpringBean springBean = pointer.getSpringBean(); - if (springBean instanceof SpringBean && acceptBean((SpringBean)springBean, isSetterDependency)) { - return ensureFileWritable((SpringBean)springBean) - ? generateDependenciesFor((SpringBean)springBean, isSetterDependency) - : new ArrayList>(); + if (pointer.getSpringBean() instanceof SpringBean springBean && acceptBean(springBean, isSetterDependency)) { + return ensureFileWritable(springBean) + ? generateDependenciesFor(springBean, isSetterDependency) + : new ArrayList<>(); } } } @@ -90,19 +90,17 @@ public static List> generat public static List> createBeanAndGenerateDependencies(PsiClass psiClass, boolean isSetterDependency, List beans) { - CommonSpringBean springBean = beans.get(0).getSpringBean(); SpringBean bean = null; - if (springBean instanceof DomSpringBean) { - DomSpringBean domSpringBean = (DomSpringBean)springBean; - bean = createSpingBean(domSpringBean.getParentOfType(Beans.class, false), psiClass); + if (beans.get(0).getSpringBean() instanceof DomSpringBean domSpringBean) { + bean = createSpringBean(domSpringBean.getParentOfType(Beans.class, false), psiClass); } return bean == null - ? new ArrayList>() + ? new ArrayList<>() : generateDependencies(bean, beans, isSetterDependency); } @Nullable - private static SpringBean createSpingBean(Beans parentBeans, PsiClass psiClass) { + private static SpringBean createSpringBean(Beans parentBeans, PsiClass psiClass) { if (!ensureFileWritable(parentBeans)) return null; SpringBean springBean = parentBeans.addBean(); @@ -126,6 +124,7 @@ private static boolean ensureFileWritable(@Nullable VirtualFile virtualFile, Pro return true; } + @RequiredUIAccess public static List> generateDependenciesFor(@Nullable SpringBean springBean, boolean isSetterDependency) { if (springBean == null || springBean.getBeanClass() == null) return Collections.emptyList(); @@ -137,11 +136,11 @@ public static List> generat return generateDependencies(springBean, dependencies, isSetterDependency); } + @RequiredWriteAction public static List> generateDependencies(@Nonnull SpringBean springBean, List dependencies, boolean isSetterDependency) { - List> springInjections = - new ArrayList>(); + List> springInjections = new ArrayList<>(); SpringModel model = SpringUtils.getSpringModel(springBean); for (SpringBeanPointer bean : dependencies) { @@ -151,28 +150,29 @@ public static List> generat if (pair != null) springInjections.add(pair); } return springInjections; - } @Nonnull + @RequiredUIAccess private static List chooseDependentBeans(List candidates, final Project project, final boolean setterDependency) { - List chosenBeans = new ArrayList(); + List chosenBeans = new ArrayList<>(); - MemberChooser chooser = new MemberChooser( + MemberChooser chooser = new MemberChooser<>( candidates.toArray(new SpringBeanClassMember[candidates.size()]), false, setterDependency, project) { + @Override protected ShowContainersAction getShowContainersAction() { - return new ShowContainersAction(LocalizeValue.of(SpringBundle.message("spring.beans.chooser.show.context.files")), - SpringIcons.CONFIG_FILE); + return new ShowContainersAction(SpringLocalize.springBeansChooserShowContextFiles(), SpringImplIconGroup.springconfig()); } + @Override protected String getAllContainersNodeName() { - return SpringBundle.message("spring.beans.chooser.all.context.files"); + return SpringLocalize.springBeansChooserAllContextFiles().get(); } }; - chooser.setTitle(SpringBundle.message("spring.bean.dependencies.chooser.title")); + chooser.setTitle(SpringLocalize.springBeanDependenciesChooserTitle()); chooser.setCopyJavadocVisible(false); chooser.show(); @@ -190,7 +190,7 @@ protected String getAllContainersNodeName() { @Nonnull public static List getCandidates(SpringBean springBean, boolean setterDependency) { - List beanClassMembers = new ArrayList(); + List beanClassMembers = new ArrayList<>(); SpringModel model = SpringUtils.getSpringModel(springBean); PsiClass springBeanClass = springBean.getBeanClass(); @@ -224,8 +224,7 @@ private static boolean canBeReferenced(SpringBeanPointer bean, Collection getCandidates(@Nonnull SpringModel model, PsiClass psiClass, boolean setterDependency) { - - List beanClassMembers = new ArrayList(); + List beanClassMembers = new ArrayList<>(); Collection allBeans = model.getAllCommonBeans(); for (SpringBeanPointer bean : allBeans) { @@ -325,7 +324,7 @@ private static PsiMethod findConstructor(PsiMethod[] constructors, List } private static List getParameterTypes(PsiMethod method) { - List psiParameterTypes = new ArrayList(); + List psiParameterTypes = new ArrayList<>(); PsiParameter[] parameters = method.getParameterList().getParameters(); for (PsiParameter parameter : parameters) { psiParameterTypes.add(parameter.getType()); @@ -370,7 +369,7 @@ private static Pair createDepend property.getName().ensureXmlElementExists(); property.getName().setStringValue(PropertyUtil.getPropertyNameBySetter(setter)); property.getRefAttr().setStringValue(getReferencedName(currentBean, bean)); - return new Pair(property, templatesHolder); + return new Pair<>(property, templatesHolder); } } @@ -378,6 +377,7 @@ private static Pair createDepend } @Nullable + @RequiredWriteAction private static Pair createConstructorArg(SpringBean currentBean, SpringBeanPointer bean, SpringModel model) { @@ -412,7 +412,7 @@ private static Pair createConstr } } - return new Pair(arg, holder); + return new Pair<>(arg, holder); } @Nullable @@ -489,6 +489,7 @@ private static PsiMethod findProperConstructorAndAddParameter(SpringBean current } @Nonnull + @RequiredWriteAction private static PsiMethod createConstructor(SpringBean springBean) { PsiClass instantiationClass = null; PsiMethod instantiationMethod = null; @@ -503,14 +504,14 @@ private static PsiMethod createConstructor(SpringBean springBean) { if (beanPointer != null) { instantiationClass = beanPointer.getBeanClass(); String methodName = getInstantiationMethodName(instantiationClass, springBean); - @NonNls String methodText = PsiModifier.PUBLIC + " " + beanClass.getName() + " " + methodName + "() { return null; }"; + String methodText = PsiModifier.PUBLIC + " " + beanClass.getName() + " " + methodName + "() { return null; }"; instantiationMethod = elementFactory.createMethodFromText(methodText, null); } } else if (isInstantiatedByFactoryMethod(springBean)) { instantiationClass = beanClass; String methodName = getInstantiationMethodName(instantiationClass, springBean); - @NonNls String methodText = + String methodText = PsiModifier.PUBLIC + " " + PsiModifier.STATIC + " " + beanClass.getName() + " " + methodName + "() { return null; }"; instantiationMethod = elementFactory.createMethodFromText(methodText, null); } @@ -535,12 +536,13 @@ else if (isInstantiatedByFactoryMethod(springBean)) { } @Nonnull + @RequiredReadAction private static String getInstantiationMethodName(PsiClass factoryBeanClass, SpringBean springBean) { String methodName = springBean.getFactoryMethod().getStringValue(); if (!StringUtil.isEmptyOrSpaces(methodName)) return methodName; PsiClass beanClass = springBean.getBeanClass(); - @NonNls String methodPrefix = "create"; + String methodPrefix = "create"; methodName = methodPrefix + beanClass.getName(); int i = 0; while (factoryBeanClass.findMethodsByName(methodName, true).length > 0) { @@ -558,6 +560,7 @@ private static boolean isInstantiatedByFactory(SpringBean springBean) { return DomUtil.hasXml(springBean.getFactoryBean()); } + @RequiredWriteAction private static void addConstructorParameter(PsiClass currentBeanClass, PsiClass candidateBeanClass, PsiMethod constructor) { @@ -589,6 +592,7 @@ private static boolean hasSuchName(PsiParameter[] parameters, String name) { } @Nonnull + @RequiredWriteAction private static PsiMethod createSetter(SpringBeanPointer candidateBean, PsiClass currentBeanClass, PsiClass[] candidateBeanClasses) { @@ -602,7 +606,7 @@ private static PsiMethod createSetter(SpringBeanPointer candidateBean, PsiManager psiManager = PsiManager.getInstance(currentBeanClass.getProject()); PsiElementFactory elementFactory = JavaPsiFacade.getInstance(psiManager.getProject()).getElementFactory(); - @NonNls String methodText = "public void set" + StringUtil.capitalize(name) + "(" + candidateBeanClasses[0].getQualifiedName() + + String methodText = "public void set" + StringUtil.capitalize(name) + "(" + candidateBeanClasses[0].getQualifiedName() + " " + StringUtil.decapitalize(name) + ") { }"; method = elementFactory.createMethodFromText(methodText, null); @@ -626,36 +630,36 @@ private static void addCreateSetterTemplate(PsiMethod method, addCreateSetterTemplate(method, psiClasses, bean, templatesHolder, 0, model); } - private static void addCreateSetterTemplate(final PsiMethod method, - final PsiClass[] psiClasses, - final SpringBeanPointer bean, - SpringGenerateTemplatesHolder templatesHolder, - final int paramId, - final SpringModel model) { - templatesHolder.addTemplateFactory(method.getParameterList(), new Supplier