Just because a package (e.g. log) is imported by the caller,
and the name log is in scope, doesn't mean the name in scope
refers to the package: it could be locally shadowed.

In all three scenarios below, renaming import with a fresh name is
added because the usual name is locally shadowed: in cases 1, 2 an
existing import is shadowed by (respectively) a local constant,
parameter; in case 3 there is no existing import.

-- go.mod --
module testdata
go 1.12

-- a/a.go --
package a

import "testdata/b"
import "log"

func A() {
	const log = "shadow"
	b.B() //@ inline(re"B", bresult)
}

var _ log.Logger

-- b/b.go --
package b

import "log"

func B() {
	log.Printf("")
}

-- bresult --
package a

import (
	"log"
	log0 "log"
)

func A() {
	const log = "shadow"
	log0.Printf("") //@ inline(re"B", bresult)
}

var _ log.Logger

-- go.mod --
module testdata
go 1.12

-- a/a.go --
package a

import "testdata/b"

var x b.T

func A(b int) {
	x.F() //@ inline(re"F", fresult)
}

-- b/b.go --
package b

type T struct{}

func (T) F() {
	One()
	Two()
}

func One() {}
func Two() {}

-- fresult --
package a

import (
	"testdata/b"
	b0 "testdata/b"
)

var x b.T

func A(b int) {
	b0.One()
	b0.Two() //@ inline(re"F", fresult)
}

-- d/d.go --
package d

import "testdata/e"

func D() {
	const log = "shadow"
	e.E() //@ inline(re"E", eresult)
}

-- e/e.go --
package e

import "log"

func E() {
	log.Printf("")
}

-- eresult --
package d

import (
	log0 "log"
)

func D() {
	const log = "shadow"
	log0.Printf("") //@ inline(re"E", eresult)
}
