blob: 8b1d115b50d0c2a8c8143070181e39bbdab1b262 [file]
// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.plugins.grails;
import com.intellij.psi.PsiModifier;
import com.intellij.psi.PsiReferenceContributor;
import com.intellij.psi.PsiReferenceRegistrar;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.grails.pluginSupport.seachable.SearchableFieldReferenceProvider;
import org.jetbrains.plugins.grails.references.GrailsMethodNamedArgumentReferenceProvider;
import org.jetbrains.plugins.grails.references.buildConfig.BuildConfigFileReferenceProvider;
import org.jetbrains.plugins.grails.references.controller.ControllerAllowedMethodReferenceProvider;
import org.jetbrains.plugins.grails.references.controller.ControllerFieldReferenceProvider;
import org.jetbrains.plugins.grails.references.controller.ControllerLayoutReferenceProvider;
import org.jetbrains.plugins.grails.references.controller.ControllerReferenceProvider;
import org.jetbrains.plugins.grails.references.domain.GormEmbeddedPropertyListReferenceProvider;
import org.jetbrains.plugins.grails.references.domain.GormFetchModeReferenceProvider;
import org.jetbrains.plugins.grails.references.domain.GormPropertiesListReferenceReferenceProvider;
import org.jetbrains.plugins.grails.references.domain.GormPropertyConstraintReferenceProvider;
import org.jetbrains.plugins.grails.references.domain.GormUniqueConstraintReferenceProvider;
import org.jetbrains.plugins.grails.references.domain.GrailsHasManyBelongsToReferencesProvider;
import org.jetbrains.plugins.grails.references.domain.GrailsHasManyBelongsToValuesReferencesProvider;
import org.jetbrains.plugins.grails.references.filter.FilterReferenceProvider;
import org.jetbrains.plugins.grails.references.pluginClass.GrailsPluginExcludeReferenceProvider;
import org.jetbrains.plugins.grails.references.pluginClass.GrailsPluginListReferenceProvider;
import org.jetbrains.plugins.grails.references.urlMappings.UrlMappingReferenceProvider;
import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.GrListOrMap;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrArgumentLabel;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrArgumentList;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.path.GrIndexProperty;
import static com.intellij.patterns.PlatformPatterns.psiElement;
import static org.jetbrains.plugins.groovy.lang.psi.patterns.GroovyPatterns.grField;
import static org.jetbrains.plugins.groovy.lang.psi.patterns.GroovyPatterns.namedArgumentStringLiteral;
import static org.jetbrains.plugins.groovy.lang.psi.patterns.GroovyPatterns.string;
import static org.jetbrains.plugins.groovy.lang.psi.patterns.GroovyPatterns.stringLiteral;
public final class GrailsGroovyCodeReferenceContributor extends PsiReferenceContributor {
@Override
public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) {
registrar.registerReferenceProvider(stringLiteral().withParent(
psiElement(GrListOrMap.class).withParent(grField().withName("transients").withModifiers(PsiModifier.STATIC))),
new GormPropertiesListReferenceReferenceProvider());
registrar.registerReferenceProvider(stringLiteral().withParent(
psiElement(GrListOrMap.class).withParent(grField().withName("embedded").withModifiers(PsiModifier.STATIC))),
new GormEmbeddedPropertyListReferenceProvider());
registrar.registerReferenceProvider(namedArgumentStringLiteral(), new GrailsHasManyBelongsToValuesReferencesProvider());
registrar.registerReferenceProvider(psiElement(GrArgumentLabel.class), new GrailsHasManyBelongsToReferencesProvider());
registrar.registerReferenceProvider(stringLiteral(), new ControllerReferenceProvider());
registrar.registerReferenceProvider(stringLiteral().withParent(grField().withModifiers(PsiModifier.STATIC)),
new ControllerFieldReferenceProvider());
registrar.registerReferenceProvider(namedArgumentStringLiteral(), new UrlMappingReferenceProvider());
registrar.registerReferenceProvider(namedArgumentStringLiteral(), new FilterReferenceProvider());
registrar.registerReferenceProvider(stringLiteral().withParent(psiElement(GrListOrMap.class).
withParent(grField().withName("pluginExcludes"))), new GrailsPluginExcludeReferenceProvider());
registrar.registerReferenceProvider(stringLiteral().withParent(psiElement(GrListOrMap.class).
withParent(grField().withName(string().oneOf("observe", "influences", "loadAfter", "loadBefore")))),
new GrailsPluginListReferenceProvider());
registrar.registerReferenceProvider(stringLiteral().withParent(grField().withName("layout").withModifiers(PsiModifier.STATIC)),
new ControllerLayoutReferenceProvider());
registrar.registerReferenceProvider(stringLiteral().withParent(psiElement(GrArgumentList.class).withParent(GrIndexProperty.class)),
new GormPropertyConstraintReferenceProvider());
GormFetchModeReferenceProvider.register(registrar);
registrar.registerReferenceProvider(stringLiteral(), new SearchableFieldReferenceProvider());
BuildConfigFileReferenceProvider.register(registrar);
registrar.registerReferenceProvider(stringLiteral(), GrailsMethodNamedArgumentReferenceProvider.getInstance());
GormUniqueConstraintReferenceProvider.register(registrar);
ControllerAllowedMethodReferenceProvider.register(registrar);
}
}