public static <T> T first(final Iterable<T> collection) { if (collection instanceof List<?>) { return first((List<T>) collection); } final Iterator<T> it = VerifyArgument.notNull(collection, "collection").iterator(); if (it.hasNext()) { return it.next(); } throw Error.sequenceHasNoElements(); }
public static <T> T first(final Iterable<T> collection) { if (collection instanceof List<?>) { return first((List<T>) collection); } final Iterator<T> it = VerifyArgument.notNull(collection, "collection").iterator(); if (it.hasNext()) { return it.next(); } throw Error.sequenceHasNoElements(); }
public static <T> T first(final Iterable<T> collection) { if (collection instanceof List<?>) { return first((List<T>) collection); } final Iterator<T> it = VerifyArgument.notNull(collection, "collection").iterator(); if (it.hasNext()) { return it.next(); } throw Error.sequenceHasNoElements(); }
private TypeReference mergeVariableType(final List<VariableInfo> info) { TypeReference result = first(info).variable.getType(); for (int i = 0; i < info.size(); i++) { final VariableInfo variableInfo = info.get(i); final TypeReference t = variableInfo.variable.getType(); if (result == BuiltinTypes.Null) { result = t; } else if (t == BuiltinTypes.Null) { //noinspection UnnecessaryContinue continue; } else { result = MetadataHelper.findCommonSuperType(result, t); } } return result != null ? result : BuiltinTypes.Object; }
private TypeReference mergeVariableType(final List<VariableInfo> info) { TypeReference result = first(info).variable.getType(); for (int i = 0; i < info.size(); i++) { final VariableInfo variableInfo = info.get(i); final TypeReference t = variableInfo.variable.getType(); if (result == BuiltinTypes.Null) { result = t; } else if (t == BuiltinTypes.Null) { //noinspection UnnecessaryContinue continue; } else { result = MetadataHelper.findCommonSuperType(result, t); } } return result != null ? result : BuiltinTypes.Object; }
private TypeReference mergeVariableType(final List<VariableInfo> info) { TypeReference result = first(info).variable.getType(); for (int i = 0; i < info.size(); i++) { final VariableInfo variableInfo = info.get(i); final TypeReference t = variableInfo.variable.getType(); if (result == BuiltinTypes.Null) { result = t; } else if (t == BuiltinTypes.Null) { //noinspection UnnecessaryContinue continue; } else { result = MetadataHelper.findCommonSuperType(result, t); } } return result != null ? result : BuiltinTypes.Object; }
@Override public TypeReference visitCompoundType(final CompoundTypeReference t, final Boolean recurse) { final TypeReference baseType = t.getBaseType(); return erase(baseType != null ? baseType : first(t.getInterfaces()), recurse); }
@Override public TypeReference visitCompoundType(final CompoundTypeReference t, final Boolean recurse) { final TypeReference baseType = t.getBaseType(); return erase(baseType != null ? baseType : first(t.getInterfaces()), recurse); }
@Override public TypeReference visitCompoundType(final CompoundTypeReference t, final Boolean recurse) { final TypeReference baseType = t.getBaseType(); return erase(baseType != null ? baseType : first(t.getInterfaces()), recurse); }
@Override public Void visitMethodDeclaration(final MethodDeclaration node, final Void p) { final MethodDefinition methodDefinition = node.getUserData(Keys.METHOD_DEFINITION); if (isSwitchMapMethod(methodDefinition)) { final Match m = SWITCH_TABLE_METHOD_BODY.match(node.getBody()); if (m.success()) { final MemberReferenceExpression fieldAccess = first(m.<MemberReferenceExpression>get("fieldAccess")); final FieldReference field = (FieldReference) fieldAccess.getUserData(Keys.MEMBER_REFERENCE); final List<MemberReferenceExpression> enumValues = toList(m.<MemberReferenceExpression>get("enumValue")); final List<PrimitiveExpression> tableValues = toList(m.<PrimitiveExpression>get("tableValue")); assert field != null && tableValues.size() == enumValues.size(); final String key = makeKey(field); SwitchMapInfo info = _switchMaps.get(key); if (info == null) { _switchMaps.put(key, info = new SwitchMapInfo(field)); } info.switchMapMethodDeclaration = node; for (int i = 0; i < enumValues.size(); i++) { final MemberReferenceExpression memberReference = enumValues.get(i); final IdentifierExpression identifier = new IdentifierExpression( Expression.MYSTERY_OFFSET, memberReference.getMemberName()); identifier.putUserData(Keys.MEMBER_REFERENCE, memberReference.getUserData(Keys.MEMBER_REFERENCE)); info.mappings.put((Integer) tableValues.get(i).getValue(), identifier); } } } return super.visitMethodDeclaration(node, p); }
@Override public Void visitMethodDeclaration(final MethodDeclaration node, final Void _) { final MethodDefinition methodDefinition = node.getUserData(Keys.METHOD_DEFINITION); if (isSwitchMapMethod(methodDefinition)) { final Match m = SWITCH_TABLE_METHOD_BODY.match(node.getBody()); if (m.success()) { final MemberReferenceExpression fieldAccess = first(m.<MemberReferenceExpression>get("fieldAccess")); final FieldReference field = (FieldReference) fieldAccess.getUserData(Keys.MEMBER_REFERENCE); final List<MemberReferenceExpression> enumValues = toList(m.<MemberReferenceExpression>get("enumValue")); final List<PrimitiveExpression> tableValues = toList(m.<PrimitiveExpression>get("tableValue")); assert field != null && tableValues.size() == enumValues.size(); final String key = makeKey(field); SwitchMapInfo info = _switchMaps.get(key); if (info == null) { _switchMaps.put(key, info = new SwitchMapInfo(field)); } info.switchMapMethodDeclaration = node; for (int i = 0; i < enumValues.size(); i++) { final MemberReferenceExpression memberReference = enumValues.get(i); final IdentifierExpression identifier = new IdentifierExpression( Expression.MYSTERY_OFFSET, memberReference.getMemberName()); identifier.putUserData(Keys.MEMBER_REFERENCE, memberReference.getUserData(Keys.MEMBER_REFERENCE)); info.mappings.put((Integer) tableValues.get(i).getValue(), identifier); } } } return super.visitMethodDeclaration(node, _); }
protected Object resolveName(final AstNode location, final String name, final NameResolveMode mode) { if (location == null || location.isNull() || name == null) { return null; } final NameResolveResult result; if (mode == NameResolveMode.TYPE) { result = JavaNameResolver.resolveAsType(name, location); } else { result = JavaNameResolver.resolve(name, location); } if (result.hasMatch() && !result.isAmbiguous()) { return first(result.getCandidates()); } return null; } }
protected Object resolveName(final AstNode location, final String name, final NameResolveMode mode) { if (location == null || location.isNull() || name == null) { return null; } final NameResolveResult result; if (mode == NameResolveMode.TYPE) { result = JavaNameResolver.resolveAsType(name, location); } else { result = JavaNameResolver.resolve(name, location); } if (result.hasMatch() && !result.isAmbiguous()) { return first(result.getCandidates()); } return null; } }
@Override public Void visitMethodDeclaration(final MethodDeclaration node, final Void _) { final MethodDefinition methodDefinition = node.getUserData(Keys.METHOD_DEFINITION); if (isSwitchMapMethod(methodDefinition)) { final Match m = SWITCH_TABLE_METHOD_BODY.match(node.getBody()); if (m.success()) { final MemberReferenceExpression fieldAccess = first(m.<MemberReferenceExpression>get("fieldAccess")); final FieldReference field = (FieldReference) fieldAccess.getUserData(Keys.MEMBER_REFERENCE); final List<MemberReferenceExpression> enumValues = toList(m.<MemberReferenceExpression>get("enumValue")); final List<PrimitiveExpression> tableValues = toList(m.<PrimitiveExpression>get("tableValue")); assert field != null && tableValues.size() == enumValues.size(); final String key = makeKey(field); SwitchMapInfo info = _switchMaps.get(key); if (info == null) { _switchMaps.put(key, info = new SwitchMapInfo(field)); } info.switchMapMethodDeclaration = node; for (int i = 0; i < enumValues.size(); i++) { final MemberReferenceExpression memberReference = enumValues.get(i); final IdentifierExpression identifier = new IdentifierExpression( Expression.MYSTERY_OFFSET, memberReference.getMemberName()); identifier.putUserData(Keys.MEMBER_REFERENCE, memberReference.getUserData(Keys.MEMBER_REFERENCE)); info.mappings.put((Integer) tableValues.get(i).getValue(), identifier); } } } return super.visitMethodDeclaration(node, _); }
protected Object resolveName(final AstNode location, final String name, final NameResolveMode mode) { if (location == null || location.isNull() || name == null) { return null; } final NameResolveResult result; if (mode == NameResolveMode.TYPE) { result = JavaNameResolver.resolveAsType(name, location); } else { result = JavaNameResolver.resolve(name, location); } if (result.hasMatch() && !result.isAmbiguous()) { return first(result.getCandidates()); } return null; } }
@Override public Void visitExpressionStatement(final ExpressionStatement node, final Void data) { super.visitExpressionStatement(node, data); // // Remove `super()`-style invocations within constructors, but only if they actually // bind to a constructor. Keep calls to potentially obfuscated methods named 'super'. // if (inConstructor() && !context.getSettings().getShowSyntheticMembers()) { final Match match = EMPTY_SUPER.match(node); if (match.success()) { final AstNode target = first(match.<AstNode>get("target")); final MemberReference member = target.getUserData(Keys.MEMBER_REFERENCE); if (member instanceof MethodReference && ((MethodReference) member).isConstructor()) { node.remove(); } } } return null; } }
final InvocationExpression switchMapMethodCall = first(m.<InvocationExpression>get("switchMapMethodCall")); final MethodReference switchMapMethod = (MethodReference) switchMapMethodCall.getUserData(Keys.MEMBER_REFERENCE);
final InvocationExpression switchMapMethodCall = first(m.<InvocationExpression>get("switchMapMethodCall")); final MethodReference switchMapMethod = (MethodReference) switchMapMethodCall.getUserData(Keys.MEMBER_REFERENCE);
final Expression field = first(m.<IdentifierExpression>get("$assertionsDisabled")); final ClassOfExpression type = m.<ClassOfExpression>get("type").iterator().next(); final MemberReference reference = field.getUserData(Keys.MEMBER_REFERENCE);
final Expression field = first(m.<IdentifierExpression>get("$assertionsDisabled")); final ClassOfExpression type = m.<ClassOfExpression>get("type").iterator().next(); final MemberReference reference = field.getUserData(Keys.MEMBER_REFERENCE);