private static void checkNativeFail(final StringBuilder sb, final String modifier) throws InvalidPatternException { if (NATIVE.equals(modifier)) { sb.append("native\\s"); } else if (!NON_NATIVE.equals(modifier)) { throw new InvalidPatternException("Invalid modifier."); } }
start = 2; } else if (tokens[0].length() == 0) { throw new InvalidPatternException("Invalid fully qualified type: leading dot"); sb.append(PatternParser.parseIdentifier(tokens[i])); } catch (final InvalidPatternException ex) { throw new InvalidPatternException("Invalid fully qualified type.", ex); sb.append(PatternParser.parseIdentifier(tokens[length - 1])); } catch (final InvalidPatternException ex) { final InvalidPatternException newEx = new InvalidPatternException("Invalid fully qualified type."); throw (InvalidPatternException) newEx.initCause(ex);
private static final String parseFQType(final String fqType) throws InvalidPatternException { if (fqType.contains("...") || fqType.endsWith(".") || (fqType.length() == 0)) { throw new InvalidPatternException("Invalid fully qualified type."); return PatternParser.parseIdentifier(fqType); } catch (final InvalidPatternException ex) { throw new InvalidPatternException("Invalid fully qualified type.", ex); start = 2; } else if (array[0].length() == 0) { throw new InvalidPatternException("Invalid fully qualified type: leading dot"); sb.append(PatternParser.parseIdentifier(array[i])); } catch (final InvalidPatternException ex) { throw new InvalidPatternException("Invalid fully qualified type.", ex); sb.append(PatternParser.parseIdentifier(array[length - 1])); } catch (final InvalidPatternException ex) { final InvalidPatternException newEx = new InvalidPatternException("Invalid fully qualified type."); throw (InvalidPatternException) newEx.initCause(ex);
private static final String parseMethodName(final String methodName) throws InvalidPatternException { try { return PatternParser.parseIdentifier(methodName); } catch (final InvalidPatternException ex) { throw new InvalidPatternException("Invalid method name.", ex); } }
private static final String parseRetType(final String retType) throws InvalidPatternException { if ("new".equals(retType)) { return ""; } else { try { return PatternParser.parseFQType(retType) + "\\s"; } catch (final InvalidPatternException ex) { throw new InvalidPatternException("Invalid return type.", ex); } } }
private static final String parseMethodName(final String methodName) throws InvalidPatternException { try { return PatternParser.parseIdentifier(methodName); } catch (final InvalidPatternException ex) { throw new InvalidPatternException("Invalid method name.", ex); } }
private static final String parseRetType(final String retType) throws InvalidPatternException { if ("new".equals(retType)) { return ""; } else { try { return PatternParser.parseFQType(retType) + "\\s"; } catch (final InvalidPatternException ex) { throw new InvalidPatternException("Invalid return type.", ex); } } }
private static final String parseIdentifier(final String identifier) throws InvalidPatternException { final char[] array = identifier.toCharArray(); final StringBuilder sb = new StringBuilder(128); if (Character.isJavaIdentifierStart(array[0])) { sb.append(Character.toString(array[0])); } else if (array[0] == '*') { sb.append("(\\p{javaJavaIdentifierPart})*"); } else { throw new InvalidPatternException("Identifier starts with invalid symbol."); } for (int i = 1; i < array.length; i++) { if (Character.isJavaIdentifierPart(array[i])) { sb.append(Character.toString(array[i])); } else if (array[i] == '*') { sb.append("(\\p{javaJavaIdentifierPart})*"); } else { throw new InvalidPatternException("Identifier includes invalid symbol."); } } return sb.toString(); }
private static void onOneModifier(final String[] modifierList, final StringBuilder sb) throws InvalidPatternException { final String[] tokens = { MODIFIER_PUBLIC, MODIFIER_PRIVATE, MODIFIER_PROTECTED, PACKAGE, ABSTRACT, NON_ABSTRACT, STATIC, NON_STATIC, FINAL, NON_FINAL, SYNCHRONIZED, NON_SYNCHRONIZED, NATIVE, NON_NATIVE, }; final String[] outputs = { "public\\s(abstract\\s)?(static\\s)?(final\\s)?(synchronized\\s)?(native\\s)?", "private\\s(abstract\\s)?(static\\s)?(final\\s)?(synchronized\\s)?(native\\s)?", "protected\\s(abstract\\s)?(static\\s)?(final\\s)?(synchronized\\s)?(native\\s)?", "(abstract\\s)?(static\\s)?(final\\s)?(synchronized\\s)?(native\\s)?", "((public|private|protected)\\s)?abstract\\s(static\\s)?(final\\s)?(synchronized\\s)?(native\\s)?", "((public|private|protected)\\s)?(static\\s)?(final\\s)?(synchronized\\s)?(native\\s)?", "((public|private|protected)\\s)?(abstract\\s)?static\\s(final\\s)?(synchronized\\s)?(native\\s)?", "((public|private|protected)\\s)?(abstract\\s)?(final\\s)?(synchronized\\s)?(native\\s)?", "((public|private|protected)\\s)?(abstract\\s)?(static\\s)?final\\s(synchronized\\s)?(native\\s)?", "((public|private|protected)\\s)?(abstract\\s)?(static\\s)?(synchronized\\s)?(native\\s)?", "((public|private|protected)\\s)?(abstract\\s)?(static\\s)?(final\\s)?synchronized\\s(native\\s)?", "((public|private|protected)\\s)?(abstract\\s)?(static\\s)?(final\\s)?(native\\s)?", "((public|private|protected)\\s)?(abstract\\s)?(static\\s)?(final\\s)?(synchronized\\s)?native\\s", "((public|private|protected)\\s)?(abstract\\s)?(static\\s)?(final\\s)?(synchronized\\s)?", }; for (int i = 0; i < tokens.length; i++) { if (tokens[i].equals(modifierList[0])) { sb.append(outputs[i]); return; } } /** no pattern matched, must be an invalid modifier. */ throw new InvalidPatternException("Invalid modifier."); }
private static final String parseIdentifier(final String identifier) throws InvalidPatternException { final char[] array = identifier.toCharArray(); final StringBuilder sb = new StringBuilder(128); if (Character.isJavaIdentifierStart(array[0])) { sb.append(Character.toString(array[0])); } else if (array[0] == '*') { sb.append("(\\p{javaJavaIdentifierPart})*"); } else { throw new InvalidPatternException("Identifier starts with invalid symbol."); } for (int i = 1; i < array.length; i++) { if (Character.isJavaIdentifierPart(array[i])) { sb.append(Character.toString(array[i])); } else if (array[i] == '*') { sb.append("(\\p{javaJavaIdentifierPart})*"); } else { throw new InvalidPatternException("Identifier includes invalid symbol."); } } return sb.toString(); }
private static final String parseFQType(final String fqType) throws InvalidPatternException { if (fqType.contains("...") || fqType.endsWith(".") || (fqType.length() == 0)) { throw new InvalidPatternException("Invalid fully qualified type."); } final String[] tokens = fqType.split("\\."); if (tokens.length == 1) { try { return PatternParser.parseIdentifier(fqType); } catch (final InvalidPatternException ex) { throw new InvalidPatternException("Invalid fully qualified type.", ex); } } else { return PatternParser.parseFQTypeTokenized(tokens); } }
private static String parseThrowsPattern(final String throwsPattern) throws InvalidPatternException { if (null == throwsPattern) { return ""; } else { final String trimThrowsPattern = throwsPattern.trim(); if (!trimThrowsPattern.startsWith("throws")) { throw new InvalidPatternException("Invalid throws pattern."); } final String params = trimThrowsPattern.replaceFirst("throws(\\s+)", ""); final String[] paramList = params.split(","); if ((paramList.length == 1) && "..".equals(paramList[0])) { return "(\\sthrows\\s.*)?"; } try { return "\\sthrows\\s".concat(PatternParser.parseParameterList(paramList)); } catch (final InvalidPatternException ex) { throw new InvalidPatternException("Invalid throws pattern.", ex); } } } }
private static String parseThrowsPattern(final String throwsPattern) throws InvalidPatternException { if (null == throwsPattern) { return ""; } else { final String trimThrowsPattern = throwsPattern.trim(); if (!trimThrowsPattern.startsWith("throws")) { throw new InvalidPatternException("Invalid throws pattern."); } final String params = trimThrowsPattern.replaceFirst("throws(\\s+)", ""); final String[] paramList = params.split(","); if ((paramList.length == 1) && "..".equals(paramList[0])) { return "(\\sthrows\\s.*)?"; } try { return "\\sthrows\\s".concat(PatternParser.parseParameterList(paramList)); } catch (final InvalidPatternException ex) { throw new InvalidPatternException("Invalid throws pattern.", ex); } } } }
private static void onSixModifiers(final String[] modifierList, final StringBuilder sb) throws InvalidPatternException { PatternParser.appendScope(sb, modifierList[0], true); if (ABSTRACT.equals(modifierList[1])) { sb.append("abstract\\s"); } else if (!NON_ABSTRACT.equals(modifierList[1])) { throw new InvalidPatternException("Invalid modifier."); } if (STATIC.equals(modifierList[2])) { sb.append("static\\s"); } else if (!NON_STATIC.equals(modifierList[2])) { throw new InvalidPatternException("Invalid modifier."); } if (FINAL.equals(modifierList[3])) { sb.append("final\\s"); } else if (!NON_FINAL.equals(modifierList[3])) { throw new InvalidPatternException("Invalid modifier."); } if (SYNCHRONIZED.equals(modifierList[4])) { sb.append("synchronized\\s"); } else if (!NON_SYNCHRONIZED.equals(modifierList[4])) { throw new InvalidPatternException("Invalid modifier."); } PatternParser.checkNativeFail(sb, modifierList[5]); }
/** * Create scope modifier query. * * @param signatureRegex * string builder * @param scope * scope string * @param fail * if true do not assume illegal scope is another modifier * @throws InvalidPatternException * on illegal modifier */ private static void appendScope(final StringBuilder signatureRegex, final String scope, final boolean fail) throws InvalidPatternException { if (MODIFIER_PUBLIC.equals(scope)) { signatureRegex.append("public\\s"); } else if (MODIFIER_PRIVATE.equals(scope)) { signatureRegex.append("private\\s"); } else if (MODIFIER_PROTECTED.equals(scope)) { signatureRegex.append("protected\\s"); } else if (!PACKAGE.equals(scope)) { if (fail) { throw new InvalidPatternException("Invalid modifier."); } else { signatureRegex.append("((public|private|protected)\\s)?"); } } }
/** * Create the regular expression part for the given parameter. * * @param regexBuilder * used string builder * @param parameter * the parameter to be processed * @throws InvalidPatternException * on invalid pattern */ private static final void createParameterRegex(final StringBuilder regexBuilder, final String parameter) throws InvalidPatternException { if ("..".equals(parameter)) { regexBuilder.append("(,?((\\s)?" + FULLY_QUALFIED_NAME + "(\\s)?)*"); } else if ("*".equals(parameter)) { regexBuilder.append(",?(\\s)?" + SIMPLE_NAME + "(\\s)?"); } else if (parameter.length() == 0) { throw new InvalidPatternException("Invalid parameter list."); } else { try { regexBuilder.append(",?(\\s)?"); regexBuilder.append(PatternParser.parseFQType(parameter)); regexBuilder.append("(\\s)?"); } catch (final InvalidPatternException ex) { throw new InvalidPatternException("Invalid parameter list.", ex); } } }
throw new InvalidPatternException("Invalid modifier."); throw new InvalidPatternException("Invalid modifier."); throw new InvalidPatternException("Invalid modifier."); throw new InvalidPatternException("Invalid modifier."); throw new InvalidPatternException("Invalid modifier."); throw new InvalidPatternException("Invalid modifier.");
sb.append("((public|private|protected)\\s)?(abstract\\s)?(static\\s)?(final\\s)?(synchronized\\s)?"); } else { throw new InvalidPatternException("Invalid modifier.");
private static final String parseMultipleParameters(final String[] paramList) throws InvalidPatternException { final StringBuilder sb = new StringBuilder(255); final int length = paramList.length; int start = 1; if ("..".equals(paramList[0])) { sb.append("(((\\s)?" + FULLY_QUALFIED_NAME + "(\\s)?,)*"); if (length > 1) { start = 2; PatternParser.createParameterRegex(sb, paramList[1]); } } else if ("*".equals(paramList[0])) { sb.append("(\\s)?(\\p{javaJavaIdentifierPart})+(\\s)?"); } else if (paramList[0].length() == 0) { throw new InvalidPatternException("Invalid parameter list."); } else { try { sb.append("(\\s)?").append(PatternParser.parseFQType(paramList[0])).append("(\\s)?"); } catch (final InvalidPatternException ex) { throw new InvalidPatternException("Invalid parameter list.", ex); } } for (int i = start; i < length; i++) { PatternParser.createParameterRegex(sb, paramList[i]); } return sb.toString(); }
signature.append(' '); } else { throw new InvalidPatternException("return type is requiered"); signature.append('.'); } else { throw new InvalidPatternException("fully qualified name is requiered"); signature.append('('); } else { throw new InvalidPatternException("method name is requiered");