Use fully qualified static field name in conflict #541
This commit is contained in:
committed by
Egor.Ushakov
parent
0b442fc64b
commit
2a213aa4a0
4
testData/src/ext/TestClashNameIface.java
Normal file
4
testData/src/ext/TestClashNameIface.java
Normal file
@@ -0,0 +1,4 @@
|
||||
package ext;
|
||||
interface TestClashNameIface {
|
||||
public void foo();
|
||||
}
|
||||
5
testData/src/ext/TestClashNameParent.java
Normal file
5
testData/src/ext/TestClashNameParent.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package ext;
|
||||
|
||||
public class TestClashNameParent {
|
||||
int SharedName3 = 0;
|
||||
}
|
||||
83
testData/src/pkg/TestClashName.java
Normal file
83
testData/src/pkg/TestClashName.java
Normal file
@@ -0,0 +1,83 @@
|
||||
package pkg;
|
||||
|
||||
/*
|
||||
* The names SharedName[123] are shared between variables in local|parent class and class names.
|
||||
* Where approprate, the classes have to be referenced by fully qualified names
|
||||
*/
|
||||
|
||||
class SharedName1 {
|
||||
static int f = 0;
|
||||
|
||||
static int getF() {
|
||||
return f;
|
||||
}
|
||||
}
|
||||
|
||||
class SharedName2 {
|
||||
static int f = 0;
|
||||
}
|
||||
|
||||
class SharedName3 {
|
||||
static int f = 0;
|
||||
}
|
||||
|
||||
class NonSharedName {
|
||||
static int f = 0;
|
||||
|
||||
static int getF() {
|
||||
return f;
|
||||
}
|
||||
}
|
||||
|
||||
@interface SharedName4 {
|
||||
}
|
||||
|
||||
class SharedName5<T>{
|
||||
}
|
||||
|
||||
class TestClashNameParent {
|
||||
|
||||
}
|
||||
|
||||
interface TestClashNameIface {
|
||||
public void f();
|
||||
}
|
||||
// *** Legend for first sentence in comments below:
|
||||
// (+) or (-) indicate whether 'pkg' prefix is or is not required when referencing *SharedName*.
|
||||
// The sign is optionally followed by decompiler class name that generates the line that is being commented
|
||||
// in a call of getShortName()
|
||||
|
||||
@SharedName4 // (-)AnnotationExprent. While a variable named SharedName4 does exist in the annotated class,
|
||||
// lookup process for annotation names never includes variable names.
|
||||
public class TestClashName extends ext.TestClashNameParent implements /*pkg.*/TestClashNameIface { // (+)(-)TextUtil
|
||||
int TestClashNameParent = 0;
|
||||
int TestClashNameIface = 0;
|
||||
int SharedName1 = 0;
|
||||
int SharedName4 = 0;
|
||||
int SharedName5 = 0;
|
||||
|
||||
int i = pkg.SharedName1.f; // (+)FieldExprent. SharedName1 class name is shadowed by a variable in this class
|
||||
int j = NonSharedName.f; // (-)FieldExprent. The NonSharedName is not used for other objects in the current scope
|
||||
int k = SharedName2.f; // (-)FieldExprent. SharedName2 variable is not the current scope
|
||||
int l = pkg.SharedName3.f; // (+)FieldExprent. SharedName3 class name is shadowed by a variable in parent class
|
||||
int m = pkg.SharedName1.getF();// (+)InvocationExprent. SharedName1 class name is shadowed by a variable in this class
|
||||
int n = NonSharedName.getF(); // (-)InvocationExprent. The NonSharedName is not used for other objects in the current scope
|
||||
SharedName1 p = null; // (-)ExprProcessor. While a variable named SharedName1 in current scope does exist,
|
||||
// namespace in type declaration does not include variable names in a scope
|
||||
SharedName5<SharedName1> q = null;//(-)(-)GenericMain (both names). While a variable named SharedName1 does exist in current scope,
|
||||
// lookup for generic parameters never includes variable names
|
||||
|
||||
@SharedName4 // (-)AnnotationExprent. While a variable named SharedName4 does exist in current scope,
|
||||
// lookup process for annotation names never includes variable names.
|
||||
public int m() {
|
||||
int SharedName2 = i;
|
||||
pkg.SharedName1.f = j; // (+)FieldExprent. SharedName1 class name is shadowed by a variable in this class
|
||||
int x = pkg.SharedName2.f; // (+)FieldExprent. SharedName2 class name is shadowed by a variable in this method
|
||||
NonSharedName.f = k; // (-)ExprProcessor. The NonSharedName is not used for other objects in the current scope
|
||||
int y = NonSharedName.f; // (-)FieldExprent. The NonSharedName is not used for other objects in the current scope
|
||||
return SharedName2 + x + y;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void f() {}
|
||||
}
|
||||
20
testData/src/pkg/TestSwitchOnEnum.java
Normal file
20
testData/src/pkg/TestSwitchOnEnum.java
Normal file
@@ -0,0 +1,20 @@
|
||||
package pkg;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* This illustrates a bug in fernflower as of 20170421. Decompiled output of this class does not compile back.
|
||||
*/
|
||||
public class TestSwitchOnEnum {
|
||||
|
||||
int myInt;
|
||||
|
||||
public int testSOE(TimeUnit t) {
|
||||
// This creates anonymous SwitchMap inner class.
|
||||
switch (t) {
|
||||
case SECONDS:
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user