/**
* OpenAtlasForAndroid Project
* The MIT License (MIT) Copyright (OpenAtlasForAndroid) 2015 Bunny Blue,achellies
* <p>
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
* and associated documentation files (the "Software"), to deal in the Software
* without restriction, including without limitation the rights to use, copy, modify,
* merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to the following conditions:
* <p>
* The above copyright notice and this permission notice shall be included in all copies
* or substantial portions of the Software.
* <p>
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
* FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* @author BunnyBlue
**/
package com.openatlas.hack;
import com.openatlas.hack.Hack.HackDeclaration.HackAssertionException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
/*
* custom exception class used for code hack exception
* ***/
public class AssertionArrayException extends Exception {
private static final long serialVersionUID = 1;
private List<HackAssertionException> mAssertionErr;
public AssertionArrayException(String message) {
super(message);
this.mAssertionErr = new ArrayList<HackAssertionException>();
}
public void addException(HackAssertionException hackAssertionException) {
this.mAssertionErr.add(hackAssertionException);
}
public void addException(List<HackAssertionException> list) {
this.mAssertionErr.addAll(list);
}
public List<HackAssertionException> getExceptions() {
return this.mAssertionErr;
}
// public static AssertionArrayException mergeException(
// AssertionArrayException assertionArrayException,
// AssertionArrayException assertionArrayException2) {
// if (assertionArrayException == null) {
// return assertionArrayException2;
// }
// if (assertionArrayException2 == null) {
// return assertionArrayException;
// }
// AssertionArrayException assertionArrayException3 = new AssertionArrayException(
// assertionArrayException.getMessage() + ";"
// + assertionArrayException2.getMessage());
// assertionArrayException3.addException(assertionArrayException
// .getExceptions());
// assertionArrayException3.addException(assertionArrayException2
// .getExceptions());
// return assertionArrayException3;
// }
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder();
for (HackAssertionException hackAssertionException : this.mAssertionErr) {
stringBuilder.append(hackAssertionException.toString()).append(";");
try {
if (hackAssertionException.getCause() instanceof NoSuchFieldException) {
Field[] declaredFields = hackAssertionException
.getHackedClass().getDeclaredFields();
stringBuilder
.append(hackAssertionException.getHackedClass()
.getName())
.append(".")
.append(hackAssertionException.getHackedFieldName())
.append(";");
for (Field name : declaredFields) {
stringBuilder.append(name.getName()).append("/");
}
} else if (hackAssertionException.getCause() instanceof NoSuchMethodException) {
Method[] declaredMethods = hackAssertionException
.getHackedClass().getDeclaredMethods();
stringBuilder
.append(hackAssertionException.getHackedClass()
.getName())
.append("->")
.append(hackAssertionException
.getHackedMethodName()).append(";");
for (int i = 0; i < declaredMethods.length; i++) {
if (hackAssertionException.getHackedMethodName()
.equals(declaredMethods[i].getName())) {
stringBuilder.append(
declaredMethods[i].toGenericString())
.append("/");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
stringBuilder.append("@@@@");
}
return stringBuilder.toString();
}
}