mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-99587 Groovy 2.1 : @DelegatesTo, correct highlighting
This commit is contained in:
@@ -166,6 +166,7 @@
|
||||
<customAnnotationChecker implementation="org.jetbrains.plugins.groovy.annotator.GrabAnnotationChecker"/>
|
||||
<customAnnotationChecker implementation="org.jetbrains.plugins.groovy.annotator.GrAliasAnnotationChecker"/>
|
||||
<customAnnotationChecker implementation="org.jetbrains.plugins.groovy.annotator.AnnotationCollectorChecker" order="first"/>
|
||||
<customAnnotationChecker implementation="org.jetbrains.plugins.groovy.annotator.DelegatesToAnnotationChecker"/>
|
||||
</extensions>
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij.properties">
|
||||
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Copyright 2000-2013 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.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jetbrains.plugins.groovy.annotator;
|
||||
|
||||
import com.intellij.lang.annotation.AnnotationHolder;
|
||||
import com.intellij.psi.PsiAnnotationMemberValue;
|
||||
import com.intellij.psi.PsiAnnotationOwner;
|
||||
import com.intellij.psi.PsiElement;
|
||||
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;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameterList;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames;
|
||||
|
||||
/**
|
||||
* checks the following case:
|
||||
* <p/>
|
||||
* def foo(@DelegatesTo.Target def targetArg, @DelegatesTo Closure cl) {}
|
||||
*
|
||||
* @author Max Medvedev
|
||||
*/
|
||||
|
||||
public class DelegatesToAnnotationChecker extends CustomAnnotationChecker {
|
||||
@Override
|
||||
public boolean checkArgumentList(@NotNull AnnotationHolder holder, @NotNull GrAnnotation annotation) {
|
||||
if (!GroovyCommonClassNames.GROOVY_LANG_DELEGATES_TO.equals(annotation.getQualifiedName())) return false;
|
||||
|
||||
final PsiAnnotationMemberValue valueAttribute = annotation.findAttributeValue("value");
|
||||
|
||||
if (valueAttribute == null) {
|
||||
final PsiAnnotationOwner owner = annotation.getOwner();
|
||||
if (owner instanceof GrModifierList) {
|
||||
final PsiElement parent1 = ((GrModifierList)owner).getParent();
|
||||
if (parent1 instanceof GrParameter) {
|
||||
final PsiElement parent = parent1.getParent();
|
||||
if (parent instanceof GrParameterList) {
|
||||
for (GrParameter parameter : ((GrParameterList)parent).getParameters()) {
|
||||
if (parameter.getModifierList().findAnnotation(GroovyCommonClassNames.GROOVY_LANG_DELEGATES_TO_TARGET) != null) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
+13
@@ -1120,4 +1120,17 @@ print(<error descr="Collection literal contains named and expression arguments a
|
||||
''')
|
||||
}
|
||||
|
||||
void testDelegatesToApplicability() {
|
||||
testHighlighting('''
|
||||
def with(@DelegatesTo.Target Object target, @DelegatesTo Closure arg) {
|
||||
arg.delegate = target
|
||||
arg()
|
||||
}
|
||||
|
||||
def with2(Object target, @<error descr="Missed attributes: value">DelegatesTo</error> Closure arg) {
|
||||
arg.delegate = target
|
||||
arg()
|
||||
}
|
||||
''')
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user