diff --git a/lib/legacy/legacy-element-mixin.html b/lib/legacy/legacy-element-mixin.html
index 6c2045f155..c1302b1346 100644
--- a/lib/legacy/legacy-element-mixin.html
+++ b/lib/legacy/legacy-element-mixin.html
@@ -86,6 +86,18 @@
this._applyListeners();
}
+ /**
+ * Forwards `importMeta` from the prototype (i.e. from the info object
+ * passed to `Polymer({...})`) to the static API.
+ *
+ * @return {!Object} The `import.meta` object set on the prototype
+ * @suppress {missingProperties} `this` is always in the instance in
+ * closure for some reason even in a static method, rather than the class
+ */
+ static get importMeta() {
+ return this.prototype.importMeta;
+ }
+
/**
* Legacy callback called during the `constructor`, for overriding
* by the user.
diff --git a/lib/legacy/polymer.dom.html b/lib/legacy/polymer.dom.html
index 5417f12e14..afae35b1c3 100644
--- a/lib/legacy/polymer.dom.html
+++ b/lib/legacy/polymer.dom.html
@@ -398,7 +398,7 @@
* This method facades to `Polymer.enqueueDebouncer`.
*
* @memberof Polymer.dom
- * @param {Polymer.Debouncer} debouncer Debouncer to enqueue
+ * @param {!Polymer.Debouncer} debouncer Debouncer to enqueue
*/
Polymer.dom.addDebouncer = Polymer.enqueueDebouncer;
})();
diff --git a/lib/mixins/element-mixin.html b/lib/mixins/element-mixin.html
index 677767d71f..b0f7fba988 100644
--- a/lib/mixins/element-mixin.html
+++ b/lib/mixins/element-mixin.html
@@ -402,15 +402,18 @@
* This path is used to resolve url's in template style cssText.
* The `importPath` property is also set on element instances and can be
* used to create bindings relative to the import path.
- * For elements defined in ES modules, users should implement `importMeta`
- * and this getter will return `import.meta.url`'s path. For elements
- * defined in HTML imports, this getter will return the path to the
- * document containing a `dom-module` element matching this element's
- * static `is` property.
+ *
+ * For elements defined in ES modules, users should implement
+ * `static get importMeta() { return import.meta; }`, and the default
+ * implementation of `importPath` will return `import.meta.url`'s path.
+ * For elements defined in HTML imports, this getter will return the path
+ * to the document containing a `dom-module` element matching this
+ * element's static `is` property.
*
* Note, this path should contain a trailing `/`.
*
* @return {string} The import path for this element class
+ * @suppress {missingProperties}
*/
static get importPath() {
if (!this.hasOwnProperty(JSCompiler_renameProperty('_importPath', this))) {
@@ -426,18 +429,6 @@
return this._importPath;
}
- /**
- * When an element definition is being loaded from an ES module, users
- * may override this getter to return the `import.meta` object from that
- * module, which will be used to derive the `importPath` for the element.
- * When implementing `importMeta`, users should not implement `importPath`.
- *
- * @return {!Object} The `import.meta` object for the element's module
- */
- static get importMeta() {
- return null;
- }
-
constructor() {
super();
/** @type {HTMLTemplateElement} */
diff --git a/lib/mixins/property-effects.html b/lib/mixins/property-effects.html
index d5c60613e2..de92b17c4a 100644
--- a/lib/mixins/property-effects.html
+++ b/lib/mixins/property-effects.html
@@ -43,7 +43,7 @@
READ_ONLY: '__readOnly'
};
- /** @const {string} */
+ /** @const {RegExp} */
const capitalAttributeRegex = /[A-Z]/;
/**
diff --git a/test/unit/resolveurl.html b/test/unit/resolveurl.html
index 5cd59980ca..9da04704ad 100644
--- a/test/unit/resolveurl.html
+++ b/test/unit/resolveurl.html
@@ -82,7 +82,9 @@
test('Urls in styles and attributes', testStylesAndAttributes('p-r', 'sub'));
- test('Urls in styles and attributes (importMeta)', testStylesAndAttributes('p-r-im', 'http://foo.com/mymodule'));
+ test('Urls in styles and attributes (importMeta)', testStylesAndAttributes('p-r-im', 'http://class.com/mymodule'));
+
+ test('Urls in styles and attributes (importMeta, hybrid)', testStylesAndAttributes('p-r-hybrid', 'http://hybrid.com/mymodule'));
test('url changes via setting importPath/rootPath on element instance', function() {
var el = document.createElement('p-r');
diff --git a/test/unit/sub/resolveurl-elements.html b/test/unit/sub/resolveurl-elements.html
index 30611b6d24..b9bdfa82fb 100644
--- a/test/unit/sub/resolveurl-elements.html
+++ b/test/unit/sub/resolveurl-elements.html
@@ -34,19 +34,33 @@