aboutsummaryrefslogtreecommitdiffstats
path: root/org.aspectj.matcher/src/main
diff options
context:
space:
mode:
authorAlexander Kriegisch <Alexander@Kriegisch.name>2023-01-09 18:03:50 +0100
committerAlexander Kriegisch <Alexander@Kriegisch.name>2023-01-15 14:41:51 +0100
commit6e79467e0a24c9e903d0d06948615b6fe9250efa (patch)
tree68bdea953bbd3f30895ef4d1072c40fdc35cd017 /org.aspectj.matcher/src/main
parenta0bcb6ba4b4b81eef4fc95d949cd81538b17aa8f (diff)
downloadaspectj-6e79467e0a24c9e903d0d06948615b6fe9250efa.tar.gz
aspectj-6e79467e0a24c9e903d0d06948615b6fe9250efa.zip
Handle one- and multi-dimensional array return types correctly
Fixes https://github.com/eclipse/org.aspectj/issues/24, both the array return type matching as such as well as matching dimensionality patterns correctly. E.g., 'Foo*[]' is not the same as 'Foo*[][]'. This also works correctly in combination with asterisks, even for primitive types, i.e. 'in*[][]' correctly matches a 2-dimensional array of 'int'. Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Diffstat (limited to 'org.aspectj.matcher/src/main')
-rw-r--r--org.aspectj.matcher/src/main/java/org/aspectj/weaver/UnresolvedType.java12
-rw-r--r--org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/ExactTypePattern.java10
-rw-r--r--org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/SignaturePattern.java3
-rw-r--r--org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/TypePattern.java11
-rw-r--r--org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/WildTypePattern.java3
5 files changed, 33 insertions, 6 deletions
diff --git a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/UnresolvedType.java b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/UnresolvedType.java
index 16e3b9879..d0611868f 100644
--- a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/UnresolvedType.java
+++ b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/UnresolvedType.java
@@ -161,6 +161,10 @@ public class UnresolvedType implements Traceable, TypeVariableDeclaringElement {
return signature.length() > 0 && signature.charAt(0) == '[';
}
+ public final int getDimensions() {
+ return signature.replaceAll("^(\\[*).*", "$1").length();
+ }
+
/**
* Equality is checked based on the underlying signature.
*/
@@ -169,7 +173,8 @@ public class UnresolvedType implements Traceable, TypeVariableDeclaringElement {
if (!(other instanceof UnresolvedType)) {
return false;
}
- return signature.equals(((UnresolvedType) other).signature);
+ final UnresolvedType unresolvedOther = (UnresolvedType) other;
+ return signature.equals(unresolvedOther.signature) && getDimensions() == unresolvedOther.getDimensions();
}
/**
@@ -178,7 +183,10 @@ public class UnresolvedType implements Traceable, TypeVariableDeclaringElement {
*/
@Override
public int hashCode() {
- return signature.hashCode();
+ int result = 17;
+ result = 37 * result + signature.hashCode();
+ result = 37 * result + getDimensions();
+ return result;
}
protected UnresolvedType(String signature) {
diff --git a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/ExactTypePattern.java b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/ExactTypePattern.java
index bedbc4732..9cd6ef6e2 100644
--- a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/ExactTypePattern.java
+++ b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/ExactTypePattern.java
@@ -95,6 +95,10 @@ public class ExactTypePattern extends TypePattern {
return type.isArray();
}
+ public int getDimensions() {
+ return type.getDimensions();
+ }
+
/*
* (non-Javadoc)
*
@@ -122,6 +126,9 @@ public class ExactTypePattern extends TypePattern {
@Override
protected boolean matchesExactly(ResolvedType matchType) {
+ if (!matchesArray(matchType)) {
+ return false;
+ }
boolean typeMatch = this.type.equals(matchType);
if (!typeMatch && (matchType.isParameterizedType() || matchType.isGenericType())) {
typeMatch = this.type.equals(matchType.getRawType());
@@ -150,6 +157,9 @@ public class ExactTypePattern extends TypePattern {
@Override
protected boolean matchesExactly(ResolvedType matchType, ResolvedType annotatedType) {
+ if (!matchesArray(matchType)) {
+ return false;
+ }
boolean typeMatch = this.type.equals(matchType);
if (!typeMatch && (matchType.isParameterizedType() || matchType.isGenericType())) {
typeMatch = this.type.equals(matchType.getRawType());
diff --git a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/SignaturePattern.java b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/SignaturePattern.java
index 250d125b8..5b2e021c1 100644
--- a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/SignaturePattern.java
+++ b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/SignaturePattern.java
@@ -465,6 +465,9 @@ public class SignaturePattern extends PatternNode implements ISignaturePattern {
* Matches on name, declaring type, return type, parameter types, throws types
*/
private FuzzyBoolean matchesExactlyMethod(JoinPointSignature aMethod, World world, boolean subjectMatch) {
+ if (aMethod.getReturnType().getDimensions() != returnType.getDimensions()) {
+ return FuzzyBoolean.NO;
+ }
if (parametersCannotMatch(aMethod)) {
// System.err.println("Parameter types pattern " + parameterTypes + " pcount: " + aMethod.getParameterTypes().length);
return FuzzyBoolean.NO;
diff --git a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/TypePattern.java b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/TypePattern.java
index 8deea5abf..8554e28a1 100644
--- a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/TypePattern.java
+++ b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/TypePattern.java
@@ -90,6 +90,10 @@ public abstract class TypePattern extends PatternNode {
return false;
}
+ public int getDimensions() {
+ return 0;
+ }
+
protected TypePattern(boolean includeSubtypes) {
this(includeSubtypes, false);
}
@@ -159,6 +163,10 @@ public abstract class TypePattern extends PatternNode {
protected abstract boolean matchesExactly(ResolvedType type, ResolvedType annotatedType);
+ protected boolean matchesArray(ResolvedType type) {
+ return type.getDimensions() == getDimensions();
+ }
+
protected boolean matchesSubtypes(ResolvedType type) {
// System.out.println("matching: " + this + " to " + type);
if (matchesExactly(type)) {
@@ -355,6 +363,3 @@ public abstract class TypePattern extends PatternNode {
}
}
-
-
-
diff --git a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/WildTypePattern.java b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/WildTypePattern.java
index 37653a9cc..512b72b26 100644
--- a/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/WildTypePattern.java
+++ b/org.aspectj.matcher/src/main/java/org/aspectj/weaver/patterns/WildTypePattern.java
@@ -234,6 +234,7 @@ public class WildTypePattern extends TypePattern {
annotationPattern.resolve(type.getWorld());
return matchesExactlyByName(targetTypeName, type.isAnonymous(), type.isNested()) && matchesParameters(type, STATIC)
+ && matchesArray(type)
&& matchesBounds(type, STATIC)
&& annotationPattern.matches(annotatedType, type.temporaryAnnotationTypes).alwaysTrue();
}
@@ -368,7 +369,7 @@ public class WildTypePattern extends TypePattern {
}
}
- return innerMatchesExactly(targetTypeName, isAnonymous, isNested);
+ return innerMatchesExactly(targetTypeName.substring(0, targetTypeName.length() - dim * 2), isAnonymous, isNested);
}
private int lastIndexOfDotOrDollar(String string) {
Nextcloud server, a safe home for all your data: https://github.com/nextcloud/serverwww-data
summaryrefslogtreecommitdiffstats
path: root/apps/files/l10n/es_MX.js
blob: d04c8c5b39d3d4d9e4b3392c18d539f4a6bb2995 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
OC.L10N.register(
    "files",
    {
    "Storage is temporarily not available" : "El almacenamiento no está disponible temporalmente ",
    "Storage invalid" : "El almacenamiento es inválido",
    "Unknown error" : "Se presentó un error desconocido",
    "All files" : "Todos los archivos",
    "Recent" : "Reciente",
    "File could not be found" : "No fue posible encontrar el archivo",
    "Home" : "Inicio",
    "Close" : "Cerrar",
    "Favorites" : "Favoritos",
    "Could not create folder \"{dir}\"" : "No fue posible crear la carpeta \"{dir}\"",
    "Upload cancelled." : "Carga cancelada.",
    "Unable to upload {filename} as it is a directory or has 0 bytes" : "No fue posible cargar {filename} ya que es una carpeta o tiene un tamaño de 0 bytes",
    "Not enough free space, you are uploading {size1} but only {size2} is left" : "No tienes suficiente espacio disponible, Estas cargando {size1} pero sólo cuentas con {size2} disponible",
    "Target folder \"{dir}\" does not exist any more" : "La carpeta destino \"{dir}\" ya no existe",
    "Not enough free space" : "No cuentas con suficiente espacio libre",
    "Uploading …" : "Cargando ...",
    "…" : "...",
    "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})",
    "Actions" : "Acciones",
    "Download" : "Descargar",
    "Rename" : "Renombrar",
    "Move or copy" : "Mover o copiar",
    "Target folder" : "Carpeta destino",
    "Delete" : "Borrar",
    "Disconnect storage" : "Desconectar almacenamiento",
    "Unshare" : "Dejar de compartir",
    "Could not load info for file \"{file}\"" : "No fue posible cargar información para el archivo \"{file}\"",
    "Files" : "Archivos",
    "Details" : "Detalles",
    "Select" : "Seleccionar",
    "Pending" : "Pendiente",
    "Unable to determine date" : "No fue posible determinar la fecha",
    "This operation is forbidden" : "Esta operación está prohibida",
    "This directory is unavailable, please check the logs or contact the administrator" : "Esta carpeta no está disponible, por favor verfica las bitácoras o contacta al administrador",
    "Could not move \"{file}\", target exists" : "No fue posible mover \"{file}\", el destino ya existe",
    "Could not move \"{file}\"" : "No fue posible mover \"{file}\"",
    "Could not copy \"{file}\", target exists" : "No se pudo copiar \"{file}\", el destino ya existe",
    "Could not copy \"{file}\"" : "No se pudo copiar \"{file}\"",
    "Copied {origin} inside {destination}" : "{origin} fue copiado dentro de {destination}",
    "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} y otros {nbfiles} archivos fueron copiados dentro de {destination}",
    "{newName} already exists" : "{newName} ya existe",
    "Could not rename \"{fileName}\", it does not exist any more" : "No fue posible renombrar \"{fileName}\", ya no existe",
    "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "El nombre \"{targetName}\" ya está en uso en la carpeta \"{dir}\". Por favor elege un nombre diferete. ",
    "Could not rename \"{fileName}\"" : "No fue posible renombrar \"{fileName}\"",
    "Could not create file \"{file}\"" : "No fue posible crear el archivo \"{file}\"",
    "Could not create file \"{file}\" because it already exists" : "No fue posible crear el archivo\"{file}\" porque ya existe",
    "Could not create folder \"{dir}\" because it already exists" : "No fue posible crear la carpeta \"{dir}\" porque ya existe",
    "Error deleting file \"{fileName}\"." : "Se presentó un error al borrar el archivo \"{fileName}\".",
    "No search results in other folders for {tag}{filter}{endtag}" : "No se encontraron resultados en otras carpetas para  {tag}{filter}{endtag}",
    "Name" : "Nombre",
    "Size" : "Tamaño",
    "Modified" : "Modificado",
    "_%n folder_::_%n folders_" : ["%n carpeta","%n carpetas"],
    "_%n file_::_%n files_" : ["%n archivo","%n archivos"],
    "{dirs} and {files}" : "{dirs} y {files}",
    "_including %n hidden_::_including %n hidden_" : ["incluyendo %n escondido","incluyendo %n ocultos"],
    "You don’t have permission to upload or create files here" : "No cuentas con los permisos para cargar o crear archivos aquí",
    "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Cargando %n archivos"],
    "New" : "Nuevo",
    "\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo inválido. ",
    "File name cannot be empty." : "El nombre de archivo no puede estar vacío.",
    "\"{name}\" is not an allowed filetype" : "\"{name}\" es un tipo de archivo no permitido",
    "Storage of {owner} is full, files can not be updated or synced anymore!" : "El espacio de {owner} está lleno. ¡Los archivos ya no se pueden actualizar o sincronizar!",
    "Your storage is full, files can not be updated or synced anymore!" : "Tu espacio está lleno. ¡Los archivos ya no se pueden actualizar o sincronizar!",
    "Storage of {owner} is almost full ({usedSpacePercent}%)" : "El espacio de {owner} está casi lleno ({usedSpacePercent}%)",
    "Your storage is almost full ({usedSpacePercent}%)" : "Tu espacio está casi lleno ({usedSpacePercent}%)",
    "_matches '{filter}'_::_match '{filter}'_" : ["coincide '{filter}'","coincidencia '{filter}'"],
    "View in folder" : "Ver en la carpeta",
    "Copied!" : "¡Copiado!",
    "Copy direct link (only works for users who have access to this file/folder)" : "Copiar liga directa (sólo funciona para usuarios que tienen acceso a este archivo/carpeta)",
    "Path" : "Ruta",
    "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
    "Favorited" : "Marcado como favorito",
    "Favorite" : "Favorito",
    "New folder" : "Carpeta nueva",
    "Upload file" : "Cargar archivo",
    "An error occurred while trying to update the tags" : "Se presentó un error al intentar actualizar la etiqueta",
    "Added to favorites" : "Agregado a los favoritos",
    "Removed from favorites" : "Eliminado de los favoritos",
    "You added {file} to your favorites" : "Agregaste {file} a tus favoritos",
    "You removed {file} from your favorites" : "Eliminaste {file} de tus favoritos",
    "File changes" : "Cambios al archivo",
    "Created by {user}" : "Creado por {user}",
    "Changed by {user}" : "Cambiado por {user}",
    "Deleted by {user}" : "Borrado por {user}",
    "Restored by {user}" : "Restaurado por {user}",
    "Renamed by {user}" : "Renombrado por {user}",
    "Moved by {user}" : "Movido por {user}",
    "\"remote user\"" : "\"usuario remoto\"",
    "You created {file}" : "Creaste {file}",
    "{user} created {file}" : "{user} creó {file}",
    "{file} was created in a public folder" : "{file} fue creado en una carpeta pública",
    "You changed {file}" : "Cambiaste {file}",
    "{user} changed {file}" : "{user} cambió {file}",
    "You deleted {file}" : "Borraste {file}",
    "{user} deleted {file}" : "{user} borró {file}",
    "You restored {file}" : "Restauraste {file}",
    "{user} restored {file}" : "{user} restauró {file}",
    "You renamed {oldfile} to {newfile}" : "Renombraste {oldfile} como {newfile}",
    "{user} renamed {oldfile} to {newfile}" : "{user} renombró {oldfile} como {newfile}",
    "You moved {oldfile} to {newfile}" : "Moviste {oldfile} a {newfile}",
    "{user} moved {oldfile} to {newfile}" : "{user} movió {oldfile} a {newfile}",
    "A file has been added to or removed from your <strong>favorites</strong>" : "Un archivo ha sido agregado o eliminado de tus <strong>favoritos</strong>",
    "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Un archivo o carpeta ha sido <strong>cambiado </strong> o <strong>renombrado</strong>",
    "A new file or folder has been <strong>created</strong>" : "Un archivo o carpeta ha sido <strong>creado</strong>",
    "A file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>borrado</strong>",
    "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limita las notificaciones de la creación y cambios a tus <strong>archivos favoritos</strong> <em>(sólo flujo)</em>",
    "A file or folder has been <strong>restored</strong>" : "Un archivo o carpeta ha sido <strong>restaurado</strong>",
    "Unlimited" : "Ilimitado",
    "Upload (max. %s)" : "Cargar (max. %s)",
    "File handling" : "Manejo de archivos",
    "Maximum upload size" : "Tamaño máximo de carga",
    "max. possible: " : "max. posible:",
    "Save" : "Guardar",
    "With PHP-FPM it might take 5 minutes for changes to be applied." : "Con PHP-FPM podría tomar 5 minutos para que los cambios apliquen. ",
    "Missing permissions to edit from here." : "Faltan privilegios para editar desde aquí. ",
    "%s of %s used" : "%s de %s usado",
    "%s used" : "%s usado",
    "Settings" : "Configuraciones ",
    "Show hidden files" : "Mostrar archivos ocultos",
    "WebDAV" : "WebDAV",
    "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Usa esta dirección para <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">acceder tus archivos vía WebDAV</a>",
    "Uploading @" : "Actualizando @",
    "No files in here" : "No hay archivos aquí",
    "Upload some content or sync with your devices!" : "¡Carga algún contenido o sincroniza con tus dispositivos!",
    "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
    "Select all" : "Seleccionar todo",
    "Upload too large" : "La carga es demasido grande",
    "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.",
    "No favorites yet" : "Aún no hay favoritos",
    "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ",
    "Shared with you" : "Compartido con usted",
    "Shared with others" : "Compartido con otros",
    "Shared by link" : "Compartido por liga",
    "Tags" : "Etiquetas",
    "Deleted files" : "Archivos borrados",
    "Text file" : "Archivo de texto",
    "New text file.txt" : "Nuevo ArchivoDeTexto.txt",
    "Uploading..." : "Cargando...",
    "..." : "...",
    "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["falta {hours}:{minutes}:{seconds} hora","faltan {hours}:{minutes}:{seconds} horas"],
    "{hours}:{minutes}h" : "{hours}:{minutes}h",
    "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["falta {minutes}:{seconds} minuto","faltan {minutes}:{seconds} minutos"],
    "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
    "_{seconds} second left_::_{seconds} seconds left_" : ["falta {seconds} segundo","faltan {seconds} segundos"],
    "{seconds}s" : "{seconds}s",
    "Any moment now..." : "En cualquier momento...",
    "Soon..." : "Pronto...",
    "File upload is in progress. Leaving the page now will cancel the upload." : "La carga del archivo está en curso. El salir de la página ahora, la cancelará. ",
    "Move" : "Mover",
    "Copy local link" : "Copiar liga local",
    "Folder" : "Carpeta",
    "Upload" : "Cargar",
    "A new file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>borrado</strong>",
    "A new file or folder has been <strong>restored</strong>" : "Un archivo o carpeta ha sido <strong>restaurado</strong>",
    "No favorites" : "No hay favoritos"
},
"nplurals=2; plural=(n != 1);");