Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,49 +2,50 @@
* 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;
import com.intellij.psi.PsiElement;
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<PsiElement> {

/**
* Target elements
* Target elements.
*/
private Collection<? extends PsiElement> targets;
private final Collection<? extends PsiElement> targets;

public PolyVariantReferenceBase(PsiElement element, Collection<? extends PsiElement> targets) {
public PolyVariantReferenceBase(
final PsiElement element,
final Collection<? extends PsiElement> targets
) {
super(element);
this.targets = targets;
}

public PolyVariantReferenceBase(PsiElement element, TextRange range, Collection<? extends PsiElement> targets) {
public PolyVariantReferenceBase(
final PsiElement element,
final TextRange range,
final Collection<? extends PsiElement> 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];
}
}
13 changes: 13 additions & 0 deletions testData/project/magento2/app/code/Foo/Bar/Model/Logger.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Foo\Bar\Model;

class Logger implements Magento\Framework\Logger\LoggerInterface
{
public function log($level, $message, array $context = array())
{
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Logger;

/**
* Describes a logger instance.
*/
interface LoggerInterface
{
/**
* Logs with an arbitrary level.
*
* @param mixed $level
* @param string $message
* @param mixed[] $context
*
* @return void
*/
public function log($level, $message, array $context = array());
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,28 @@
<?php

/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Backend\Model\Source;

use Magento\Framework\Option\ArrayInterface;
use Magento\Framework\Logger\LoggerInterface;

class YesNo implements ArrayInterface {
class YesNo implements ArrayInterface
{
/**
* @var LoggerInterface
*/
private $logger;

}
/**
* YesNo constructor.
*
* @param LoggerInterface $logger
*/
public function __construct(
LoggerInterface $logger
) {
$this->logger = $logger;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<config>
<type name="Magento\Backend\Model\Source\YesNo">
<arguments>
<argument name="<caret>logger" xsi:type="object">Foo\Bar\Model\Logger</argument>
</arguments>
</type>
</config>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<config>
<type name="Magento\Backend\Model\Source\YesNo">
<arguments>
<argument name="<caret>loggers" xsi:type="object">Foo\Bar\Model\Logger</argument>
</arguments>
</type>
</config>
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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();
}
}