mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
IDEA-93295 Make: removing reference to supertype from subtype does not make client code re-compiled
This commit is contained in:
+14
@@ -0,0 +1,14 @@
|
||||
Cleaning output files:
|
||||
out/production/RemoveExtendsAffectsFieldAccess/GoalSwitch.class
|
||||
End of files
|
||||
Compiling files:
|
||||
src/GoalSwitch.java
|
||||
End of files
|
||||
Cleaning output files:
|
||||
out/production/RemoveExtendsAffectsFieldAccess/FarClient.class
|
||||
out/production/RemoveExtendsAffectsFieldAccess/SwitchProvider.class
|
||||
End of files
|
||||
Compiling files:
|
||||
src/FarClient.java
|
||||
src/SwitchProvider.java
|
||||
End of files
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
public class GoalSwitch {
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
public class FarClient {
|
||||
public void context() {
|
||||
FarGoal goal1 = new SwitchProvider().field;
|
||||
}
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
public class FarGoal {
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
public class GoalSwitch extends FarGoal{
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
public class SwitchProvider {
|
||||
public GoalSwitch field;
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
Cleaning output files:
|
||||
out/production/RemoveExtendsAffectsMethodAccess/GoalSwitch.class
|
||||
End of files
|
||||
Compiling files:
|
||||
src/GoalSwitch.java
|
||||
End of files
|
||||
Cleaning output files:
|
||||
out/production/RemoveExtendsAffectsMethodAccess/FarClient.class
|
||||
out/production/RemoveExtendsAffectsMethodAccess/SwitchProvider.class
|
||||
End of files
|
||||
Compiling files:
|
||||
src/FarClient.java
|
||||
src/SwitchProvider.java
|
||||
End of files
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
public class GoalSwitch {
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
public class FarClient {
|
||||
public void context() {
|
||||
FarGoal goal2 = new SwitchProvider().method();
|
||||
}
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
public class FarGoal {
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
public class GoalSwitch extends FarGoal{
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
public class SwitchProvider {
|
||||
public GoalSwitch method() {
|
||||
return new GoalSwitch();
|
||||
}
|
||||
}
|
||||
@@ -7,9 +7,11 @@ End of files
|
||||
Cleaning output files:
|
||||
out/production/Class2Interface1/Client$1.class
|
||||
out/production/Class2Interface1/Client.class
|
||||
out/production/Class2Interface1/Main.class
|
||||
out/production/Class2Interface1/SubClient.class
|
||||
End of files
|
||||
Compiling files:
|
||||
src/Client.java
|
||||
src/Main.java
|
||||
src/SubClient.java
|
||||
End of files
|
||||
|
||||
+23
@@ -500,6 +500,11 @@ class ClassfileAnalyzer {
|
||||
if (opcode == Opcodes.PUTFIELD || opcode == Opcodes.PUTSTATIC) {
|
||||
myUsages.add(UsageRepr.createFieldAssignUsage(myContext, fieldName, fieldOwner, descr));
|
||||
}
|
||||
|
||||
if (opcode == Opcodes.GETFIELD || opcode == Opcodes.GETSTATIC) {
|
||||
addClassUsage(TypeRepr.getType(myContext, descr));
|
||||
}
|
||||
|
||||
myUsages.add(UsageRepr.createFieldUsage(myContext, fieldName, fieldOwner, descr));
|
||||
super.visitFieldInsn(opcode, owner, name, desc);
|
||||
}
|
||||
@@ -511,9 +516,27 @@ class ClassfileAnalyzer {
|
||||
|
||||
myUsages.add(UsageRepr.createMethodUsage(myContext, methodName, methodOwner, desc));
|
||||
myUsages.add(UsageRepr.createMetaMethodUsage(myContext, methodName, methodOwner, desc));
|
||||
addClassUsage(TypeRepr.getType(myContext, Type.getReturnType(desc)));
|
||||
|
||||
super.visitMethodInsn(opcode, owner, name, desc);
|
||||
}
|
||||
|
||||
private void addClassUsage(final TypeRepr.AbstractType type) {
|
||||
TypeRepr.ClassType classType = null;
|
||||
if (type instanceof TypeRepr.ClassType) {
|
||||
classType = (TypeRepr.ClassType)type;
|
||||
}
|
||||
else if (type instanceof TypeRepr.ArrayType) {
|
||||
final TypeRepr.AbstractType elemType = ((TypeRepr.ArrayType)type).getDeepElementType();
|
||||
if (elemType instanceof TypeRepr.ClassType) {
|
||||
classType = (TypeRepr.ClassType)elemType;
|
||||
}
|
||||
}
|
||||
if (classType != null) {
|
||||
myUsages.add(UsageRepr.createClassUsage(myContext, classType.myClassName));
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,14 @@ public class ClassPropertyTest extends IncrementalTestCase {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testRemoveExtendsAffectsFieldAccess() throws Exception {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testRemoveExtendsAffectsMethodAccess() throws Exception {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testRemoveImplements() throws Exception {
|
||||
doTest();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user