diff --git a/src/com/magento/idea/magento2plugin/reference/xml/PolyVariantReferenceBase.java b/src/com/magento/idea/magento2plugin/reference/xml/PolyVariantReferenceBase.java index d18a0c1e3..bf76497ca 100644 --- a/src/com/magento/idea/magento2plugin/reference/xml/PolyVariantReferenceBase.java +++ b/src/com/magento/idea/magento2plugin/reference/xml/PolyVariantReferenceBase.java @@ -2,6 +2,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + package com.magento.idea.magento2plugin.reference.xml; import com.intellij.openapi.util.TextRange; @@ -9,42 +10,42 @@ import com.intellij.psi.PsiElementResolveResult; import com.intellij.psi.PsiPolyVariantReferenceBase; import com.intellij.psi.ResolveResult; -import org.jetbrains.annotations.NotNull; - import java.util.Collection; +import org.jetbrains.annotations.NotNull; public class PolyVariantReferenceBase extends PsiPolyVariantReferenceBase { /** - * Target elements + * Target elements. */ - private Collection targets; + private final Collection targets; - public PolyVariantReferenceBase(PsiElement element, Collection targets) { + public PolyVariantReferenceBase( + final PsiElement element, + final Collection targets + ) { super(element); this.targets = targets; } - public PolyVariantReferenceBase(PsiElement element, TextRange range, Collection targets) { + public PolyVariantReferenceBase( + final PsiElement element, + final TextRange range, + final Collection targets + ) { super(element, range); this.targets = targets; } @NotNull @Override - public ResolveResult[] multiResolve(boolean incompleteCode) { + public ResolveResult[] multiResolve(final boolean incompleteCode) { ResolveResult[] resolveResults = new ResolveResult[targets.size()]; - int i = 0; - for (PsiElement target : targets) { - resolveResults[i++] = new PsiElementResolveResult(target); + int index = 0; + for (final PsiElement target : targets) { + resolveResults[index++] = new PsiElementResolveResult(target);//NOPMD } return resolveResults; } - - @NotNull - @Override - public Object[] getVariants() { - return new Object[0]; - } } diff --git a/testData/project/magento2/app/code/Foo/Bar/Model/Logger.php b/testData/project/magento2/app/code/Foo/Bar/Model/Logger.php new file mode 100644 index 000000000..2cb63c0c6 --- /dev/null +++ b/testData/project/magento2/app/code/Foo/Bar/Model/Logger.php @@ -0,0 +1,13 @@ +logger = $logger; + } +} diff --git a/testData/reference/xml/ConstructorArgumentReferenceRegistrar/diXmlConstructorArgumentMustHaveReference/di.xml b/testData/reference/xml/ConstructorArgumentReferenceRegistrar/diXmlConstructorArgumentMustHaveReference/di.xml new file mode 100644 index 000000000..5608a271c --- /dev/null +++ b/testData/reference/xml/ConstructorArgumentReferenceRegistrar/diXmlConstructorArgumentMustHaveReference/di.xml @@ -0,0 +1,14 @@ + + + + + + Foo\Bar\Model\Logger + + + diff --git a/testData/reference/xml/ConstructorArgumentReferenceRegistrar/diXmlConstructorArgumentMustNotHaveReference/di.xml b/testData/reference/xml/ConstructorArgumentReferenceRegistrar/diXmlConstructorArgumentMustNotHaveReference/di.xml new file mode 100644 index 000000000..b4084907c --- /dev/null +++ b/testData/reference/xml/ConstructorArgumentReferenceRegistrar/diXmlConstructorArgumentMustNotHaveReference/di.xml @@ -0,0 +1,14 @@ + + + + + + Foo\Bar\Model\Logger + + + diff --git a/tests/com/magento/idea/magento2plugin/reference/BaseReferenceTestCase.java b/tests/com/magento/idea/magento2plugin/reference/BaseReferenceTestCase.java index 11dfaec39..f9de4b77d 100644 --- a/tests/com/magento/idea/magento2plugin/reference/BaseReferenceTestCase.java +++ b/tests/com/magento/idea/magento2plugin/reference/BaseReferenceTestCase.java @@ -14,10 +14,12 @@ import com.intellij.psi.xml.XmlFile; import com.intellij.psi.xml.XmlTag; import com.jetbrains.php.lang.psi.elements.Method; +import com.jetbrains.php.lang.psi.elements.Parameter; import com.jetbrains.php.lang.psi.elements.PhpClass; import com.magento.idea.magento2plugin.inspections.BaseInspectionsTestCase; import com.magento.idea.magento2plugin.magento.packages.File; import com.magento.idea.magento2plugin.reference.xml.PolyVariantReferenceBase; +import org.jetbrains.annotations.Nullable; public abstract class BaseReferenceTestCase extends BaseInspectionsTestCase { private static final String testDataFolderPath = "testData" + File.separator//NOPMD @@ -154,6 +156,31 @@ protected void assertHasReferencePhpClass(final String phpClassFqn) { ); } + protected void assertHasReferencetoConstructorParameter( + final String argumentClassFqn, + final String argumentName + ) { + final PsiElement element = getElementFromCaret(); + final @Nullable PsiReference reference = element.getReference(); + + if (reference == null) { + final String referenceNotFound + = "Failed that element does not contain and reference"; + fail(referenceNotFound); + } + + final String parameterClassFqn = ((Parameter) reference.resolve()) + .getLocalType().toStringResolved(); + final String parameterName = ((Parameter) reference.resolve()).getName(); + + assertEquals("Class name in argument equals class name in parameter", + parameterClassFqn, + argumentClassFqn); + assertEquals("Variable name in argument equals variable name in parameter", + parameterName, + argumentName); + } + protected void assertHasReferenceToClassMethod( final String className, final String methodName diff --git a/tests/com/magento/idea/magento2plugin/reference/xml/ConstructorArgumentReferenceRegistrarTest.java b/tests/com/magento/idea/magento2plugin/reference/xml/ConstructorArgumentReferenceRegistrarTest.java new file mode 100644 index 000000000..9bb376e1e --- /dev/null +++ b/tests/com/magento/idea/magento2plugin/reference/xml/ConstructorArgumentReferenceRegistrarTest.java @@ -0,0 +1,31 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.reference.xml; + +import com.magento.idea.magento2plugin.magento.files.ModuleDiXml; + +public class ConstructorArgumentReferenceRegistrarTest extends ReferenceXmlFixtureTestCase { + /** + * Tests for valid reference in di.xml constructor argument + */ + public void testDiXmlConstructorArgumentMustHaveReference() { + myFixture.configureByFile(this.getFixturePath(ModuleDiXml.FILE_NAME)); + + assertHasReferencetoConstructorParameter( + "\\Magento\\Framework\\Logger\\LoggerInterface", + "logger" + ); + } + + /** + * Tests for no reference in di.xml constructor argument + */ + public void testDiXmlConstructorArgumentMustNotHaveReference() { + myFixture.configureByFile(this.getFixturePath(ModuleDiXml.FILE_NAME)); + + assertEmptyReference(); + } +}