mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
affect usages of a method if its exception list contains exception classes with changed hierarchy
GitOrigin-RevId: 6af9d4a8e0da3b7761497783e5f1fb3f9c1f4c4a
This commit is contained in:
committed by
intellij-monorepo-bot
parent
9b915de231
commit
f7c4093fbe
+14
@@ -0,0 +1,14 @@
|
||||
Cleaning output files:
|
||||
out/production/ConvertToCheckedException/ppp/SomeException.class
|
||||
End of files
|
||||
Compiling files:
|
||||
src/ppp/SomeException.java
|
||||
End of files
|
||||
Cleaning output files:
|
||||
out/production/ConvertToCheckedException/ppp/Client.class
|
||||
out/production/ConvertToCheckedException/ppp/Task.class
|
||||
End of files
|
||||
Compiling files:
|
||||
src/ppp/Client.java
|
||||
src/ppp/Task.java
|
||||
End of files
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package ppp;
|
||||
|
||||
public class Client {
|
||||
public void foo(Task task) {
|
||||
try {
|
||||
task.execute();
|
||||
}
|
||||
catch (RuntimeException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
package ppp;
|
||||
|
||||
public class SomeException extends RuntimeException{
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
package ppp;
|
||||
|
||||
public class SomeException extends Exception{
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package ppp;
|
||||
|
||||
public class Task {
|
||||
public void execute() throws SomeException{
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -111,21 +111,21 @@ class DependencyContext implements NamingContext {
|
||||
|
||||
@Override
|
||||
public void debug(String comment, Integer s) {
|
||||
if (log.isDebugEnabled()) {
|
||||
if (isDebugEnabled()) {
|
||||
log.debug(comment + getValue(s));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debug(String comment, String t) {
|
||||
if (log.isDebugEnabled()){
|
||||
if (isDebugEnabled()){
|
||||
log.debug(comment + t);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debug(String comment, boolean t) {
|
||||
if (log.isDebugEnabled()) {
|
||||
if (isDebugEnabled()) {
|
||||
log.debug(comment + t);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -309,12 +309,17 @@ public class Mappings {
|
||||
myMappings = mappings;
|
||||
}
|
||||
|
||||
void appendDependents(final ClassFileRepr c, final TIntHashSet result) {
|
||||
final TIntHashSet depClasses = myClassToClassDependency.get(c.name);
|
||||
TIntHashSet appendDependents(final ClassFileRepr c, final TIntHashSet result) {
|
||||
return appendDependents(c.name, result);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
TIntHashSet appendDependents(int className, TIntHashSet result) {
|
||||
final TIntHashSet depClasses = myClassToClassDependency.get(className);
|
||||
if (depClasses != null) {
|
||||
addAll(result, depClasses);
|
||||
}
|
||||
return depClasses;
|
||||
}
|
||||
|
||||
void propagateMemberAccessRec(final TIntHashSet acc, final boolean isField, final boolean root, final MemberComparator comparator, final int reflcass) {
|
||||
@@ -687,10 +692,7 @@ public class Mappings {
|
||||
}
|
||||
}
|
||||
|
||||
final TIntHashSet depClasses = myClassToClassDependency.get(className);
|
||||
if (depClasses != null) {
|
||||
addAll(dependants, depClasses);
|
||||
}
|
||||
appendDependents(className, dependants);
|
||||
|
||||
final TIntHashSet directSubclasses = myClassToSubclasses.get(className);
|
||||
if (directSubclasses != null) {
|
||||
@@ -712,10 +714,7 @@ public class Mappings {
|
||||
affectedUsages.add(rootUsage);
|
||||
|
||||
classes.forEach(p -> {
|
||||
final TIntHashSet deps = myClassToClassDependency.get(p);
|
||||
if (deps != null) {
|
||||
addAll(dependents, deps);
|
||||
}
|
||||
appendDependents(p, dependents);
|
||||
debug("Affect field usage referenced of class ", p);
|
||||
affectedUsages.add(rootUsage instanceof UsageRepr.FieldAssignUsage ? field.createAssignUsage(myContext, p) : field.createUsage(myContext, p));
|
||||
return true;
|
||||
@@ -727,10 +726,7 @@ public class Mappings {
|
||||
affectedUsages.add(UsageRepr.createImportStaticMemberUsage(myContext, memberName, ownerName));
|
||||
|
||||
classes.forEach(cls -> {
|
||||
final TIntHashSet deps = myClassToClassDependency.get(cls);
|
||||
if (deps != null) {
|
||||
addAll(dependents, deps);
|
||||
}
|
||||
appendDependents(cls, dependents);
|
||||
debug("Affect static member import usage referenced of class ", cls);
|
||||
affectedUsages.add(UsageRepr.createImportStaticMemberUsage(myContext, memberName, cls));
|
||||
return true;
|
||||
@@ -742,24 +738,34 @@ public class Mappings {
|
||||
affectedUsages.add(UsageRepr.createImportStaticOnDemandUsage(myContext, ownerClass));
|
||||
|
||||
classes.forEach(cls -> {
|
||||
final TIntHashSet deps = myClassToClassDependency.get(cls);
|
||||
if (deps != null) {
|
||||
addAll(dependents, deps);
|
||||
}
|
||||
appendDependents(cls, dependents);
|
||||
debug("Affect static member on-demand import usage referenced of class ", cls);
|
||||
affectedUsages.add(UsageRepr.createImportStaticOnDemandUsage(myContext, cls));
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
void affectMethodUsagesThrowing(ClassRepr aClass, TypeRepr.ClassType exceptionClass, final Set<? super UsageRepr.Usage> affectedUsages, final TIntHashSet dependents) {
|
||||
boolean shouldAffect = false;
|
||||
for (MethodRepr method : aClass.getMethods()) {
|
||||
if (method.myExceptions.contains(exceptionClass)) {
|
||||
shouldAffect = true;
|
||||
affectedUsages.add(method.createUsage(myContext, aClass.name));
|
||||
}
|
||||
}
|
||||
if (shouldAffect) {
|
||||
if (myDebugS.isDebugEnabled()) {
|
||||
debug("Affecting usages of methods throwing "+ myContext.getValue(exceptionClass.className) + " exception; class ", aClass.name);
|
||||
}
|
||||
appendDependents(aClass, dependents);
|
||||
}
|
||||
}
|
||||
|
||||
void affectMethodUsages(final MethodRepr method, final TIntHashSet subclasses, final UsageRepr.Usage rootUsage, final Set<? super UsageRepr.Usage> affectedUsages, final TIntHashSet dependents) {
|
||||
affectedUsages.add(rootUsage);
|
||||
if (subclasses != null) {
|
||||
subclasses.forEach(p -> {
|
||||
final TIntHashSet deps = myClassToClassDependency.get(p);
|
||||
if (deps != null) {
|
||||
addAll(dependents, deps);
|
||||
}
|
||||
appendDependents(p, dependents);
|
||||
|
||||
debug("Affect method usage referenced of class ", p);
|
||||
|
||||
@@ -1225,12 +1231,7 @@ public class Mappings {
|
||||
final TIntHashSet yetPropagated = myPresent.propagateMethodAccess(method, it.name);
|
||||
|
||||
if (isInheritor) {
|
||||
final TIntHashSet deps = myClassToClassDependency.get(methodClass.name);
|
||||
|
||||
if (deps != null) {
|
||||
addAll(state.myDependants, deps);
|
||||
}
|
||||
|
||||
myPresent.appendDependents(methodClass, state.myDependants);
|
||||
myFuture.affectMethodUsages(method, yetPropagated, method.createUsage(myContext, methodClass.name), state.myAffectedUsages, state.myDependants);
|
||||
}
|
||||
|
||||
@@ -1590,12 +1591,8 @@ public class Mappings {
|
||||
if (f.isStatic()) {
|
||||
myFuture.affectStaticMemberOnDemandUsages(subClass, propagated, state.myAffectedUsages, state.myDependants);
|
||||
}
|
||||
myFuture.appendDependents(subClass, state.myDependants);
|
||||
|
||||
final TIntHashSet deps = myClassToClassDependency.get(subClass);
|
||||
|
||||
if (deps != null) {
|
||||
addAll(state.myDependants, deps);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
@@ -1861,7 +1858,7 @@ public class Mappings {
|
||||
continue;
|
||||
}
|
||||
|
||||
myPresent.appendDependents(changedClass, state.myDependants);
|
||||
final TIntHashSet directDeps = myPresent.appendDependents(changedClass, state.myDependants);
|
||||
|
||||
if (superClassChanged || interfacesChanged || signatureChanged) {
|
||||
debug("Superclass changed: ", superClassChanged);
|
||||
@@ -1876,6 +1873,17 @@ public class Mappings {
|
||||
|
||||
myFuture.affectSubclasses(changedClass.name, myAffectedFiles, state.myAffectedUsages, state.myDependants, extendsChanged || interfacesRemoved || signatureChanged, myCompiledFiles, null);
|
||||
|
||||
if (extendsChanged && directDeps != null) {
|
||||
final TypeRepr.ClassType excClass = TypeRepr.createClassType(myContext, changedClass.name);
|
||||
directDeps.forEach(depClass -> {
|
||||
final ClassRepr depClassRepr = myPresent.classReprByName(depClass);
|
||||
if (depClassRepr != null) {
|
||||
myPresent.affectMethodUsagesThrowing(depClassRepr, excClass, state.myAffectedUsages, state.myDependants);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
if (!changedClass.isAnonymous()) {
|
||||
final TIntHashSet parents = new TIntHashSet();
|
||||
myPresent.collectSupersRecursively(changedClass.name, parents);
|
||||
@@ -1892,10 +1900,7 @@ public class Mappings {
|
||||
state.myUsageConstraints.put(usage, fileFilterConstraint);
|
||||
}
|
||||
|
||||
final TIntHashSet depClasses = myClassToClassDependency.get(className);
|
||||
if (depClasses != null) {
|
||||
addAll(state.myDependants, depClasses);
|
||||
}
|
||||
myPresent.appendDependents(className, state.myDependants);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -62,4 +62,8 @@ public class ClassPropertyTest extends IncrementalTestCase {
|
||||
public void testChangeExtends2() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testConvertToCheckedException() {
|
||||
doTest();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user