Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ContextFactory overwrites when multiple imports with same alias #11

Open
asgrim opened this issue Jul 19, 2015 · 9 comments
Open

ContextFactory overwrites when multiple imports with same alias #11

asgrim opened this issue Jul 19, 2015 · 9 comments
Assignees

Comments

@asgrim
Copy link
Contributor

asgrim commented Jul 19, 2015

After some discussion with @nikic on https://github.com/phpDocumentor/TypeResolver/pull/9/files#r34962566 it looks like ContextFactory::getNamespaceAliases() doesn't cope with multiple imports with the same aliased name. For example:

namespace Foo;
use Foo\X;
class A extends X {
    use Zap;
}
use Bar\X;
class B extends X {
    use Baz;
}

If you call ::getNamespaceAliases() on this perfectly valid code, you'll see:

[
    'X' => 'Bar\X'
]

This is not correct, but because it is keyed by the alias name, it is too much of a simple representation to allow multiple named aliases. It's maybe quite an edge case, but it does indeed appear to be a bug.

@jaapio
Copy link
Member

jaapio commented Apr 30, 2017

@asgrim can this one be closed? It looks like you already provided a patch for this issue?

@asgrim
Copy link
Contributor Author

asgrim commented Apr 30, 2017

I don't think it's resolved yet - #9 resolved #8 but we discovered this issue #11 after discussion on that PR.

@jaapio
Copy link
Member

jaapio commented Apr 30, 2017

In that case I will dive into this to see if it can be resolved

@jaapio jaapio assigned jaapio and unassigned asgrim Apr 30, 2017
@GrahamCampbell
Copy link
Contributor

Anything I can do to help here?

@jaapio
Copy link
Member

jaapio commented Dec 30, 2017

Feel free to make a pr 😊

@ragboyjr
Copy link
Contributor

@asgrim @jaapio I can't think of any clean way to handle this edge case. I think we should probably just detect if a namespace is being redeclared and throw an exception or something.

@asgrim
Copy link
Contributor Author

asgrim commented Aug 22, 2018

Seems reasonable aye 👍 it's a real edge case

@jaapio
Copy link
Member

jaapio commented Aug 22, 2018

The issue here is that php is somehow interpreting files from top to bottom, we are simply parsing a file in the same way but are trying to map that in to an array.
I would expect that we could be able to create an context based on the class that is requested.

In the situation where you are requesting for a context for a specific namespace this won't work. But since all types that are resolved are somehow related to an Reflection type we should be able to have some way to figure out what is the correct context. If the user is still requesting a context for a namespace we could throw an exception.

I do fully agree that this isn't a very easy and straightforward solution but it will work for the situations we have to handle in phpdocumentor. And I think this approach might work for BetterReflection as well?

@asgrim
Copy link
Contributor Author

asgrim commented Aug 22, 2018 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants