Overriden methods supported in a conservative manner (compile server).

This commit is contained in:
Dmitry Boulytchev
2012-02-11 01:01:23 +04:00
parent e728515599
commit e90b093156
7 changed files with 60 additions and 42 deletions
@@ -5,8 +5,10 @@ Compiling files:
src/Base.java
End of files
Cleaning output files:
out/production/DeleteMethodImplementation4/BaseImpl.class
out/production/DeleteMethodImplementation4/BaseImplImpl.class
End of files
Compiling files:
src/BaseImpl.java
src/BaseImplImpl.java
End of files
@@ -4,3 +4,9 @@ End of files
Compiling files:
src/Base.java
End of files
Cleaning output files:
out/production/DeleteMethodImplementation5/BaseImpl.class
End of files
Compiling files:
src/BaseImpl.java
End of files
@@ -4,3 +4,9 @@ End of files
Compiling files:
src/BaseImpl.java
End of files
Cleaning output files:
out/production/DeleteMethodImplementation6/BaseImplImpl.class
End of files
Compiling files:
src/BaseImplImpl.java
End of files
@@ -72,7 +72,7 @@ public class GenericTest extends IncrementalTestCase {
public void testChangeToCovariantMethodInBase3() throws Exception {
doTest();
}
*/
public void testChangeVarargSignature() throws Exception {
doTest();
}
@@ -80,7 +80,6 @@ public class GenericTest extends IncrementalTestCase {
public void testChangeVarargSignature1() throws Exception {
doTest();
}
*/
public void testCovariance() throws Exception {
doTest();
@@ -114,7 +113,7 @@ public class GenericTest extends IncrementalTestCase {
doTest();
}
/* Not working yet
/* Not working yet */
public void testOverrideAnnotatedAnonymousNotRecompile() throws Exception {
doTest();
}
@@ -122,7 +121,6 @@ public class GenericTest extends IncrementalTestCase {
public void testOverrideAnnotatedInner() throws Exception {
doTest();
}
*/
public void testParamTypes() throws Exception {
doTest();
@@ -177,7 +177,7 @@ public abstract class IncrementalTestCase extends TestCase {
finally {
try {
closeAppender();
delete(new File(workDir));
//delete(new File(workDir));
}
finally {
Logger.setFactory(oldFactory);
@@ -116,11 +116,9 @@ public class MemberChangeTest extends IncrementalTestCase {
doTest();
}
/* Not working yet
public void testDeleteMethodImplementation4() throws Exception {
doTest();
}
*/
public void testDeleteMethodImplementation5() throws Exception {
doTest();
@@ -1103,47 +1103,55 @@ public class Mappings {
}
if ((m.access & Opcodes.ACC_ABSTRACT) == 0) {
final Collection<Pair<MethodRepr, ClassRepr>> overriding = u.findOverridingMethods(m, it, false);
for (final Pair<MethodRepr, ClassRepr> p : overriding) {
final DependencyContext.S fName = myClassToSourceFile.get(p.second.name);
affectedFiles.add(new File(myContext.getValue(fName)));
}
for (DependencyContext.S p : propagated) {
final ClassRepr s = u.reprByName(p);
if (!p.equals(it.name)) {
final ClassRepr s = u.reprByName(p);
if (s != null) {
final Collection<Pair<MethodRepr, ClassRepr>> overridenInS = u.findOverridenMethods(m, s);
if (s != null) {
final Collection<Pair<MethodRepr, ClassRepr>> overridenInS = u.findOverridenMethods(m, s);
overridenInS.addAll(overridenMethods);
overridenInS.addAll(overridenMethods);
boolean allAbstract = true;
boolean visited = false;
boolean allAbstract = true;
boolean visited = false;
for (Pair<MethodRepr, ClassRepr> pp : overridenInS) {
final ClassRepr cc = pp.second;
for (Pair<MethodRepr, ClassRepr> pp : overridenInS) {
final ClassRepr cc = pp.second;
if (cc == myMockClass) {
visited = true;
continue;
}
if (cc.name.equals(it.name)) {
continue;
}
if (cc == myMockClass) {
visited = true;
continue;
allAbstract = ((pp.first.access & Opcodes.ACC_ABSTRACT) > 0) || ((cc.access & Opcodes.ACC_INTERFACE) > 0);
if (!allAbstract) {
break;
}
}
if (cc.name.equals(it.name)) {
continue;
}
if (allAbstract && visited) {
final DependencyContext.S source = myClassToSourceFile.get(p);
visited = true;
allAbstract = ((pp.first.access & Opcodes.ACC_ABSTRACT) > 0) || ((cc.access & Opcodes.ACC_INTERFACE) > 0);
if (!allAbstract) {
break;
}
}
if (allAbstract && visited) {
final DependencyContext.S source = myClassToSourceFile.get(p);
if (source != null) {
final String f = myContext.getValue(source);
debug(
"Removed method is not abstract & is overrides some abstract method which is not then over-overriden in subclass ",
p);
debug("Affecting subclass source file ", f);
affectedFiles.add(new File(f));
if (source != null) {
final String f = myContext.getValue(source);
debug("Removed method is not abstract & overrides some abstract method which is not then over-overriden in subclass ",
p);
debug("Affecting subclass source file ", f);
affectedFiles.add(new File(f));
}
}
}
}
@@ -1597,19 +1605,19 @@ public class Mappings {
for (DependencyContext.S f : delta.getChangedFiles()) {
mySourceFileToClasses.remove(f);
final Collection<ClassRepr> classes = delta.mySourceFileToClasses.get(f);
if (classes != null){
if (classes != null) {
mySourceFileToClasses.put(f, classes);
}
mySourceFileToUsages.remove(f);
final Collection<UsageRepr.Cluster> clusters = delta.mySourceFileToUsages.get(f);
if (clusters != null){
if (clusters != null) {
mySourceFileToUsages.put(f, clusters);
}
mySourceFileToAnnotationUsages.remove(f);
final Collection<UsageRepr.Usage> usages = delta.mySourceFileToAnnotationUsages.get(f);
if (usages != null){
if (usages != null) {
mySourceFileToAnnotationUsages.put(f, usages);
}
}
@@ -1637,7 +1645,7 @@ public class Mappings {
depClasses.retainAll(changedClasses);
if (! classChanged && depClasses.isEmpty()) {
if (!classChanged && depClasses.isEmpty()) {
continue;
}
}